hreflang: тег, который ломается тихо и остаётся сломанным
Почему языковые аннотации должны быть взаимными, три ошибки, которые делают их бесполезными, и как проверить многоязычный сайт, не открывая каждую страницу.
SEO · Опубликовано: 2 сентября 2026 г. · 3 мин чтения · Ольга Мирошник
У многоязычного сайта есть характерный способ ломаться: на всех языках всё выглядит правильно, а в каждой стране ранжируется не та версия. Причина почти всегда одна — hreflang: тег, который никто не видит, никто не тестирует и все копируют из шаблона.
Зачем он нужен
hreflang не решает, какая страница будет ранжироваться. Он сообщает поисковику, что несколько страниц — это один контент на разных языках, чтобы движок подставил версию, подходящую пользователю. Сделано верно — немецкий посетитель попадает на немецкую страницу, а не на английскую. Сделано неверно — поисковик возвращается к догадкам.
Выглядит он непримечательно:
<link rel="alternate" hreflang="en" href="https://site.com/page/">
<link rel="alternate" hreflang="ru" href="https://site.com/ru/page/">
<link rel="alternate" hreflang="x-default" href="https://site.com/page/">
Правило, на котором спотыкаются все
Аннотации должны быть взаимными. Если английская страница указывает на русскую, русская обязана указывать обратно на английскую — и обе должны указывать на себя. Односторонняя аннотация игнорируется целиком, поэтому сайт может быть полон правильных на вид тегов, которые не делают ничего.
По этой же причине hreflang ломается в ходе обычной работы. Кто-то добавил четвёртый язык и обновил три шаблона вместо четырёх. Кто-то удалил страницу, а бывшие «братья» продолжают на неё ссылаться. Ошибок нет, внешне ничего не изменилось, а набор аннотаций молча перестал быть валидным.
Три ошибки по частоте
Ссылки на редиректы и 404. Цель должна быть конечным адресом с ответом 200. Ссылка на адрес с редиректом расходует аннотацию впустую.
Неверные коды. Язык — ISO 639-1, необязательный регион — ISO 3166-1 Alpha-2, и порядок «язык-регион»: en-GB, а не gb-en. en-UK кодом страны не является. Просто de покрывает всех говорящих по-немецки; de-AT нужен, только если контент действительно отличается.
Нет x-default. Без него у поисковика нет инструкции для посетителей, которые не подходят ни под один ваш язык. x-default должен указывать на выбор языка или на самую общую версию.
Проверка без открывания каждой страницы
Проверка механическая, а значит, ручной быть не должна:
для каждой страницы:
собрать её альтернативы
для каждой альтернативы:
отвечает ли она 200?
ссылается ли обратно на эту страницу?
корректен ли код?
ровно один ли x-default в наборе?
Запускайте это на обходе всего сайта. На сайте с четырьмя языками и тысячей страниц это четыре тысячи связей — список, который руками не поддерживает никто, и ровно тот случай, когда поломка живёт год, потому что заглянуть туда некому.
Ещё одна сверка
Атрибут lang у <html> должен совпадать с hreflang этой страницы, а canonical каждой языковой версии — указывать на себя, а не на английский оригинал. Эти две ошибки вместе дают классический симптом: английская страница ранжируется во всех рынках, а переводы не видны нигде.
Читайте также
Проверьте, что из этого есть на вашем сайте
Бесплатное сканирование покажет битые ссылки, ошибки JS и проблемы производительности за минуту.