Hreflang без мистики: понятное объяснение

«Почему Google показывает мою английскую страницу тому, кто ищет на французском?» — почти всегда проблема с hreflang, и почти всегда небольшая, тихая. Hreflang — простая идея, которая ломается незаметно: ошибитесь немного — и ничего не выдаст ошибку, ничего не предупредит, поисковики просто перестанут его учитывать. Вот что он делает, несколько способов, которыми он ломается, и как проверить свой вручную.

Маркетинг и CRM в админпанели Olmira

Что на самом деле делает hreflang

Аннотация hreflang — это подсказка на странице, которая по сути говорит: «этот URL и тот URL — один и тот же контент на разных языках (при желании — для разных регионов); когда кто-то ищет на том языке, рассмотри возможность отдать ему тот URL». Реализуется она в виде набора тегов страницы или, что равнозначно, в XML-sitemap) — по одному на каждый языковой или региональный вариант, и все они ссылаются друг на друга.

Типичные сбои, стоящие почти за каждой жалобой «не тот язык»

У ошибок hreflang есть общая черта: ни одна из них нигде не вызывает ошибку. Страница по-прежнему загружается. Теги по-прежнему на месте. Они просто неверны так, что это замечает только поисковая система — или внимательная проверка человеком.

Невзаимные теги Если страница A объявляет альтернативу, указывающую на страницу B, но страница B не объявляет альтернативу, указывающую обратно на A, пара разорвана — и задокументированное поведение крупных поисковых систем состоит в том, чтобы не доверять невзаимным аннотациям или игнорировать их, а не учитывать частично. Это самая частая на практике ошибка hreflang, потому что легко добавить страницу на новом языке и забыть обновить набор тегов всех остальных языков так, чтобы они на неё ссылались.

Теги, указывающие на неканонический, перенаправляющий или отдающий 404 URL Альтернатива должна указывать на реальную, работающую, каноническую версию страницы на этом языке — не на старый URL, который теперь перенаправляет, и не на URL, требующий входа в систему или возвращающий ошибку поисковому роботу.

Частичное покрытие внутри кластера Hreflang, корректно проставленный на части страниц переведённого раздела, но отсутствующий на остальных, даёт противоречивый сигнал по всему кластеру, что обычно подрывает доверие и к тем тегам, которые верны.

Дублирующиеся или конфликтующие теги из нескольких источников На сайтах, где теги в head может вставлять более одного участка кода — скажем, скрипт уровня страницы и общий для сайта макет, — состязание между ними может оставить в итоговой разметке дублирующиеся или противоречащие друг другу теги hreflang. Это реальный и незаметный класс ошибок именно потому, что он невидим при беглом визуальном осмотре отрисованной страницы; он проявляется только при внимательном чтении исходного кода .

Hreflang без соответствующей записи в sitemap Поисковые системы используют sitemap как сигнал приоритета обхода; URL, объявленный языковой альтернативой, но никогда не появляющийся в sitemap, может просто обходиться позже или реже, чем страницы, которые вы на самом деле пытаетесь продвинуть.

Как проверить свой сайт вручную

Для первого прохода не нужны специальные инструменты. Посмотрите исходный код страницы — настоящий исходник, а не отрисованный DOM — и найдите каждый тег . Для двух-трёх языковых пар убедитесь, что каждый указывает обратно: если /page объявляет hreflang="es", указывающий на /es/page, откройте /es/page и убедитесь, что она объявляет тег, указывающий обратно на /page. Затем убедитесь, что существует ровно один x-default, ведущий на рабочую страницу, и что каждый URL в наборе загружается напрямую — без редиректа, без 404 — и совпадает с собственным каноническим URL этой страницы. На небольшом сайте такой ручной проход отлавливает большинство реальных ошибок.

Как выглядит правильная настройка hreflang

1

Каждый вариант — взаимный

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

2

Один x-default, который всегда открывается

Ровно одна альтернатива помечена как x-default, и она указывает на реальную работающую страницу — обычно на версию на вашем языке по умолчанию.

3

Собственный canonical для каждого языка

Тег canonical каждой языковой версии указывает на неё саму, а не на версию на языке по умолчанию: страница не должна одновременно объявлять себя альтернативой другого URL и его каноническим дубликатом.

4

Генерируется, а не ведётся вручную

На любом сайте крупнее нескольких страниц ручное написание взаимных наборов тегов для каждой языковой пары — ровно та задача, которая незаметно расходится с реальностью. Генерация набора из единого источника истины (объявленного списка языков страницы) делает теги всех страниц согласованными по построению.

Конструктор сайтов в админпанели Olmira

Как это устроено в Olmira

Альтернативы hreflang и x-default на сайте Olmira генерируются из одного источника — заявленного списка языков страницы — в тот момент, когда активны два языка или больше. Взаимность здесь — побочный продукт того, как построены теги, а не то, что задаётся вручную для каждой страницы, и теги генерируются один раз, централизованно, для каждого маршрута — специально, чтобы избежать описанного выше сбоя с дублирующимися и рассинхронизированными тегами.

x-default всегда ведёт на собственный URL сайта на языке по умолчанию без префикса, а каждая языковая версия несёт собственный самоссылающийся канонический URL. Какие языки вести и насколько полным должен быть каждый перед публикацией — остаётся на ваше усмотрение: это тема руководства по многоязычной структуре; механика тегов работает одинаково на каждой странице конструктора сайтов.

Пусть теги управляются сами

Каждый добавленный вами язык автоматически получает корректный взаимный hreflang — никаких списков тегов, которые нужно вести вручную.