Атрибут rel="canonical"

#
Re: Атрибут rel="canonical"
Спасибо преогромнейшее!!!
#
Re: Атрибут rel="canonical"
В продолжении темы:
Немного другая суть, в магазине есть одинаковые позиции, лежащие в разных папках магазина. Т.е. например "Стенд для родителей" лежит в группах "Школа" и "Детский сад". Как в таком случае вывалить в шапку канонический линк?
(Принимая как факт то, что если канонический линк указанный на странице ведет на эту же страницу, то поисковик считает данную страницу канонической)

Т.е. ,например, мы в доп.свойствах товара ставим галку и на странице товара появляется кан.линк
Безумие - как гравитация, стоит лишь немного подтолкнуть...
Модератор
#
Re: Атрибут rel="canonical"
а почему ярлыками не пользуетесь?
#
Re: Атрибут rel="canonical"
Не так хорошо разбираюсь в программировании, поэтому прошу подсказать. Куда в макет вставлять
<link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(); ?>"/>
?

Достаточно ли будет вставить в макет "Домой МакетыМакет "Основной макет сайта"Макет "Шаблон для Интернет-магазинаСайт2"" если у меня интернет-магазин или нужно во всех макетах?
Модератор
#
Re: Атрибут rel="canonical"
xmvision,
Вставить в самый верхний уровень макета. Потом проверить в коде сайта чтобы все работало корректно.
#
Re: Атрибут rel="canonical"
Добрый день!
Подскажите пожалуйста, можно ли сделать так, чтобы у модификаций канонической страницей был основной товар?
Модератор
#
Re: Атрибут rel="canonical"
cerammix,
Можно, проверяете если это модификация, то выводите в каноническую путь основного товара.
#
Re: Атрибут rel="canonical"
а не поможете с кодом? буду очень благодарна
#
Re: Атрибут rel="canonical"
yestravel писал(а):

Но это относится именно к адресам page-2, page-3 и т.д., но при использовании пагинации возникает вот такой адрес - page-1, а это полный точный дубль основной страницы и его отсечь было бы во благо...

Для основной страницы нужно отсекать, для второй и последующих наверное не стоит.
#
Re: Атрибут rel="canonical"
ChilliVilli, cerammix, yestravel, вот усовершенствованный вариант решения:

Точно также, создаем файл /modules/core/utils.php со следующим кодом:

<?php

defined('HOSTCMS') || exit('HostCMS: access denied.');

/**
* Some useful helpers
*
* @package HostCMS 6\Core
* @version 6.x
* @author James V. Kotoff
* @copyright 2013-2015
* @access public free
*
* path to file: /modules/core/utils.php
*
*/
class Core_Utils
{
   /**
    * Core_Utils::getCanonicalUrl() - вычисляет канонический адрес страницы для link rel="canonical"
    *
    * @param boolean [$useParentShopItem = false] В интернет-магазине, для страниц товаров-модификаций считать каноническим урл родительского товара. По умолчанию выключено.
    * @param string [$sFirstPageSuffix = 'page-1/'] Суффикс пейджинга на первую страницу, удаляется из урла, чтобы каноническим урлом первой страницы был урл без пейджинга.
    * @return string
    *
    * @example:
    * <link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(TRUE); ?>"/>
    *
    */
   static public function getCanonicalUrl($bUseParentShopItem = false, $sFirstPageSuffix = 'page-1/')
   {
      $sLink = '';

      $object = Core_Page::instance()->object;
      // если включен режим подстановки родительского товара вместо модификации
      // и текущая страница является страницей товара в магазине
      if ($bUseParentShopItem && is_object($object) && $object instanceof Shop_Controller_Show && $object->item)
      {
         // получаем товар
         $oShop_Item = Core_Entity::factory('Shop_Item', $object->item);
         // если товар найден и это модификация
         if ($oShop_Item && $oShop_Item->modification_id)
         {
            // формируем относительный путь к родительскому товару
            $oShop = Core_Entity::factory('Shop', $oShop_Item->shop_id);
            $sLink = $oShop->Structure->getPath() . $oShop_Item->Modification->getPath();
         }
      }

      // если мы еще не вычислили ссылку ранее, то преобразуем текущий request_uri
      if (!$sLink)
      {
         $aLink = explode('?', Core_Array::get($_SERVER, 'REQUEST_URI', ''));
         $sLink = reset($aLink);

         // проверим, что это не пейджинг на первую страницу
         $FirstPageSuffixLength = mb_strlen($sFirstPageSuffix);
         if (mb_substr($sLink, (0 - $FirstPageSuffixLength)) == $sFirstPageSuffix)
         {
            // если это пейджинг на первую страницу, то уберем ее суффикс из урла
            $sLink = mb_substr($sLink, 0, mb_strlen($sLink)-$FirstPageSuffixLength);
         }
      }

      // получим главный алиас текущего сайта
      $oSite_Alias = Core_Entity::factory('Site', CURRENT_SITE)->getCurrentAlias();
      if($oSite_Alias) {

         // определим метод доступа у текущему узлу структуры, http или https
         $oStructure = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID);
         $scheme = $oStructure->https ? 'https' : 'http';

         // дополняем относительную ссылку до абсолютной
         $sLink = $scheme. '://' . $oSite_Alias->alias_name_without_mask . $sLink;
      }

      // вернем результат
      return $sLink;
   }

}



А вот вызов немного поменяется.
По умолчанию можно также как раньше
<link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(); ?>"/>


Если хотите чтобы для модификаций каноническим урлом были родительские товары, то
<link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(TRUE); ?>"/>


Если у вас нестандартный суффикс первой страницы (например, pg_1, pg_2 и т.д.) и при этом вы еще и хотите чтобы для модификаций каноническим урлом были родительские товары, то
<link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(TRUE, 'pg_1/'); ?>"/>


Просто нестандартный суффикс, без поддержки модификаций товаров
<link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(FALSE, 'pg_1/'); ?>"/>

Заказов не беру. Консультирую редко.
Авторизация