Главная Статьи Оптимизация

hreflang: языковые версии сайта в поиске

Если у сайта есть версии на разных языках или для разных стран, поисковику нужно подсказать, какую из них показывать какому пользователю. Иначе человек из Казахстана может попасть на русскую версию, а из Германии — на английскую вместо немецкой. Для этого существует атрибут hreflang. Разберём, что это такое, как правильно размечать языковые версии, какие есть правила и почему hreflang важен для Google, но не используется Яндексом.

Что такое hreflang

hreflang — это атрибут, который указывает поисковику язык и регион конкретной версии страницы и связывает между собой все её языковые варианты. Проще говоря, он говорит: «вот эта страница — на русском для России, а вот её брат-близнец — на английском, а вот — на немецком». Благодаря этому поисковик показывает пользователю версию на его языке и не считает похожие переводы дублями.

Как выглядит разметка

Для каждой языковой версии перечисляют все версии, включая её саму. Пример для страницы с русской, английской и немецкой версиями:

<!-- в <head> каждой из версий --> <link rel="alternate" hreflang="ru" href="https://site.com/ru/"> <link rel="alternate" hreflang="en" href="https://site.com/en/"> <link rel="alternate" hreflang="de" href="https://site.com/de/"> <link rel="alternate" hreflang="x-default" href="https://site.com/">

Коды берут из стандартов: язык по ISO 639‑1 (ru, en, de), при необходимости с регионом по ISO 3166‑1 (en-US, en-GB, ru-KZ). А x-default — это запасная версия для всех, кому не подошёл ни один язык.

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

Каждая версия ссылается на все — включая себя ↔ взаимные ссылки x-default → / RUsite.com/ru/ ↻ ENsite.com/en/ ↻ DEsite.com/de/ ↻ ↻ — каждая версия ссылается и на саму себя
Взаимность — главное правило: связи между версиями должны быть двусторонними. x-default ловит всех, чей язык в наборе не представлен.

Когда нужен hreflang

Если сайт на одном языке и для одной страны, hreflang не нужен.

Главные правила

↔️ Взаимность
Если страница A ссылается на B через hreflang, то B обязана ссылаться на A. Односторонние связи поисковик игнорирует.
🪞 Ссылка на себя
В наборе hreflang каждая версия указывает в том числе саму себя — это не ошибка, а требование.
🌐 x-default
Добавьте версию по умолчанию для пользователей, чей язык не представлен. Часто это главная или выбор языка.
🔤 Правильные коды
Только валидные коды языка и региона (ISO). Опечатки вроде "eng" или "ua" вместо "uk" обнуляют разметку.

Где размещать hreflang

Есть три способа, выберите один и не смешивайте для одной страницы:

🛠
Про региональное продвижение в целом — статьи многорегиональный сайт и региональное продвижение. Не путайте hreflang с canonical: первый указывает язык, второй — главную версию среди дублей.

Яндекс и hreflang

⚠️ Важно: Яндекс не использует hreflang. Для определения региона он опирается на настройки в Яндекс.Вебмастере (привязка региона к сайту или разделу) и на доменную зону. hreflang — это инструмент прежде всего для Google. Поэтому для рунета языковые/региональные версии настраивают через Вебмастер, а hreflang добавляют для корректной работы в Google.

Частые ошибки

hreflang и canonical: частая путаница

Самая болезненная ошибка на многоязычных сайтах — конфликт hreflang и canonical. Логика должна быть такой: каждая языковая версия канонична сама на себя и при этом перечисляет остальные через hreflang. Беда случается, когда canonical всех версий указывает на одну (например, на английскую): тогда вы сами говорите поиску «главная только английская», остальные переводы схлопываются, и hreflang перестаёт работать. Запомните: переводы — это не дубли, их связывают hreflang'ом, а не сводят каноником. canonical отвечает за дубли внутри одного языка, hreflang — за связь между языками.

Структура многоязычного сайта: домен, папка или поддомен

Прежде чем размечать hreflang, нужно выбрать саму схему размещения версий. Вариантов три, и у каждого свой смысл:

Папки — site.com/en/
Проще всего: весь вес копится на одном домене. Хороший выбор по умолчанию для языковых версий.
Поддомены — en.site.com
Версии разнесены, но на одном домене. Промежуточный вариант, чуть сложнее в поддержке.
Отдельные ccTLD — site.de
Сильный гео-сигнал для конкретной страны, но каждый домен набирает траст с нуля. Для серьёзного выхода в страну.
Параметр ?lang=en
Худший вариант: версии плохо разделяются и индексируются. По возможности избегайте.

Для большинства проектов оптимальны папки: один домен, общий траст, понятная структура. ccTLD оправданы, когда вы всерьёз заходите на отдельный национальный рынок.

Автоперевод и редирект по гео — осторожно

Два соблазнительных, но вредных приёма на многоязычных сайтах:

Как отладить hreflang

hreflang легко сломать незаметно, поэтому его проверяют. Базовый способ — открыть исходный код каждой версии и убедиться, что набор ссылок одинаковый, взаимный и с абсолютными URL. Для масштаба используют валидаторы hreflang и краулеры, которые показывают разрывы взаимности и неверные коды. И помните про задержку: после внедрения hreflang Google нужно время переобойти все версии, прежде чем картина в выдаче изменится, — не ждите эффекта на следующий день.

Коротко

hreflang — атрибут, который указывает язык и регион версии страницы и связывает все её языковые варианты, чтобы поисковик показывал пользователю нужную версию и не считал переводы дублями. Нужен сайтам с несколькими языками или версиями для разных стран. Главные правила: взаимность ссылок, ссылка на себя, x-default и только валидные коды языка/региона. Размещают hreflang в head, sitemap или HTTP-заголовке. Важная деталь: hreflang использует Google, а Яндекс определяет регион через Вебмастер и доменную зону. Настраивайте оба механизма, если работаете и в Google, и в Яндексе.

Частые вопросы

Что такое hreflang и зачем он нужен?
hreflang — это атрибут, который указывает поисковику язык и регион версии страницы и связывает между собой все её языковые варианты. Благодаря ему поисковик показывает пользователю версию на его языке и не считает похожие переводы дублями. Нужен он сайтам с несколькими языковыми или региональными версиями.
Как правильно разметить языковые версии?
В head каждой версии (или в sitemap.xml) перечислите все версии тегами link rel="alternate" hreflang="код" href="абсолютный_URL", включая ссылку на саму себя, и добавьте версию x-default для пользователей с непредставленным языком. Коды берут из стандартов: язык по ISO 639-1 (ru, en), при необходимости с регионом (en-US, ru-KZ).
Использует ли Яндекс hreflang?
Нет. Яндекс не учитывает hreflang. Для определения региона он опирается на настройки в Яндекс.Вебмастере (привязку региона к сайту или разделу) и на доменную зону. hreflang — это инструмент прежде всего для Google. Поэтому в рунете региональность настраивают через Вебмастер, а hreflang добавляют для корректной работы в Google.
Чем hreflang отличается от canonical?
Это разные вещи. Canonical указывает главную версию среди дублей с одинаковым содержанием. hreflang указывает язык и регион версии и связывает разные переводы одной страницы. Переводы — не дубли, поэтому их связывают через hreflang, а не схлопывают через canonical. Эти атрибуты используют вместе, но для разных задач.
Какие частые ошибки с hreflang?
Самые частые: отсутствие взаимных ссылок (одна версия ссылается на другую, а та в ответ нет — разметка не работает); неверные коды языка или региона (en-uk вместо en-GB, ua вместо uk); относительные адреса вместо абсолютных URL; ссылки на закрытые от индексации или редиректящие страницы; иногда забывают добавить x-default.
Как должны соотноситься hreflang и canonical?
Каждая языковая версия должна быть канонична сама на себя и при этом перечислять остальные через hreflang. Частая ошибка — поставить canonical всех версий на одну (например, английскую): тогда остальные переводы схлопываются и hreflang не работает. Переводы — это не дубли, их связывают hreflang, а не сводят каноником. canonical отвечает за дубли внутри одного языка, hreflang — за связь между языками.
Папки, поддомены или отдельные домены для языков?
Для большинства проектов оптимальны папки (site.com/en/): весь вес копится на одном домене, структура понятная. Поддомены (en.site.com) — промежуточный вариант. Отдельные ccTLD (site.de) дают сильный гео-сигнал под конкретную страну, но каждый домен набирает траст с нуля — это для серьёзного выхода на национальный рынок. Параметра ?lang=en лучше избегать: версии плохо разделяются и индексируются.
Стоит ли делать автоматический редирект по стране пользователя?
Лучше не делать жёсткий редирект по IP или языку браузера. Робот Google обходит сайт в основном из США, и при принудительном редиректе он увидит только одну версию, а остальные не проиндексирует. Предлагайте выбор языка баннером, а не перенаправляйте насильно. И не плодите десятки версий машинным переводом без вычитки — это тонкий контент, который не приносит трафика.