Чем Clean-param отличается от canonical
Мы уже разбирали дубли страниц в целом — здесь только про один узкий, но частый вопрос: чем Clean-param отличается от canonical и когда какую директиву ставить. Путаница возникает потому, что обе решают одну задачу — убрать из индекса лишние копии страницы с параметрами в адресе, — но делают это на разных уровнях и с разным результатом.
Где живёт каждая директива
Clean-param — строка в robots.txt. Она ничего не меняет в самой странице,
а только сообщает роботу: параметры из списка не влияют на содержимое,
не обходи их отдельно. Синтаксис жёсткий: Clean-param: параметр1&параметр2 /путь, без пробелов и запятых внутри списка параметров — лишний пробел, и
директива не сработает.
Canonical — тег <link rel="canonical"> внутри <head> самой страницы.
Он не запрещает роботу заходить на адрес с параметрами, а прямо на этой
странице указывает, какой адрес считать основным. Страница при этом обходится,
получает код 200 и участвует в перелинковке как обычно — просто не
конкурирует с канонической версией за место в индексе.
Кто из поисковиков что понимает
Здесь разница принципиальная. Clean-param — директива только для Яндекса; Google её не поддерживает и просто игнорирует. Canonical понимают оба поисковика: и Яндекс, и Google относятся к нему как к рекомендации — сильной, но не обязательной к исполнению.
Отсюда практический вывод: если сайт продвигается только в Яндексе, Clean-param можно использовать самостоятельно. Если важен ещё и Google, без canonical не обойтись — Clean-param его дубли не тронет.
Типовые случаи
UTM-метки и метки рекламных систем (utm_source, gclid, yclid и
похожие) — здесь Clean-param подходит лучше всего. Параметр не меняет
содержимое страницы ни при каком значении, поэтому его можно один раз
перечислить в robots.txt и забыть. Ровно так это устроено и в robots.txt
этого сайта — там перечислены метки трекинга, которые не должны плодить
отдельные адреса в индексе Яндекса.
Сортировка и отображение каталога (sort, view, per_page) — тоже
хороший кандидат на Clean-param: результат отличается порядком или версткой
карточек, а не набором товаров.
Фильтры каталога — случай сложнее. Часть комбинаций фильтров может быть самостоятельной посадочной страницей под конкретный спрос, а часть — просто техническим дублём. Здесь Clean-param слишком грубый инструмент: он либо закрывает параметр везде, либо нигде. Canonical позволяет решать точечно — у нужных комбинаций фильтров canonical ведёт на себя, у остальных — на страницу категории.
Синтаксис Clean-param на практике
User-agent: Yandex
Clean-param: utm_source&utm_medium&utm_campaign&gclid&yclid /catalog/
Путь после списка параметров — необязательный, но полезный: без него директива применяется ко всему сайту, с ним можно ограничить действие конкретным разделом. Директив Clean-param в файле может быть сколько угодно, и они не заменяют друг друга — каждая описывает свою группу параметров.
Типичные ошибки
Ставить и Clean-param, и canonical на одни и те же параметры и считать, что этого достаточно для Google. Clean-param Google не читает, поэтому без canonical на этой же странице дубли для Google никуда не денутся.
Перечислять параметры через запятую. Разделитель в Clean-param — амперсанд
&, запятая ломает разбор строки целиком, и директива не сработает не только
для последнего параметра, а для всех сразу.
Ждать эффекта сразу после публикации robots.txt. Директива влияет на то, как робот обходит сайт дальше, а не на уже проиндексированные страницы — исключение старых дублей из индекса идёт постепенно, по мере переобхода.
Когда нужны обе директивы
На практике почти всегда нужны обе, просто для разных задач. Clean-param закрывает метки и служебные параметры, которые не должны обходиться как отдельные страницы вообще. Canonical нужен там, где страница с параметром всё равно обходится и открыта людям, но не должна конкурировать с основной версией в выдаче — и там, где важен не только Яндекс. Если разбираетесь с дублями на своём сайте и не уверены, какой случай перед вами, — закажите технический аудит сайта, там это одна из первых проверок.
