Что такое канонический URL и когда его использовать
Канонический URL - это тот единственный адрес, который вы назначаете настоящей версией страницы, чтобы поисковые системы объединяли каждый ее дубликат в один результат. Вы объявляете его через <link rel="canonical" href="..."> в <head> страницы либо через заголовок ответа Link, и указанный вами адрес должен быть абсолютным.
Что на самом деле делает rel=canonical
Одно и то же содержимое обычно доступно больше чем по одному URL. Параметры отслеживания, идентификаторы сессии, завершающий слеш, http наравне с https, www наравне с голым доменом, версия для печати, отсортированный список - каждое из этого отдельный URL, отдающий одни и те же слова. Если оставить как есть, поисковая система сама выберет один из них, и это может оказаться не тот, что выбрали бы вы.
Канонический адрес - это способ сделать такой выбор явным:
<link rel="canonical" href="https://example.com/shoes">
Link: <https://example.com/shoes>; rel="canonical"
Стоит усвоить два свойства. Во-первых, это подсказка, а не инструкция. Google взвешивает ее вместе с редиректами, внутренними ссылками, записями карты сайта и самим содержимым, и вполне может выбрать другой канонический адрес, чем тот, что объявили вы. Во-вторых, он объединяет, а не удаляет. Сигналы от дубликата накапливаются на каноническом адресе, и в этом отличие от noindex, где дубликат просто перестает существовать с точки зрения поиска.
Самоссылающиеся канонические адреса
Каждая индексируемая страница должна объявлять себя собственным каноническим адресом. Звучит избыточно, а на деле это самая полезная из трех строк, потому что именно она нейтрализует параметры, которые вы не предвидели. Когда /shoes?utm_source=newsletter объявляет https://example.com/shoes, URL из кампании автоматически сворачивается в чистый вместо того, чтобы конкурировать с ним.
Три правила, чтобы сделать это правильно: используйте абсолютные URL со схемой, выводите ровно один элемент canonical на страницу (у страницы с двумя противоречащими друг другу каноническими адресами игнорируются оба), и держите канонический адрес согласованным с остальными вашими сигналами. Канонический адрес, указывающий на URL, который куда-то редиректит, либо возвращает 404, либо несет noindex, отправляет противоречивые инструкции и не учитывается.
Междоменные канонические адреса
Канонический адрес может указывать на другой домен. Это правильный механизм, когда вы синдицируете статью на сайт партнера или агрегатор новостей: копия на их домене объявляет ваш URL каноническим, так что позиции в поиске накапливаются на вашем оригинале, а не на их перепубликации.
Это же делает канонические адреса опасными. Ничто не мешает странице назначить каноническим URL на хосте, с которым у нее нет никакой связи, и ничто в синтаксисе не выдает случайный междоменный канонический адрес как ошибку. Именно отсюда берется сбой со staging.
Сбой с каноническим адресом staging
Большинство фреймворков и систем управления содержимым строят канонический адрес, склеивая настроенный базовый URL с текущим путем. Этот базовый URL живет в переменной окружения, строке опции в базе данных или файле конфигурации, и он разный в каждом окружении. Когда значение staging попадает в продакшен, каждая страница живого сайта объявляет, что настоящая версия живет по адресу https://staging.example.com/....
То, что следует за этим, происходит тихо и медленно. Живые страницы продолжают отдавать 200 и продолжают отдавать верное содержимое. Но каждая из них говорит Google, что авторитетная копия находится где-то еще, а это "где-то еще" либо недоступно, либо защищено паролем, либо помечено noindex. Страницы начинают выпадать из результатов при каждом повторном обходе, и поскольку ошибки, на которую можно было бы среагировать, нет, первым сигналом обычно оказывается график трафика неделю спустя. Исправление разобрано в исправлении канонического адреса, указывающего на staging.
Канонический адрес, редирект или noindex
Эти три используют как взаимозаменяемые, а они не взаимозаменяемы:
- Редирект 301, когда дубликат вообще не должен быть доступен. Самый сильный доступный сигнал, и правильный ответ для снятого с публикации URL или переноса домена.
- rel=canonical, когда оба URL должны оставаться доступными, но ранжироваться должен только один. Параметры, версии для печати, синдицированные копии, отфильтрованные списки.
- noindex, когда страница должна оставаться доступной и не должна ранжироваться, а эквивалентной страницы, в которую можно было бы объединить сигналы, не существует. Результаты внутреннего поиска, страницы благодарности, разделы аккаунта.
Не совмещайте их. Канонический адрес на странице с noindex противоречив, поскольку вы одновременно просите об объединении сигналов со страницей и просите игнорировать саму эту связь.
Проверьте, что вы отдаете на самом деле
Чтение шаблона - не проверка, потому что edge-воркеры, плагины и серверная логика все могут вставлять канонические адреса, которых нет в вашем репозитории. Вместо этого читайте ответ: curl -s https://example.com/ | grep -i 'rel="canonical"'. Для одной страницы бесплатная проверка канонического адреса разрешает тег и сообщает, указывает ли он на саму страницу, на другой URL на том же хосте, на http-версию или на другой хост. Чтобы проверить весь сайт, бесплатный инструмент обхода сайта сообщает статус канонического адреса по каждому URL, отмечая страницы, где он отсутствует, и страницы, где он указывает не туда. Следить за ключевыми страницами на предмет дня, когда значение изменится, - задача опции Indexability в HTTP-мониторе HostTracker, см. SEO-мониторинг.