1С-Битрикс: SEO для страниц пагинации
Как убрать дубли title и description на страницах пагинации 1С-Битрикс (PAGEN_1, PAGEN_2): обработчик OnEpilog в init.php, плюс canonical и правила для роботов.
Правки в .settings.php и init.php вносите через SSH или FTP и сделайте копию файла: ошибка в нём останавливает весь сайт, а через админку её не исправить.
Проблема
Списки в Битриксе листаются через параметр PAGEN_1 (/catalog/?PAGEN_1=2). У всех страниц списка одинаковые title и description, и поисковики считают их дублями. Есть два подхода: закрыть страницы пагинации от индексации или сделать их метатеги уникальными. Здесь — второй.
Обработчик в init.php
Добавьте в /local/php_interface/init.php:
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler('main', 'OnEpilog', static function () {
global $APPLICATION;
foreach ($_GET as $key => $value) {
if (preg_match('/^PAGEN_\d+$/', $key) && (int)$value > 1) {
$page = (int)$value;
$title = $APPLICATION->GetProperty('title') ?: $APPLICATION->GetTitle();
$APPLICATION->SetPageProperty('title', $title . ' — страница ' . $page);
$description = (string)$APPLICATION->GetProperty('description');
if ($description !== '') {
$APPLICATION->SetPageProperty('description', $description . ' Страница ' . $page . '.');
}
break;
}
}
});
Обработчик срабатывает для любого номера списка (PAGEN_1, PAGEN_2 …) и только со второй страницы. Первая страница остаётся без изменений.
Что ещё сделать
- Не ставьте на страницы пагинации
canonicalна первую страницу — Google рекомендует, чтобы каждая страница списка была самостоятельной. - Яндексу можно подсказать игнорировать параметр через
Clean-param: PAGEN_1в robots.txt, если страницы пагинации не нужны в поиске. - Текст-описание раздела выводите только на первой странице, чтобы не размножать его по всем.