Перейти к содержимому
Попробовать

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

Атрибут hreflang — это разметка, которая говорит Google и Яндексу: «страница переведена на другой язык, вот альтернативные версии». Без него мультиязычный сайт начинает конкурировать сам с собой: русская и украинская версии одного товара оказываются в выдаче по одному запросу, а поисковик выбирает ту, которая, по его мнению, ближе пользователю — не всегда правильно.

В гайде разбираем синтаксис hreflang, три способа внедрения (HTML-тег, HTTP-заголовок, XML-sitemap), готовые примеры для двуязычного блога и магазина с русским, украинским и казахским контентом, топ-5 ошибок рунета и инструменты проверки. В конце — ответы на 6 частых вопросов о совместимости с canonical и особенностях Яндекса.

Что такое hreflang и когда он нужен

hreflang — атрибут HTML-тега <link>, в котором указан язык и, по желанию, регион альтернативной версии страницы. Поисковик читает разметку и понимает: /ru/product и /en/product — это не дубли, а две языковые версии одной страницы. В выдачу попадает та, которая соответствует языку пользователя и его географии.

Разметка нужна в трёх случаях. Первый — сайт переведён на несколько языков: блог, документация, лендинг с русской и английской версиями. Второй — один язык, но разные региональные версии: цены в рублях для России и в тенге для Казахстана. Третий — мультидоменная конфигурация: example.ru, example.com.ua, example.kz — отдельные домены для разных рынков, но с родственным контентом.

Если сайт одноязычный, hreflang не нужен. Если русскоязычных пользователей обслуживают 2–3 региональные версии без перевода — тоже можно обойтись, но Google и Яндекс корректнее распределят трафик с разметкой, чем без неё. Отсутствие hreflang — это не ошибка, а упущенная возможность.

Синтаксис: коды языков и регионов

Значение атрибута — двух- или трёхсимвольный код по стандарту ISO 639-1 (язык) и, опционально, код региона по ISO 3166-1 alpha-2 через дефис. Примеры корректных значений:

Код Значение Пример URL
ruРусский (любой регион)https://example.com/ru/page
enАнглийский (любой регион)https://example.com/en/page
ru-RUРусский для Россииhttps://example.com/ru-ru/page
ru-UAРусский для Украиныhttps://example.com/ru-ua/page
ukУкраинскийhttps://example.com/uk/page
x-defaultФолбэк для всех неперечисленныхhttps://example.com/

Код языка пишется строчными буквами, код региона — заглавными: ru-RU, а не ru-ru (хотя Google принимает оба варианта, в спецификации — заглавные). x-default — зарезервированное значение для страницы, которую поисковик покажет пользователю из языка или региона, не перечисленных в разметке.

Важно: hreflang указывает именно на язык, а не на страну. en-GB и en-US — английский для Великобритании и США, но если на сайте одна английская версия, используйте en без региона. Попытка «подстраховаться» и указать оба кода одновременно приведёт к конфликту — поисковик не поймёт, какая версия приоритетна.

Три способа внедрения

hreflang можно разместить в одном из трёх мест: HTML-тегах страницы, HTTP-заголовке ответа, XML-sitemap. Выбор зависит от размера сайта, типа контента и возможностей CMS.

Метод Где размещается Когда подходит Сложность Лимит
HTML <link> <head> страницы До 10–15 языковых версий Низкая Замедляет парсинг при сотнях ссылок
HTTP-заголовок Link: Ответ сервера PDF, изображения, не-HTML Средняя Нет
XML-sitemap Отдельный файл 20+ локалей, крупные сайты Высокая 50 000 URL на файл

HTML-тег

Самый распространённый способ. В <head> каждой языковой версии добавляется полный набор <link rel="alternate"> на все версии, включая саму себя (самореферентная ссылка — обязательна).

<link rel="alternate" hreflang="ru" href="https://example.com/ru/">
<link rel="alternate" hreflang="en" href="https://example.com/en/">
<link rel="alternate" hreflang="ru-UA" href="https://example.com/ru-ua/">
<link rel="alternate" hreflang="ru-KZ" href="https://example.com/ru-kz/">
<link rel="alternate" hreflang="de" href="https://example.com/de/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">

Набор одинаковый на всех языковых версиях страницы. Самое частое место поломки — когда страница /ru/ указывает hreflang="ru" только на саму себя, а про /en/ забывает.

HTTP-заголовок

Для не-HTML ресурсов — PDF, DOC, картинки — HTML-тегов нет, но hreflang всё равно нужен. Серверу настраивается заголовок Link::

Link: <https://example.com/ru/guide.pdf>; rel="alternate"; hreflang="ru",
      <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/guide.pdf>; rel="alternate"; hreflang="x-default"

Настройка — в конфиге Nginx (add_header Link), Apache (Header set Link) или через middleware приложения. Для большинства сайтов этот способ актуален только для раздела с документацией.

XML-sitemap

Для крупных сайтов — интернет-магазин с десятками тысяч страниц и 5+ языками — разметка в HTML каждой страницы приводит к раздутому <head>. Решение — вынести hreflang в XML-sitemap. Подробнее — в разделе про sitemap ниже.

Готовые примеры для разных сайтов

Три сценария, которые встречаются в 90% случаев.

Двуязычный блог RU / EN

Самая простая конфигурация. На каждой статье блога — 3 строки <link>:

<link rel="alternate" hreflang="ru" href="https://example.com/ru/blog/article">
<link rel="alternate" hreflang="en" href="https://example.com/en/blog/article">
<link rel="alternate" hreflang="x-default" href="https://example.com/ru/blog/article">

x-default указывает на русскую версию — её увидят пользователи из Франции, Германии и других стран, где нет отдельного перевода.

Интернет-магазин RU / UA / KZ

Один язык, три региональных версии с разными ценами, валютами и складами:

<link rel="alternate" hreflang="ru-RU" href="https://example.com/ru-ru/product/42">
<link rel="alternate" hreflang="ru-UA" href="https://example.com/ru-ua/product/42">
<link rel="alternate" hreflang="ru-KZ" href="https://example.com/ru-kz/product/42">
<link rel="alternate" hreflang="x-default" href="https://example.com/product/42">

Google покажет ru-KZ пользователю из Казахстана, ru-UA — из Украины, ru-RU — из России. Остальные увидят x-default (каноническая версия без региона).

Международный B2B на разных доменах

Компания с отдельными доменами по рынкам: example.ru, example.com, example.de. Разметка работает между доменами так же, как внутри одного:

<link rel="alternate" hreflang="ru" href="https://example.ru/">
<link rel="alternate" hreflang="en" href="https://example.com/">
<link rel="alternate" hreflang="de" href="https://example.de/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">

Обязательное условие — взаимность: страница на example.ru ссылается на example.com, а example.com — на example.ru. Без этого Google проигнорирует разметку.

Проверьте hreflang на сайте за 30 секунд
SEO Crawler покажет взаимность ссылок, найдёт несамореферентные записи и конфликты с canonical — по всем страницам сразу.
Проверить hreflang

hreflang в XML-sitemap

Для крупного сайта с десятками локалей HTML-подход становится тяжёлым: на странице с 30 языковыми версиями в <head> уходит 30 строк <link>, и так на каждой из 100 000 страниц. Вынос hreflang в XML-sitemap решает проблему: разметка централизованно описана в одном файле.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.com/ru/product/42</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/ru/product/42"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/product/42"/>
    <xhtml:link rel="alternate" hreflang="uk" href="https://example.com/uk/product/42"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/product/42"/>
  </url>
</urlset>

Правила те же, что и для HTML-тега: самореферентность (каждый <url> содержит <xhtml:link> на себя), взаимность между версиями, x-default для фолбэка. Google и Яндекс читают <xhtml:link> как эквивалент HTML-тега.

Sitemap-подход совместим с HTML-тегом: можно описать hreflang только в sitemap, только в HTML или продублировать — поисковики предпочтут более свежие данные. Для sitemap действуют общие лимиты — до 50 000 URL и 50 МБ в одном файле. Подробности о структуре sitemap — в статье «sitemap.xml: как создать, разместить и проверить». Сам файл sitemap объявляется в robots.txt директивой Sitemap: — см. гайд по robots.txt. Сгенерировать sitemap с hreflang автоматически можно в генераторе sitemap SEO Crawler.

Топ-5 ошибок hreflang

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

  1. Страница не ссылается на саму себя. Каждая языковая версия должна включать <link> на собственный URL. Без самореферентной ссылки Google не считает разметку валидной и игнорирует весь набор.
  2. Односторонние ссылки. /ru/ ссылается на /en/, но /en/ не ссылается на /ru/. Разметка обязана быть взаимной — это главное правило. В Google Search Console такие пары показываются в отчёте «International Targeting» как ошибки без пары.
  3. Неверные коды регионов. Частая путаница: ru-RU-ru, russian, ru_RU (с подчёркиванием), ru-RUS (трёхбуквенный код страны). Принимается только формат «язык-РЕГИОН», где язык — ISO 639-1, регион — ISO 3166-1 alpha-2.
  4. Отсутствует x-default. Некритичная ошибка, но без x-default поисковик сам решает, какую версию показать пользователю из неперечисленного региона. Решение не всегда удачное — проще указать явно.
  5. Конфликт с canonical. Страница /ru/product указывает canonical на /en/product и одновременно даёт на неё hreflang. Canonical говорит: «это дубль», hreflang — «это альтернатива». Противоречие, Google проигнорирует обе разметки. Правильно: canonical — на себя, hreflang — на все версии.

Неправильный пример из реальной практики:

<!-- На странице /ru/product: НЕ ДЕЛАЙТЕ ТАК -->
<link rel="canonical" href="https://example.com/en/product">
<link rel="alternate" hreflang="en" href="https://example.com/en/product">
<!-- забыт самореферентный <link hreflang="ru" ...> -->

hreflang vs canonical vs alternate

Три механизма работают с разными задачами, и их часто путают. canonical говорит: «эта страница — дубль, основная версия — здесь». alternate без hreflang — «есть альтернативная версия» (мобильная, AMP). hreflang — «есть версия на другом языке».

Правильная комбинация для мультиязычной страницы:

<!-- На странице https://example.com/ru/product -->
<link rel="canonical" href="https://example.com/ru/product">
<link rel="alternate" hreflang="ru" href="https://example.com/ru/product">
<link rel="alternate" hreflang="en" href="https://example.com/en/product">
<link rel="alternate" hreflang="x-default" href="https://example.com/">

Canonical указывает на себя (страница не является дублем другой — она оригинальная версия на своём языке). Hreflang описывает все переводы, включая текущий. Это корректная разметка, которую принимают и Google, и Яндекс.

Дополнительный слой — структурированные данные Schema.org. Они не заменяют hreflang, но помогают поисковику лучше понять контент страницы. Подробнее — в гайде по Schema.org и JSON-LD.

Как проверить hreflang

Четыре уровня проверки — от страницы до всего сайта.

Первая — ручная, через view-source: в браузере. Откройте страницу, посмотрите исходный код, найдите блок <link rel="alternate" hreflang=...>. Проверьте: самореферентная ссылка есть, все языки перечислены, коды корректные, URL рабочие.

Вторая — Google Search Console. В отчёте «International Targeting → Language» показываются ошибки по всему сайту: страницы без самореферентности, пары без взаимности, неизвестные коды языков. Обновляется с задержкой в несколько дней после обхода.

Третья — Яндекс.Вебмастер. Яндекс не учитывает hreflang в полной мере, но проверяет синтаксис разметки в разделе «Индексирование → Страницы в поиске». Для русско-украинских и русско-казахских пар полезнее — Яндекс.Вебмастер → «Региональность» (явное указание региона сайта).

Четвёртая — автоматическая по всему сайту. На сайте с 500+ страницами проверить каждую вручную невозможно. Валидатор hreflang в SEO Crawler обходит сайт, проверяет взаимность ссылок между всеми языковыми версиями, находит несамореферентные записи и конфликты с canonical — в одном отчёте.

Официальная документация — Google Search Central о локализованных версиях.

Часто задаваемые вопросы

hreflang обязателен для мультиязычных сайтов?

Формально — нет. Сайт без разметки будет индексироваться, и Google попытается сам понять, какая страница на каком языке. На практике без hreflang мультиязычные страницы начинают конкурировать за одни и те же запросы: в выдаче может оказаться английская версия, когда пользователь ищет на русском. Для сайтов с двумя и более языками — это обязательная разметка.

Что такое x-default и обязателен ли он?

x-default указывает фолбэк-версию страницы для языков и регионов, которых нет в вашем списке. Типичный сценарий: сайт переведён на русский, английский, украинский. Пользователь из Франции заходит на страницу — какую версию ему показать? Без x-default решает Google. С x-default — видит ту, которую вы явно назначили (обычно английскую или наиболее нейтральную).

hreflang или поддомены — что лучше для разных языков?

Это разные вещи. hreflang — разметка, которая сообщает поисковику о связях между страницами. Поддомены (en.example.com) или подпапки (example.com/en/) — структура URL. Они совместимы и обычно используются вместе: выбирается структура (подпапки рекомендуются Google как более простые для SEO), а внутри неё размечается hreflang.

Разрешён ли hreflang между разными доменами?

Да. Сайт на example.ru, example.com и example.de может связать страницы между собой через hreflang — это рабочий сценарий для международных брендов. Главное условие — взаимность: если example.ru ссылается на example.com, то example.com обязан ссылаться обратно на example.ru. Без взаимности разметка игнорируется.

Яндекс учитывает hreflang?

Частично. Яндекс понимает синтаксис hreflang и не ругается на разметку, но приоритет отдаёт собственным сигналам — в первую очередь настройке региона сайта в Яндекс.Вебмастере. Для русско-украинских и русско-казахских пар надёжнее явно указывать регион в Вебмастере параллельно с hreflang. Для русско-английских пар и международных рынков hreflang работает и в Яндексе.

Можно ли использовать hreflang для региональных версий одного языка?

Да, и это один из основных сценариев. Сайт интернет-магазина с тремя версиями (ru-RU, ru-UA, ru-KZ) — контент на русском, но цены, валюта и условия доставки разные. Google распределит трафик по регионам автоматически. Без разметки все три версии будут конкурировать в выдаче как дубли.

Запустите аудит мультиязычного сайта
SEO Crawler обходит сайт, проверяет hreflang, canonical, sitemap и мета-теги на каждой языковой версии за один обход. Бесплатно, до 50 страниц.
Начать аудит
Поделиться:
SC
Команда SEO Crawler
Пишем о техническом SEO, аудите и продвижении сайтов
Ссылка скопирована