Страница товара теперь существует на нескольких языках, и возникает вопрос: как поисковая система и человек находят нужную версию. Ответ начинается с адресов. Каждая индексируемая языковая версия должна иметь собственный стабильный URL - тот, который можно открыть, сохранить в закладки и получить в выдаче. Разметка hreflang - это подсказка поисковику, какой URL обслуживает какой язык и регион; сама по себе она ничего не переводит, а лишь связывает готовые версии.
Выбор структуры адресов сводится к трём стратегиям, и от него зависит вся дальнейшая работа.
| Стратегия | Пример | Комментарий |
|---|---|---|
| Подкаталог | /ru/docs | Обычно проще всего поддерживать. |
| Поддомен | ru.example.com | Больше инфраструктурной изоляции. |
| ccTLD | example.de | Сильный рыночный сигнал, высокая стоимость. |
Подкаталог вида /ru/docs обычно проще всего поддерживать: один домен, один сертификат, общая инфраструктура. Поддомен ru.example.com даёт больше изоляции, но требует отдельной настройки. Отдельный национальный домен example.de - самый сильный сигнал рынку и самый дорогой в сопровождении. Важно выбрать одну схему и держаться её: смесь путает и краулеров, и аналитику.
Отдельная ловушка - автоматический redirect по заголовку Accept-Language. Он удобен, но не должен лишать пользователя доступа к другим версиям. Робот Googlebot обходит сайт в основном из США, и жёсткое перенаправление способно спрятать от него локализованные страницы целиком. Правильно определять язык как подсказку и предлагать переключатель, а не насильно уводить и не блокировать прямые ссылки на конкретные версии.
Связывает версии между собой hreflang. Работает он на взаимности: каждая версия ссылается на себя и на все остальные. Если страница A указывает на B, но B не указывает обратно на A, кластер считается неполным, и поисковик может проигнорировать разметку. Отсюда практическое правило: набор ссылок hreflang одинаков на всех страницах кластера и включает саму текущую страницу.
К списку версий добавляют x-default - языко- и регионально-нейтральный адрес, куда попадёт пользователь, чей язык сайт не поддерживает. Это не английская версия по умолчанию, а осознанный запасной вариант: например, страница выбора языка или международная витрина. Технически это ещё одна ссылка alternate с значением hreflang, равным x-default.
Canonical и hreflang решают разные задачи, и их постоянно путают. Canonical указывает на каноническую страницу в том же языке, а не на английскую: если русская версия объявит каноном английскую, поисковик сочтёт русскую дублем и выкинет её из индекса. hreflang связывает эквивалентные страницы, а не частично похожие материалы: перекрёстные ссылки между статьёй и разделом каталога только вредят. И третье различие: атрибут lang в HTML описывает язык самого документа для браузера и скринридера, а hreflang - целевую языковую и региональную версию URL для поисковика.
Цена корректности реальна: при n версиях матрица ссылок растёт как n на n, и поддерживать её вручную нельзя - разметку генерируют из одного источника правды. Провал же дорогой и тихий: canonical страницы /ru/product, по ошибке указывающий на /en/product, убирает русскую страницу из индекса; русские пользователи попадают на английскую, не понимают её и уходят. Ни ошибки, ни предупреждения - только медленно проседающий трафик из русскоязычного поиска.
<link rel="alternate" hreflang="en"
href="https://example.com/en/product" />
<link rel="alternate" hreflang="ru"
href="https://example.com/ru/product" />
<link rel="alternate" hreflang="x-default"
href="https://example.com/product" />