Как убрать дубли страниц сайта на 1С-Битрикс

Сегодня мы поговорим о такой важной тем, как ДУБЛИ СТРАНИЦ в bitrix - они могут достать, так как страницы сайта появляются под разными адресами, а если вы еще и продвигаете интернет-магазин, то это еще и снижение продаж...так как страницы - детальные описания товара особо выходить не будут в ТОП поисковиков...разбираемся...

В сети много чего написано по поводу того как избавиться от дублей в bitrix - но все очень не ясно и размывчато - давайте вносить ясность.

Как убрать дубли страниц сайта на 1С-Битрикс - мы будем на живом примере, где я и убирал эти дубли.

Есть две страницы одинаковые совершенно:

  • http://vdmim.ru/catalog/detskoepitanie/pyure_sami_s_usami_myasnoe_s_ovoshchami_100_gr_kuritsa_s_tsvetnoy_kapustoy_s_6_mes_/
  • http://vdmim.ru/catalog/pure/pyure_sami_s_usami_myasnoe_s_ovoshchami_100_gr_indeyka_s_brokkoli_i_risom_s_6_mes_

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

1) Первым делом находим файл result_modifier.php (он лежит обычно в папке с шаблоном и там внутри найдете папку catalog.element и в ней еще папку default вот в ней):

// add for canonical
$arElement = CIblockElement::GetById($arResult["ID"])->GetNext();
$arResult['DETAIL_PAGE_URL'] = $arElement['DETAIL_PAGE_URL'];
$cp = $this->__component;
if (is_object($cp))
    $cp->SetResultCacheKeys(array('DETAIL_PAGE_URL'));

2) Теперь в той же папке есть файл - component_epilog.php - в нем вставляем следующее:

global $APPLICATION // добавить только, если этого нет
// add for canonical
$APPLICATION->AddHeadString('<link href="//'.SITE_SERVER_NAME.$arResult['DETAIL_PAGE_URL'].'" rel="canonical" />',true);

 

Или так:

global $APPLICATION // добавить только, если этого нет
// add for canonical
$APPLICATION->AddHeadString('<link href="http://'.SITE_SERVER_NAME.$arResult['DETAIL_PAGE_URL'].'" rel="canonical" />',true);

Тут используется, конкретно http://, а в варианте выше универсально и для https также. Выбирать вам.

 

Кстати, все эти файлы должны начинаться с этого:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

Для тех, кто не разбирается в php - в этих файлах вы вставляете файл в конец, но перед таким символом ?>, иначе у вас ничего не заработает.

 

* Так...если это касается категорий, то все тоже самое, только меняем на это $arSection['SECTION_PAGE_URL']

Идем в catalog.section в result_modifier.php (но почему-то у меня это не сработало! - кто найдет ошибку напишите пожалуйста в комментах)

вставляем это:

$arSection = CIblockSection::GetById($arResult["ID"])->GetNext();
$arResult['SECTION_PAGE_URL'] = $arSection['SECTION_PAGE_URL'];
$cp = $this->__component;
if (is_object($cp))
$cp->SetResultCacheKeys(array('SECTION_PAGE_URL'));

а в в component_epilog.php вставляем это:

$APPLICATION->AddHeadString('<link href="http://'.SITE_SERVER_NAME.$arResult['SECTION_PAGE_URL'].'" rel="canonical" />',true);

 

! Самый рабочий метод - и самый простой! Вставляем нижеприведенный код в header.php - и ничего все, что выше было понаписано не надо даже (по идее этот вариант самый лучший оказался, и мороки меньше, только 404 страницы - для них он тоже выставляет, не особо знаю как это исключить, скоро разберусь):

<?

$APPLICATION->AddHeadString('<link rel="canonical" href="http://site.ru' . str_replace('index.php', '', $APPLICATION->GetCurPage(true)) . '" />');

?>

 

Вопросы будут обращайтесь...в комменты ниже

Комментарии   

0 # Никита 11.10.2016 14:07
Здравствуйте!

Попробовал Ваш способ (последний). Подскажите, правильно ли то, что на страницах товаров одинаковых выводится канонический url этой же страницы, я имею в виду, что на странице

domain.com/category-1/product-1
выводится
,

на странице domain.com/category-2/product-1 выводится

?

По идее во второй категории (/category-2/) должен выводится
, указывая, что это первоисточник.
Ответить | Ответить с цитатой | Цитировать
+1 # Admin 21.12.2016 08:27
Да, так будет правильно с точки зрения SEO
Ответить | Ответить с цитатой | Цитировать
+6 # Андрей 21.12.2016 06:35
а разве такой код не будет динамически меняться на разных страницах одного и того же товара?
допустим, для урла с адресом:
каталог/производитель/наименование
будет канонические ссылка ="каталог/производитель/наименование"
а для
каталог/страна/наименование
будет канонические ссылка ="каталог/страна/наименование"
Так и какой смысл от таких канонов?
Ведь они должны все дубли указывать на одну страницу, а по факту этого не происходит.
Ответить | Ответить с цитатой | Цитировать
0 # Admin 21.12.2016 08:28
Такой вариант как у вас очень редок, возможно там нужен какой-то частный вариант и посмотрите реально ли так будет как вы написали или это просто ваше предположение
Ответить | Ответить с цитатой | Цитировать
0 # Интересное 12.07.2021 05:40
Что делать, если 2 canonical, один чужой и неправильный везде ссылается на свою страничку. Новый (мой) ссылается только на нужную страничку. Весь код перерыл.
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Защитный код
Обновить

Вы здесь: Сайтостроение CMS Bitrix Как убрать дубли страниц сайта на 1С-Битрикс