Каноническая ссылка сообщает поиску, какой из похожих адресов считать основным. Это подсказка, а не приказ, и примерно половина проблем с дублями возникает из-за попытки закрыть каноникалом то, что решается редиректом.
Типичная картина: у сайта на 400 полезных страниц в панели вебмастера числится 12 000 адресов, а в поиске держатся 300. Владелец видит слово "дубли" и просит поставить каноникал везде. После такой правки становится хуже: часть нужных страниц уходит из индекса, потому что теперь они ссылаются на главную.
Что делает rel=canonical
Тег в коде страницы говорит поисковой системе: у этого документа есть основная версия, вот её адрес, индексируй её. Ссылочный вес, поведенческие сигналы и упоминания склеиваются на указанный адрес.
Важная деталь: это рекомендация. И Яндекс, и Google оставляют за собой право её не выполнить. Игнорируют каноникал в двух ситуациях: содержимое страниц заметно разное (поиск решает, что это не дубли) или указания на сайте противоречат друг другу.
У магазина автозапчастей карточки одной детали для разных моделей отличались только строкой совместимости. Каноникал вёл их на одну карточку, а поиск его не выполнял: заголовки и описания были разными. Решили не тегом, а сведением вариантов в одну карточку с выбором модели.
Каноникал, 301 редирект и robots: чем отличаются
Четыре инструмента решают похожие на вид задачи, но результат у них разный.
| Инструмент | Что видит человек | Что происходит с адресом в поиске | Передаётся ли вес |
|---|---|---|---|
| 301 редирект | Попадает на другой адрес | Старый адрес выпадает | Да |
| rel=canonical | Остаётся на этом адресе | Обычно не индексируется | Да |
| Disallow в robots.txt | Остаётся на этом адресе | Не обходится, может остаться в выдаче без описания | Нет |
| meta noindex | Остаётся на этом адресе | Выпадает из индекса | Нет |
Простое правило для выбора: если человеку этот адрес нужен, ставим каноникал. Если не нужен и попадать сюда не должен никто, ставим 301. Восемь рабочих сценариев редиректа мы разбирали в отдельной статье про 301 редирект.
Отдельно про robots.txt. Закрывать дубли директивой Disallow бесполезно: робот не заходит на страницу и каноникал на ней не читает, а адрес остаётся известным поиску и может показаться в выдаче пустой строкой. Где проходит граница между robots.txt и картой сайта, разбирали в материале Sitemap.xml и robots.txt.
Как это выглядит в коде
Тег ставится в секции <head>, один раз на страницу, с абсолютным адресом:
<head>
<link rel="canonical" href="https://example.ru/catalog/nasosy/">
</head>
Для файлов, у которых нет HTML-кода (PDF-прайс, документ на скачивание), каноникал передаётся HTTP-заголовком:
Link: <https://example.ru/catalog/nasosy/>; rel="canonical"
Три вещи ломают тег молча. Первая: он поставлен в <body> вместо <head>, браузер покажет, поиск не учтёт. Вторая: относительный адрес вида /catalog/nasosy/; формально это допустимо, но при переносе шаблона такая ссылка превращается в несуществующий путь. Третья: два тега на странице сразу, один печатает движок, второй добавляет SEO-плагин. При двух каноникалах поиск игнорирует оба.
Откуда на сайте берутся дубли
Список из наших аудитов, отсортирован по частоте:
- Параметры фильтров и сортировки.
?sort=price,?brand=grundfos,?page_size=48. Каждый набор параметров это отдельный адрес с почти одинаковым содержимым. - Метки отслеживания. Адрес с UTM из рассылки или рекламы поиск считает самостоятельной страницей, если на неё есть внешние ссылки.
- Пагинация. Вторая и последующие страницы каталога с одинаковым текстом описания раздела вверху.
- Слеш и его отсутствие, www и голый домен, http и https. Классические четыре версии одной главной.
- Версии для печати и адреса вида
/index.php,/home,/mainрядом с корнем сайта. - Один товар в нескольких категориях. Если движок формирует адрес с путём категории, одна позиция получает три-четыре адреса.
Что делать с каждым источником
Решение выбирается не по типу дубля, а по тому, нужен ли адрес человеку.
| Источник | Решение | Почему так |
|---|---|---|
| Сортировка, размер страницы | Каноникал на страницу раздела без параметров | Человеку сортировка нужна, поиску она бесполезна |
| Фильтры с посадочным спросом | Отдельная страница со своим заголовком и текстом | Есть запросы, есть трафик, закрывать жалко |
| Прочие сочетания фильтров | Каноникал на раздел | Комбинаций тысячи, посадочными они не станут |
| UTM-метки | Каноникал сам на себя без параметров | Метка не должна размножать адреса |
| Пагинация | Каноникал каждой страницы на себя | Иначе товары со 2-й страницы выпадают из обхода |
| Слеш, www, протокол | 301 редирект на выбранный вариант | Второй версии существовать не должно |
| Версия для печати | Каноникал на обычную версию | Страница нужна пользователю |
| Товар в нескольких категориях | Один адрес товара плюс 301 с остальных | Дешевле в поддержке, чем плодить каноникалы |
Разделение фильтров на посадочные и служебные это отдельная работа на пересечении SEO и разработки, разбирали её в материале про фильтр товаров. Для магазина фильтры обычно и самый крупный источник дублей, и самый большой запас трафика.
Правила, которые нарушают чаще всего
- Абсолютный адрес с протоколом и доменом, ровно в том виде, в котором страница должна быть в поиске.
- Целевая страница отвечает 200. Каноникал на 404, на редирект или на закрытый раздел не выполняется.
- Каноникал сам на себя на всех обычных страницах. Это не избыточность, а страховка от случайных параметров в адресе.
- Никаких цепочек. Если A ссылается на B, а B на C, поиск разбирается сам и часто не в вашу пользу. Ссылаться надо сразу на конечный адрес.
- Один инструмент на страницу. Каноникал плюс noindex на одной странице это противоречие: вы просите склеить вес и одновременно выкинуть страницу.
- Согласованность с картой сайта. В sitemap.xml перечисляются только канонические адреса. Дубль в карте сайта это прямой конфликт сигналов.
Три ошибки, после которых страницы уходят из индекса
Каноникал всех страниц на главную. Появляется, когда в шаблоне прописан адрес сайта вместо переменной с текущим адресом. Сайт при этом выглядит нормально, а через месяц в поиске остаётся одна страница. Проверяется за минуту: откройте любую внутреннюю страницу и посмотрите, куда ведёт тег.
Каноникал на страницу, закрытую в robots.txt. Робот не может её обойти, не понимает, что там, и в итоге не индексирует ни её, ни ту страницу, что на неё ссылается.
Разные указания в коде и в HTTP-заголовке. Встречается после установки плагинов кэширования и оптимизации: HTML печатает один адрес, сервер отдаёт заголовком другой. Поиск видит конфликт и решает по своему усмотрению. Проверяется командой:
curl -sI https://example.ru/catalog/nasosy/ | grep -i link
Как проверить каноникалы на своём сайте
Порядок на полдня работы, без платных инструментов:
- Откройте по одной странице каждого типа (главная, раздел, карточка, статья блога, страница пагинации, страница с фильтром) и посмотрите исходный код. Найдите строку с
rel="canonical"и убедитесь, что адрес тот, который вы хотите видеть в поиске. - Добавьте к любой странице хвост
?test=1и повторите проверку. Каноникал должен остаться без параметра. - Прогоните сайт краулером и отсортируйте результат по столбцу с каноническим адресом. Все страницы, где он отличается от собственного адреса, надо просмотреть глазами.
- В панели вебмастера откройте список исключённых страниц и отфильтруйте по причине "неканоническая". Если там оказались нужные разделы, ошибка найдена.
- Сравните количество адресов в sitemap.xml с количеством страниц в поиске. Расхождение в разы это повод разбираться дальше.
- Проверьте HTTP-заголовки хотя бы у пяти страниц: код ответа должен быть 200, а заголовок Link не должен противоречить коду страницы.
Этот блок целиком входит в наш регламент технической проверки, полный список пунктов есть в статье Технический SEO-аудит.
С чего начать разбор дублей
Каноникал закрывает узкую задачу: он объединяет сигналы у страниц, которые нужны людям, но не нужны поиску по отдельности. Всё остальное решается редиректом, правкой структуры или отдельной посадочной страницей. Перед тем как ставить тег, честно ответьте на один вопрос: должен ли этот адрес вообще открываться. Если нет, тег тут лишний.
Начните с проверки шаблонов: одна ошибка в коде темы стоит дороже сотни дублей от фильтров.
Если по итогам проверки набрался список из десятков расхождений и разбирать его некому, посмотрите, как устроено SEO-продвижение у нас: техническая часть идёт первым этапом, до текстов и ссылок. Специфику каталогов и карточек мы отдельно разбирали в материале про SEO для интернет-магазина.

