Настройка канонических URL 1С-Битрикс
Дублированный контент — одна из частых SEO-проблем в Битрикс. Один и тот же товар доступен по нескольким URL: через раздел каталога, через поиск, с GET-параметрами фильтра, с параметрами сессии. Без тега <link rel="canonical"> поисковик сам решает, какой URL считать основным — и не всегда правильно.
Где в Битрикс возникают дубли URL
- Товар доступен из нескольких разделов каталога (инфоблок с множественной привязкой к разделам)
- Страница с GET-параметрами:
/catalog/?sort=price&order=ascи/catalog/ - Страница умного фильтра без SEF:
/catalog/?arrFilter_P1=100&set_filter=Y - HTTP и HTTPS версии
- С
wwwи без
Canonical через компонент
В стандартных компонентах Битрикс (bitrix:catalog.element, bitrix:catalog.section) нет встроенного вывода canonical-тега. Его нужно добавлять в шаблон компонента.
В шаблоне template.php карточки товара:
// Получить канонический URL элемента
$canonicalUrl = $APPLICATION->GetCurDir() . CIBlockElement::GetDetailPageUrl(
$arResult['IBLOCK']['DETAIL_PAGE_URL'],
$arResult
);
// Вывести в HEAD через AddHeadString
$APPLICATION->AddHeadString(
'<link rel="canonical" href="https://site.ru' . htmlspecialchars($canonicalUrl) . '" />',
true
);
Canonical для страниц с фильтром
Страницы умного фильтра с непустыми параметрами должны иметь canonical на базовую страницу раздела или на SEF-URL фильтра (если используется ЧПУ для фильтра).
В шаблоне компонента умного фильтра или раздела:
$isFiltered = !empty($_REQUEST['set_filter']) || !empty($_REQUEST['arrFilter_P1']);
if ($isFiltered) {
$canonicalUrl = $APPLICATION->GetCurPage(); // только путь без GET-параметров
$APPLICATION->AddHeadString('<link rel="canonical" href="https://site.ru' . $canonicalUrl . '" />');
}
Canonical для пагинации
Страницы /catalog/?PAGEN_1=2 — спорный момент. Варианты:
- Canonical на первую страницу (агрессивно, теряет ссылочный вес)
- Не ставить canonical, но использовать
rel="prev"/rel="next"(устаревший подход, Google не учитывает) - Уникальный canonical для каждой страницы пагинации (рекомендуется при уникальном контенте на каждой странице)
Глобальная настройка canonical через init.php
Для централизованной установки canonical без изменения каждого шаблона:
// /local/php_interface/init.php
AddEventHandler('main', 'OnEndBufferContent', function(&$content) {
global $APPLICATION;
$canonical = 'https://site.ru' . $APPLICATION->GetCurPage();
$tag = '<link rel="canonical" href="' . htmlspecialchars($canonical) . '" />';
$content = str_replace('</head>', $tag . '</head>', $content);
});
Подход грубый — подходит для простых сайтов. Для каталогов с фильтрами нужна логика исключений.
Сроки выполнения
Настройка canonical для карточек товаров и разделов каталога — 2–4 часа. Полная реализация с обработкой страниц фильтра, пагинации и кастомных URL — 4–8 часов.







