Борьба с дублями страниц на «1С-Битрикс»
Содержание 9 разделов
На «1С-Битрикс» одна карточка товара или раздел каталога нередко доступны по нескольким адресам. Причина обычно не в одном «неправильном модуле», а в сочетании структуры инфоблоков, ЧПУ, привязки товара к нескольким разделам, фильтра, пагинации и старых адресов. Исправление начинается с инвентаризации дублей: одинаково выглядящие URL могут требовать разных решений.
Что считать дублем
Полный дубль отдаёт одинаковое содержимое по разным URL. Почти дубль отличается только сортировкой, рекламной меткой, блоком рекомендаций или небольшим набором товаров. В обоих случаях поисковик выбирает канонический документ самостоятельно, если сайт не даёт согласованных сигналов.
Яндекс объединяет одинаковые страницы в группу дублей. Из-за этого в поиске может остаться не тот адрес, который нужен владельцу сайта, а обход важных страниц замедлится [1]. Google также группирует одинаковые или очень похожие URL и использует редиректы, rel="canonical", sitemap и внутренние ссылки как сигналы выбора основной версии [2].
Откуда дубли берутся в «1С-Битрикс»
Один товар привязан к нескольким разделам
Если шаблон детального адреса включает путь раздела, товар может открываться из каждой привязки:
/catalog/noutbuki/model-x/
/catalog/rasprodazha/model-x/
Саму множественную привязку можно сохранить для навигации, но публичный адрес товара должен быть однозначным. Основной раздел, генерация ссылок в компонентах, хлебные крошки, canonical и sitemap должны указывать на одну версию.
Одновременно работают старые и новые правила ЧПУ
После смены шаблона адресов старые URL иногда продолжают отвечать кодом 200. Похожая ситуация возникает, когда карточка доступна с index.php, без завершающего слеша и с ним, либо по пути, который обрабатывает общее правило urlrewrite.php. Для снятых с публикации адресов выбирают 301-редирект на точный новый эквивалент. Если эквивалента нет, корректнее вернуть 404 или 410, чем перенаправлять всё на главную.
Умный фильтр создаёт несколько форм одной выборки
Стандартный catalog.smart.filter умеет работать с ЧПУ [6], но это не отменяет дублей. Один набор условий может появиться как GET-адрес и как ЧПУ, с разным порядком свойств, пустыми значениями, параметром сброса или AJAX. Для полезных фильтров выбирают один воспроизводимый URL, а остальные формы нормализуют.
Сортировка, вид, количество товаров и рекламные метки
Параметры sort, order, view, show, UTM-метки и идентификаторы рекламных систем обычно не создают новую поисковую сущность. Они не должны менять canonical, попадать в sitemap или размножаться во внутренних ссылках. Для Яндекса параметры, которые не меняют содержимое, можно описать директивой Clean-param [1]. Google эту директиву не использует.
Пагинация
Страницы пагинации не являются полными дублями, если показывают разные товары. Нельзя без проверки ставить canonical со всех страниц на первую: это сообщает, что содержание равнозначно, хотя оно различается. Обычно каждая страница списка остаётся доступной, содержит собственную ссылку canonical и связана последовательной навигацией. При этом первая страница не должна одновременно существовать как /catalog/ и /catalog/?PAGEN_1=1.
Протокол, домен, регистр и слеши
Версии HTTP/HTTPS, www/без www, разный регистр пути и варианты завершающего слеша должны приводиться к единой схеме постоянными редиректами. Выбранная версия затем используется во всех ссылках, canonical и sitemap. Редирект является более сильным сигналом канонизации, чем sitemap [2].
Как найти дубли до внесения правок
- Обойти сайт краулером. Сохранить URL, код ответа, title, H1, canonical, robots meta, размер текста и хеш основного содержимого.
- Собрать данные Яндекс Вебмастера. В исключённых страницах отфильтровать статус дубля и выгрузить URL [1].
- Проверить Google Search Console. Посмотреть группы «Дубликат», «Страница с переадресацией», «Альтернативная страница» и расхождения между объявленным и выбранным Google canonical.
- Проанализировать серверные логи. Выяснить, какие параметрические URL роботы обходят чаще всего.
- Проверить источники ссылок. Найти шаблоны, меню, фильтр, хлебные крошки и карту сайта, которые продолжают публиковать альтернативный адрес.
Список группируют не только по одинаковому HTML. Полезно сравнивать набор товара, шаблон URL и причину появления. Так становится видно, где достаточно исправить генерацию ссылок, а где требуется редирект или изменение логики компонента.
Как выбрать способ исправления
301-редирект
Используется, когда альтернативная страница больше не нужна пользователю и всегда имеет точный основной эквивалент. Подходит для HTTP → HTTPS, www → без www, старого ЧПУ, лишнего index.php, неверного регистра и удалённой формы первой страницы пагинации. После редиректа внутренние ссылки сразу меняют на конечный URL, чтобы не создавать цепочки.
rel="canonical"
Подходит, когда несколько URL должны оставаться доступными, но представляют одинаковое или очень близкое содержимое. Canonical задают абсолютным адресом, без редиректа и запрета обхода целевой страницы. На основной странице полезен canonical на саму себя. Google рекомендует не давать противоречащие сигналы: нельзя указывать один URL в canonical, другой в sitemap и третий во внутренних ссылках [2].
В Bitrix вывод canonical зависит от версии продукта и шаблона. Поддержка вывода свойства страницы canonical через отложенную функцию CMain::ShowLink() появилась в главном модуле давно [7], однако наличие функции не гарантирует правильный адрес. После настройки проверяют итоговый HTML для карточек, разделов, фильтров и пагинации, включая страницы из кеша.
noindex
noindex исключает страницу из Google после того, как робот её загрузит и увидит метатег или HTTP-заголовок [3]. Это решение подходит для страниц, которые нужны пользователю, но не должны участвовать в поиске и не являются вариантом для объединения сигналов через canonical. Если URL одновременно закрыт в robots.txt, Google может не увидеть noindex.
robots.txt
Файл ограничивает обход классов URL и помогает снизить нагрузку от бесполезных параметрических комбинаций. Он не служит защитой данных и не гарантирует исчезновение самого адреса из Google: запрещённый URL может быть известен по ссылкам [4]. В «1С-Битрикс» есть штатный генератор robots.txt, но его результат нужно сверять с реальной структурой и правилами поисковых систем [5].
Clean-param для Яндекса
Если GET-параметр не меняет содержимое — например, это рекламная метка — директива помогает Яндексу считать варианты одним адресом. Параметры, которые меняют набор товаров или смысл страницы, нельзя объявлять незначащими без проверки. Clean-param не заменяет правила для Google и не исправляет разные ЧПУ-пути.
Безопасная последовательность внедрения
- Сделать резервную копию файлов и базы данных.
- Зафиксировать таблицу «дубль → основная версия → способ исправления».
- Исправить генерацию внутренних ссылок и единую схему адресов.
- Настроить точечные 301-редиректы без цепочек и циклов.
- Настроить canonical для тех URL, которые остаются доступными.
- Очистить sitemap: оставить канонические страницы с кодом 200.
- Настроить ограничения обхода для служебного пространства URL.
- Сбросить релевантный кеш Bitrix и проверить публичную страницу без авторизации.
- Пройти тестовую выборку роботом Google, Яндекса и обычным браузером.
Что проверять после исправления
- основной URL отвечает 200, альтернативный — ожидаемым 301, 404 или 200 с согласованным canonical;
- редирект ведёт сразу на конечный адрес и сохраняет путь к соответствующему товару или разделу;
- canonical присутствует один раз, абсолютен и не ведёт на закрытую, несуществующую или перенаправляющую страницу;
- внутренние ссылки, хлебные крошки и sitemap используют выбранную версию;
- фильтр не создаёт альтернативный URL при смене порядка действий;
- параметры сортировки и рекламы не попадают в индексируемую структуру;
- кешированная версия страницы содержит те же метатеги, что и некешированная;
- в панелях поисковых систем постепенно уменьшается число новых дублей.
Ошибки, из-за которых ситуация становится хуже
- Редирект всех дублей на главную. Пользователь теряет нужный товар, а сигнал соответствия адресов становится слабым.
- Canonical через JavaScript. Надёжнее выводить его в исходном HTML и не менять после загрузки [2].
- Закрыть URL в robots.txt и ждать, что Google прочитает noindex. Закрытая страница недоступна для чтения метатега [3].
- Считать пагинацию полным дублем. На следующих страницах находятся другие товары и ссылки.
- Исправить только sitemap. Альтернативные адреса продолжат появляться из фильтра и шаблонов.
- Установить модуль без проверки результата. Модуль не знает бизнес-логику разделов, основной путь товара и перечень полезных фильтров.
Результат качественной очистки
После исправления каждый товар, раздел и выбранная SEO-страница фильтра имеют основной адрес. Альтернативные URL либо переводят пользователя на точный эквивалент, либо согласованно указывают canonical, либо корректно исключаются из обхода и поиска. Главное изменение происходит не в одном метатеге: CMS перестаёт снова генерировать дубли в меню, фильтре, хлебных крошках и sitemap.
Источники
[1] Яндекс Вебмастер — Дублирование страниц — https://yandex.ru/support/webmaster/ru/robot-workings/double
[2] Google Search Central — How to specify a canonical URL — https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
[3] Google Search Central — Block Search indexing with noindex — https://developers.google.com/search/docs/crawling-indexing/block-indexing
[4] Google Search Central — Introduction to robots.txt — https://developers.google.com/search/docs/crawling-indexing/robots/intro
[5] 1С-Битрикс — Генератор robots.txt — https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=139&LESSON_ID=5814
[6] 1С-Битрикс — Компонент «Умный фильтр» — https://dev.1c-bitrix.ru/user_help/components/content/catalog/smart_filter.php
[7] 1С-Битрикс — История версий главного модуля: поддержка вывода canonical — https://dev.1c-bitrix.ru/docs/versions.php?lang=ru&module=main