Как выглядит главная ошибка
Самая частая проблема — нарушенная взаимность. Одна версия указывает на другую, но та не указывает на неё в ответ. Система не может проверить связь и, как правило, игнорирует её.
Частые ошибки
| Ошибка | Почему это плохо | Как исправить |
|---|---|---|
| Нет обратной ссылки | Связь не подтверждена | Добавить взаимные ссылки на всех версиях |
| Нет ссылки на саму страницу | Набор неполный | Включить собственный адрес в группу |
Код en-UK вместо en-GB | Значение не распознаётся | Использовать корректные коды ISO |
Код ua вместо uk | Указан несуществующий язык | Язык — uk, регион — UA |
| Ссылка на страницу с редиректом | Цепочка вместо конечного адреса | Указывать финальный адрес |
| Ссылка на закрытую от индексации страницу | Версия не попадёт в индекс | Открыть страницу или убрать её из набора |
| Относительные адреса | Возможна неверная трактовка | Использовать абсолютные адреса |
| Разные наборы на разных версиях | Противоречивые сведения | Формировать набор программно из общего списка |
| Canonical указывает на другую версию | Конфликт сигналов | Каждая версия — canonical на себя |
Как находить ошибки
- Прогоните сайт краулером с проверкой hreflang: он покажет отсутствующие обратные ссылки и неверные коды.
- Выборочно откройте по одной группе версий и сверьте наборы вручную.
- Проверьте коды ответа адресов из наборов: все должны быть 200.
- Сравните hreflang с указаниями canonical на тех же страницах.
Как не допускать ошибок в будущем
Ручная поддержка hreflang на десятках страниц почти неизбежно приводит к расхождениям. Надёжнее формировать наборы программно из одного списка соответствий версий: тогда взаимность и ссылка на себя обеспечиваются автоматически. Общие принципы автоматизации служебных данных — в статье про автоматическую генерацию карты сайта, а базовые правила hreflang — в разборе настройки атрибута.
Помните: неверный hreflang редко вызывает заметный сбой. Он просто не работает, и пользователи из других стран продолжают попадать не на ту версию.
Как выглядит правильный набор
Для двух языковых версий одной страницы набор на каждой из них должен быть одинаковым:
<!-- на странице /ru/delivery/ и на странице /en/delivery/ -->
<link rel="alternate" hreflang="ru" href="https://example.com/ru/delivery/">
<link rel="alternate" hreflang="en" href="https://example.com/en/delivery/">
<link rel="alternate" hreflang="x-default" href="https://example.com/delivery/">
Ручная проверка одной группы версий
| Шаг | Что проверить |
|---|---|
| 1 | На каждой версии присутствует полный набор записей |
| 2 | В наборе есть адрес самой страницы |
| 3 | Все адреса абсолютные и отвечают кодом 200 |
| 4 | Коды языков и регионов корректны |
| 5 | Canonical каждой версии совпадает с её адресом в наборе |
Частые вопросы
Почему hreflang не работает, хотя ошибок в панели нет?
Система может молча игнорировать нарушенную связь, например при отсутствии обратной ссылки, поэтому проверять hreflang стоит краулером.
Какой код указать для украинского языка?
uk для языка и UA для региона, то есть uk-UA; значение ua для языка не подходит.
Можно ли указывать в hreflang адреса с редиректом?
Не стоит: нужно указывать финальный адрес страницы, отвечающий кодом 200.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.