BITRIX — прячем дубли страниц с помощью rel=»canonical»
Не нравится мне Битрикс, особенно в плане seo-оптимизации. Но есть немало интернет-магазинов на этой CMS и благодаря теории вероятности мне «посчастливилось» с ним столкнуться. Любит он плодить дубли страниц, особенно на товары, которые присутствуют в разных категориях, и штатными средствами решения этой проблемы пока нет.
Допустим, у нас есть товар — планшетофон, назовем его «TabSmart x28″ который относится и к планшетам и к смартфонам. И показывается он у нас в категориях /catalog/smartphones/ и /catalog/tablets/. Соответственно если ЧПУ настроены на вывод категорий, то мы получим две одинаковые страницы по адресу
/catalog/smartphones/tabsmart-x28/ и /catalog/tablets/tabsmart-x28/
Причем часть посетителей будут попадать на первую, а часть на вторую.
Теоретически ничего страшного в этом нет, но если посмотреть внимательно, то мы увидим следующее:
1) Дубли мета-тегов (TITLE, DESCRIPTION)
2) Дубль контента
что для SEO не очень то и хорошо. Поисковики будут ругаться на дубли, показывать в выдаче только одну страницу из двух, а может и вовсе засунут куда подальше, а нам с вами этого очень бы не хотелось.
В этой статье мы рассмотрим вариант борьбы с дублями на основе тега rel=»canonical», который рекомендует использовать Google support.google.com/webmasters/answer/139066?hl=ru
Столкнувшись с этой проблемой я надеялся найти готовое решение, но к удивлению ничего толкового не нашел.
Программистов под рукой тоже не было, поэтому пришлось писать самому, на коленке. Возможно он не блещет красотой и минимализмом, но со своей задачей справляется на ура.
Итак, приступим:
Создаем польз. свойство у инфоблока категорий «Канонический URL» с id CANONICAL
(Контент -> инфоблоки -> типы инфоблоков -> Каталог -> Каталог товаров)
В шаблоне карточки товара (в дефолтном шаблоне лежит примерно тут: /bitrix/components/bitrix/catalog.element/templates/.default/template.php)
в самом верху добавляем
1 |
<? $APPLICATION->SetPageProperty('canonical', $arResult["PROPERTIES"]["CANONICAL"]["VALUE"] ); ?> |
в шаблоне header.php между тегами <head></head> вставляем код
1 2 3 |
<?php function ShowCanonical(){ global $APPLICATION; if ($APPLICATION->GetProperty("canonical")!="" && $APPLICATION->GetProperty("canonical")!=$APPLICATION->sDirPath){ return '<link rel="canonical" href="'.$APPLICATION->GetProperty("canonical").'" />'; } else {return false;} } $APPLICATION->AddBufferContent('ShowCanonical'); ?> |
Все. Теперь идем в карточку товара, у которой есть дубли, находим поле «Канонический URL» и вставляем в него путь до карточки товара, которую хотим обозначить как каноническую, но без указания домена, например /catalog/tablets/tabsmart-x28/
Теперь все страницы, которые будут отображать этот товар по другим URL’ам будут иметь тег <link rel=»canonical» href=»канонический URL» />
Огромное спасибо помогло!
можно просто в файле шаблона
$APPLICATION->AddHeadString(»,true);
Спасибо, полезная статья
А как найти дубли страниц?
в 1С-битрикс 15.5 получилось задать свойство только так $arResult[‘UF_CONONICAL’] этот вариант почему то не сработал $arResult[«PROPERTIES»][«CANONICAL»][«VALUE»] остальное все сработало, спасибо!
Добрый день! Почему то не получается((
Вопрос:
<link rel="canonical" href="GetCurDir(); ?>» />
должен присутствовать в head или что должно быть вместо?