Начнём с того, что переворачивает половину представлений о теге: rel="canonical" — это подсказка, а не команда.

Google рассматривает его наравне с другими сигналами: внутренними ссылками, картой сайта, редиректами, hreflang. Если сигналы противоречат друг другу, поисковик выберет тот адрес, который сочтёт правильным, а ваш canonical проигнорирует. Это описано в официальной документации Google по консолидации дублей.

Из этого следует всё остальное: canonical работает не сам по себе, а только когда остальные сигналы указывают туда же.

Синтаксис

Тег ставится в <head>:

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

Три правила, которые нарушают чаще всего:

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

Тег ровно один. Две разные canonical-ссылки на странице — и Google отбросит обе. Это типичный результат работы двух SEO-плагинов одновременно.

Только в <head>. Canonical, оказавшийся в <body> — например, вставленный скриптом в неудачное место, — не учитывается.

Для файлов, у которых нет HTML-кода (PDF, изображения), canonical передаётся HTTP-заголовком:

Link: <https://example.com/document.pdf>; rel="canonical"

Что canonical решает

Одна задача: у одного и того же содержимого несколько адресов, и все они должны остаться доступными.

Типичные случаи:

  • параметры сортировки и фильтров: ?sort=price, ?color=red;
  • UTM-метки и рекламные идентификаторы;
  • один товар в нескольких категориях;
  • версии для печати;
  • один материал на разных поддоменах.

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

Canonical на себя

Страница может указывать canonical на саму себя. Это не обязательно, но полезно: так вы страхуетесь от того, что кто-то откроет ваш адрес с чужой меткой в конце и поисковик сочтёт его отдельной страницей.

Чем canonical не является

Здесь ошибаются чаще всего, поэтому разберём соседние инструменты в одной таблице.

Задача Инструмент Почему не canonical
Страница переехала навсегда Редирект 301 Canonical оставит старый адрес доступным
Адрес меняется временно Редирект 302 То же самое
Страница не должна быть в индексе noindex Canonical не удаляет из индекса
Страницу не надо сканировать robots.txt Но это не выводит её из индекса
Одно содержимое на разных языках hreflang + canonical на себя Это не дубли
Постраничная навигация Ничего Страницы 2, 3, 4 самостоятельны

Два пункта заслуживают отдельного внимания.

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

Постраничная навигация — не дубли. Указывать canonical со всех страниц списка на первую — распространённая ошибка: содержимое страниц 2 и 3 отличается, и вы просто убираете его из индекса.

Canonical и hreflang

Самая тонкая часть, и здесь же живёт ошибка, которая стоит дороже всех остальных.

Ошибка: канонизировать все языковые версии на английскую. Логика кажется разумной — «английская главная». Результат противоположный: вы сообщаете поисковику, что немецкая и испанская версии не самостоятельны, и они выпадают из выдачи в своих странах.

Правильная схема:

  1. каждая языковая версия указывает canonical на себя;
  2. все версии перечисляют друг друга через hreflang, включая саму себя;
  3. связи взаимны: если A ссылается на B, то B обязан ссылаться на A;
  4. hreflang ведёт на канонические адреса, а не на варианты с параметрами;
  5. x-default указывает версию для тех, чей язык не подошёл ни к одной.

Так это устроено на сайте, который вы сейчас читаете. У страницы про сокращение ссылок YouTube есть 21 языковая версия, и каждая канонизируется сама на себя. Китайская выглядит так:

<link rel="canonical" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="en" href="https://lix.li/shorten-youtube-link">
<link rel="alternate" hreflang="zh" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="es" href="https://lix.li/acortar-link-youtube">

Обратите внимание: canonical ведёт на китайский адрес, а не на английский, и китайская версия присутствует в собственном списке hreflang.

Частые ошибки

Google собрал основные ещё в заметке о пяти ошибках с rel=canonical, и за годы список почти не изменился.

Canonical на страницу, которая отдаёт 404. Тег будет проигнорирован целиком.

Canonical на страницу с noindex. Противоречивые сигналы: вы одновременно говорите «считай главной эту» и «не индексируй её».

Canonical на адрес, закрытый в robots.txt. Поисковик не может его проверить, поэтому не может и подтвердить.

Цепочки. A указывает на B, B на C. В Search Console это превращается в «канонический адрес не выбран». Указывайте сразу на конечный адрес.

Смешение http и https, www и без www. Схема и хост в canonical должны совпадать с той версией сайта, которую вы считаете основной.

Canonical и noindex на одной странице. Выберите что-то одно.

Когда Google выбрал другой адрес

В Search Console это отчёт «Страница является копией. Google выбрал другой канонический URL, чем пользователь».

Это не ошибка разметки и не наказание. Это сообщение о том, что остальные сигналы перевесили ваш тег. Что проверить:

  1. Внутренние ссылки. Если весь сайт ссылается на вариант с параметром, а canonical указывает на чистый адрес, поисковик поверит ссылкам.
  2. Карту сайта. В ней должны быть только канонические адреса.
  3. Редиректы. Если canonical указывает на адрес, который сам куда-то редиректит, тег обесценивается.
  4. Действительно ли это дубли. Если содержимое различается заметно, поисковик справедливо сочтёт страницы разными.

Согласуйте сигналы — и тег заработает. Спорить с алгоритмом бесполезно, он читает всю картину целиком.

Короткие ссылки и canonical

Вопрос, который задают часто и на который общие руководства не отвечают.

Создаёт ли короткая ссылка дубль страницы? Нет.

Сокращатель не отдаёт копию содержимого — он возвращает HTTP-редирект. У ответа с кодом 302 нет тела и нет <head>, поэтому в нём физически негде разместить canonical. Поисковик проходит редирект насквозь и работает с конечным адресом, у которого свой canonical. Как устроен этот механизм, разобрано в статье про то, как работают сокращатели ссылок.

Короткие ссылки на этом сайте дополнительно отдают заголовок X-Robots-Tag: noindex, nofollow, то есть прямо просят не индексировать сам редирект.

А свой короткий домен? Тоже не создаёт дублей, пока он редиректит. Дубли появляются, если вы отдаёте одно и то же содержимое на двух доменах без редиректа — вот тогда нужен canonical на основной. О том, зачем вообще нужен собственный домен для коротких ссылок, написано отдельно, а подключить его можно на странице своего домена.

Короткий чек-лист

  • Один canonical на страницу, в <head>, с абсолютным адресом.
  • Целевая страница отдаёт 200, не закрыта в robots.txt и не помечена noindex.
  • Никаких цепочек — сразу конечный адрес.
  • Каждая языковая версия канонизируется на себя, hreflang взаимен.
  • Карта сайта и внутренние ссылки ведут на те же канонические адреса.
  • Постраничная навигация и переехавшие страницы решаются не canonical, а собственными средствами.