Soft2Soft SEO Практическая база знаний
Техническое SEO

Как устранить конфликт canonical и sitemap у страниц фильтров

29 просмотров
canonical sitemap страницы фильтров

Чтобы устранить конфликт canonical и sitemap у страниц фильтров, назначьте каждому шаблону URL одну стратегию: самостоятельная индексация, объединение с канонической страницей или исключение из индекса. Затем согласуйте HTTP-ответ, директивы robots, canonical, внутренние ссылки и XML-карту сайта. URL с canonical на другую страницу не должен одновременно присутствовать в sitemap как предпочтительный адрес.

Инструкция прежде всего относится к Google и опирается на правила Google Search Central. Яндекс, Bing и другие поисковые системы могут иначе обрабатывать параметры, пагинацию и канонические сигналы, поэтому для них результат необходимо отдельно проверять в соответствующих панелях вебмастера.

Когда возникает конфликт

Типичный конфликт выглядит так: XML-карта сайта содержит URL фильтра https://example.com/catalog/?color=red, а HTML этой страницы указывает canonical на категорию без фильтра:

<link rel="canonical" href="https://example.com/catalog/">

Sitemap в этом случае сообщает Google, что параметрический URL является предпочтительным кандидатом на обход и индексацию, а canonical рекомендует объединить его с другим адресом. Google может выбрать собственный canonical, продолжить обход обоих URL или исключить страницу фильтра из результатов.

Canonical является сигналом, а не обязательной командой. Он предназначен для одинаковых или действительно близких по основному содержанию документов. Если ассортимент, назначение страницы и пользовательский запрос заметно отличаются, Google может проигнорировать canonical на общую категорию. Одного совпадения тематики недостаточно.

Шаг 1. Классифицируйте шаблоны фильтров

Не назначайте одно правило всем комбинациям параметров. Составьте перечень шаблонов URL и распределите их по назначению.

Тип страницы Пример Стратегия
Самостоятельная посадочная страница /catalog/red-shoes/ HTTP 200, self-canonical, разрешённая индексация, включение в sitemap
Технический вариант той же выдачи /catalog/?sort=price Canonical на основную категорию, исключение из sitemap
Комбинаторная выборка без самостоятельной ценности /catalog/?color=red&size=42&stock=1 noindex, исключение из sitemap, последующий контроль обхода
Персонализированная или сессионная выдача /catalog/?region=12&session=abc Не включать в sitemap и не использовать как канонический URL

Индексируемая страница фильтра должна отвечать отдельному поисковому намерению, иметь стабильный URL, понятный заголовок, доступные внутренние ссылки и содержимое, отличающее её от общей категории. Простого изменения порядка товаров или временного состава из-за наличия обычно недостаточно.

Не назначайте canonical на общую категорию только из-за наличия параметров в URL. Сначала определите, является ли страница реальным дублем. При существенном различии содержимого поисковая система может проигнорировать canonical.

Шаг 2. Настройте индексируемые фильтры

Для фильтра, который должен участвовать в поиске, используйте согласованный набор сигналов:

  1. Страница возвращает конечный HTTP-статус 200.
  2. В HTML нет директивы noindex.
  3. В HTTP-заголовках нет X-Robots-Tag: noindex.
  4. Canonical указывает на текущий абсолютный URL.
  5. Основные внутренние ссылки ведут на этот же URL.
  6. URL включён в sitemap.
  7. URL не закрыт в robots.txt.

Пример self-canonical:

<link rel="canonical" href="https://example.com/catalog/red-shoes/">

Тот же адрес должен использоваться в sitemap:

<url>
  <loc>https://example.com/catalog/red-shoes/</loc>
</url>

Проверьте единообразие протокола, домена, регистра, завершающего слеша и кодирования параметров. Альтернативные формы должны либо перенаправляться на выбранный URL, либо содержать согласованный canonical.

Шаг 3. Объедините технические дубли

Параметры сортировки, вида списка, аналитики и другие технические параметры можно объединять с основной категорией, если они не меняют основной набор и назначение содержимого.

  • Оставьте URL доступным для обхода.
  • Укажите canonical непосредственно на основной URL.
  • Удалите технический URL из sitemap.
  • Используйте основной URL во внутренних ссылках, когда параметр не нужен пользователю.
  • Не создавайте цепочки canonical через промежуточные страницы.
<link rel="canonical" href="https://example.com/catalog/">

Канонический адрес должен возвращать 200, быть доступным для обхода, не содержать noindex и не перенаправлять на третий URL.

Не объединяйте с общей категорией фильтр, который существенно меняет ассортимент и отвечает на самостоятельный запрос. Например, страница красной обуви и общая категория обуви могут иметь разное назначение, даже если используют один шаблон.

Шаг 4. Исключите бесполезные комбинации

Для комбинаторных, служебных и персонализированных URL удалите адреса из sitemap и передайте явную директиву noindex через HTML:

<meta name="robots" content="noindex">

Либо через HTTP-заголовок:

X-Robots-Tag: noindex

Проверять нужно оба способа. Отсутствие метатега в HTML не означает, что страница разрешена к индексации: запрет может передаваться заголовком X-Robots-Tag.

URL с noindex должен оставаться доступным для обхода, пока Google не загрузит страницу и не обработает директиву. Не закрывайте такой адрес в robots.txt сразу: робот не сможет прочитать HTML или HTTP-заголовок, а уже известный URL может остаться в индексе.

Ограничивать обход через robots.txt безопаснее только после выполнения всех условий:

  • URL удалён из sitemap и массовых внутренних ссылок;
  • Google повторно обошёл контрольные страницы после добавления noindex;
  • в проверке URL или отчётах индексирования страницы отмечены как исключённые из-за noindex либо отсутствуют в индексе;
  • проверена выборка URL каждого шаблона, а не одна страница;
  • дальнейший обход этих URL не нужен для обнаружения изменений.

Даже после этого robots.txt следует использовать только для сокращения обхода, а не как средство гарантированного удаления адресов из поиска.

Пагинация фильтров

Пагинацию нельзя автоматически канонизировать на первую страницу. Если страницы ?page=2, ?page=3 и далее содержат разные товары и нужны для обхода каталога, они не являются полными дублями первой страницы.

Для обычной пагинации фильтра применяйте следующие правила:

  • первая страница использует self-canonical без лишнего параметра page=1;
  • последующие страницы используют self-canonical, если их содержимое отличается и они доступны поисковому роботу;
  • canonical на первую страницу допустим только для фактических дублей, а не для разных наборов товаров;
  • пагинационные URL не обязательно включать в sitemap, если карта предназначена только для основных посадочных страниц;
  • внутренние ссылки пагинации должны вести на стабильные URL без сессионных и аналитических параметров.

Если пагинация создаётся только интерфейсом, а все товары доступны на одной основной странице, технические URL можно исключить из sitemap и объединить с основной страницей после проверки фактического содержимого.

Страницы с меняющимся ассортиментом

Изменение наличия товаров само по себе не требует смены canonical. Если поисковое намерение и назначение страницы сохраняются, фильтр может оставаться индексируемым с self-canonical, даже когда отдельные позиции появляются и исчезают.

Для таких страниц важно:

  • сохранять постоянный URL и основное тематическое содержание;
  • не добавлять в canonical параметры региона, сессии, пользователя или временной сортировки;
  • не отдавать поисковому роботу принципиально другую базовую страницу, чем обычному пользователю;
  • не устанавливать noindex при каждом временном отсутствии товаров;
  • исключать из индекса персонализированные варианты, если их содержимое зависит от пользователя и не представляет стабильную посадочную страницу.

Canonical должен указывать на стабильную неперсонализированную версию. Если состав страницы полностью определяется авторизацией, геолокацией или сессионными данными, такой URL не следует включать в sitemap.

Шаг 5. Очистите sitemap

В XML-карту сайта включайте только конечные предпочтительные URL, которые разрешены к индексации.

Удалите из sitemap:

  • страницы с canonical на другой URL;
  • страницы с noindex в HTML или X-Robots-Tag;
  • URL с перенаправлениями;
  • страницы с ответами 4xx и 5xx;
  • URL, закрытые в robots.txt;
  • параметры сортировки, аналитики и сессий;
  • персонализированные варианты;
  • альтернативные формы одного канонического адреса.

Наличие страницы в навигации не означает, что её обязательно нужно добавлять в sitemap. Карта сайта должна содержать адреса, которые владелец сайта считает предпочтительными кандидатами на индексацию.

Шаг 6. Исправьте внутренние ссылки

Проверьте ссылки в фильтрах, хлебных крошках, пагинации, карточках товаров, рекомендациях и мобильной версии. Массовые ссылки на неканонические URL могут поддерживать их постоянный обход даже после очистки sitemap.

Для одного набора фильтров выберите один формат URL:

https://example.com/catalog/?color=red&size=42
https://example.com/catalog/?size=42&color=red
https://example.com/catalog/red/42/

Выбранный адрес используйте во внутренних ссылках, canonical и sitemap. Остальные варианты перенаправляйте либо оставляйте с canonical на основной URL, если они необходимы приложению.

Шаг 7. Выполните техническую проверку

Команды ниже рассчитаны на curl. Подставьте собственный URL и адрес sitemap.

Проверка статуса и цепочки перенаправлений

curl -sS -L -o /dev/null \
  -w 'final_url=%{url_effective}\nhttp_code=%{http_code}\nredirects=%{num_redirects}\n' \
  'https://example.com/catalog/?color=red'

Для канонической страницы ожидается конечный статус 200. Непредусмотренные редиректы и переход на третий URL требуют исправления.

Проверка HTTP-заголовков

curl -sS -I -L \
  'https://example.com/catalog/?color=red'

Проверьте итоговый статус, заголовок Location на промежуточных ответах и наличие X-Robots-Tag.

Проверка canonical и meta robots в HTML

curl -sS -L \
  'https://example.com/catalog/?color=red' |
grep -Ei '<link[^>]+rel=["'\'']?canonical|<meta[^>]+name=["'\'']?robots'

Команда помогает найти основные элементы, но не заменяет проверку сформированного DOM, если сайт добавляет теги JavaScript-кодом.

Проверка URL в sitemap

curl -sS 'https://example.com/sitemap.xml' |
grep -F 'https://example.com/catalog/?color=red'

Для URL с canonical на другую страницу или с noindex команда не должна возвращать совпадение. Если используется индекс sitemap, сначала найдите нужный дочерний файл и проверьте его отдельно.

Проверка robots.txt

curl -sS 'https://example.com/robots.txt'

Убедитесь, что индексируемые фильтры и страницы, на которых Google ещё должен обработать noindex, не блокируются правилами Disallow.

После серверной проверки отправьте обновлённый sitemap в Google Search Console и проверьте контрольные URL. Сопоставляйте указанный владельцем canonical, выбранный Google canonical, разрешение индексации, дату последнего обхода и полученный HTTP-ответ. Названия полей интерфейса могут меняться.

Итоговый чек-лист

  • Каждый шаблон фильтра отнесён к индексируемым, дублирующим или исключаемым URL.
  • Индексируемые фильтры возвращают 200, имеют self-canonical и присутствуют в sitemap.
  • Проверены и HTML-директивы robots, и заголовок X-Robots-Tag.
  • Страницы с canonical на другой URL удалены из sitemap.
  • Canonical связывает только одинаковые или действительно близкие страницы.
  • Пагинация не канонизирована на первую страницу без проверки содержимого.
  • Персонализированные и сессионные URL не используются как канонические.
  • Страницы с noindex остаются доступными для обхода до обработки директивы.
  • robots.txt применяется только после подтверждённого исключения контрольных URL.
  • В sitemap нет редиректов, ошибок и альтернативных форм одного URL.
  • Внутренние ссылки ведут преимущественно на выбранные канонические адреса.
  • Проверена выборка URL каждого шаблона, а не единичная страница.

Источники