В корзине пусто!
Hreflang — атрибут ссылки, который сообщает Google, какая языковая или региональная версия страницы предназначена для конкретной аудитории. Без него мультиязычный сайт получает каннибализацию трафика между версиями и показ неправильных страниц в поиске.
Содержание статьи
- Что такое hreflang и когда он действительно нужен
- Синтаксис: язык vs язык+регион
- Три способа внедрения: сравнение
- Обязательные правила: обратные ссылки и x-default
- Hreflang и canonical: как они взаимодействуют
- Топ-7 ошибок с примерами кода
- Диагностика: Screaming Frog, GSC, hreflang Testing Tool
- Кейс: мультиязычный сайт после исправления hreflang
- Часто задаваемые вопросы
Что такое hreflang и когда он действительно нужен
Атрибут hreflang — HTML-директива для поисковых систем (прежде всего Google и Yandex), которая указывает связь между несколькими версиями одной страницы, отличающимися языком или регионом. Google не «угадывает» правильную версию самостоятельно — без hreflang он выбирает произвольно, и нередко ошибается.
Атрибут введён Google в 2011 году, однако по нашим наблюдениям даже в 2025–2026 годах большинство мультиязычных сайтов содержат критические ошибки в его реализации. Последствия: неправильная версия страницы в SERP, каннибализация между языковыми версиями, падение CTR.
Когда hreflang необходим:
- Несколько языковых версий сайта — например, украинская, русская и английская на разных URL
- Один контент, разные регионы — английская для США (
en-US) и Великобритании (en-GB) с разными ценами или условиями - Субдомены или поддиректории для языков —
ua.site.comпротивsite.com/en/ - Дубли контента между языками — когда одна версия переведена частично, а остальное совпадает
Когда hreflang НЕ нужен: если сайт монолингвальный и ориентирован на одну страну — hreflang лишь добавит сложности без пользы.
Синтаксис: язык vs язык+регион
Значение атрибута hreflang формируется по стандарту ISO 639-1 (язык) и ISO 3166-1 alpha-2 (регион). Понять, когда указывать только язык, а когда — язык с регионом, критически важно для корректной работы атрибута.
Только язык (без региона)
Используйте, если контент одинаков для всех носителей данного языка вне зависимости от страны:
<!-- Одна версия для всех украиноязычных пользователей -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/">
<!-- Одна версия для всех испаноязычных -->
<link rel="alternate" hreflang="es" href="https://site.com/es/">
Язык + регион (рекомендуется для e-commerce)
Применяйте, когда контент различается в зависимости от страны: цены, валюта, условия доставки, юридический текст:
<!-- Английский для США -->
<link rel="alternate" hreflang="en-US" href="https://site.com/en-us/">
<!-- Английский для Великобритании -->
<link rel="alternate" hreflang="en-GB" href="https://site.com/en-gb/">
<!-- Испанский для Мексики -->
<link rel="alternate" hreflang="es-MX" href="https://site.com/es-mx/">
<!-- Испанский для Испании -->
<link rel="alternate" hreflang="es-ES" href="https://site.com/es-es/">
uk, ru, en). Региональное разделение оправдано только тогда, когда контент реально разный для разных стран.
| Код | Что означает | Когда использовать |
|---|---|---|
uk |
Украинский язык (все регионы) | Единственная украиноязычная версия |
ru |
Русский язык (все регионы) | Единственная русскоязычная версия |
en |
Английский язык (все регионы) | Глобальный английский без регионализации |
en-US |
Английский для США | Отдельные цены, условия для US-рынка |
en-GB |
Английский для Великобритании | Британская орфография, фунты стерлингов |
x-default |
Версия по умолчанию | Для аудиторий без конкретной языковой версии |
Три способа внедрения: сравнение
Google поддерживает три метода реализации hreflang. Выбор зависит от типа сайта, CMS и наличия доступа к серверным настройкам. В нашей практике настройки hreflang для мультиязычных сайтов самая распространённая ошибка — это смешивание разных методов на одном сайте, что приводит к конфликтам и игнорированию тегов Googlebot'ом.
| Метод | Где размещается | Преимущества | Недостатки | Лучше всего для |
|---|---|---|---|---|
| HTML <head> | Тег <head> каждой страницы | Просто настроить, поддерживается всеми CMS | Увеличивает размер HTML, сложно масштабировать на 10 000+ страниц | Сайты до 1 000 страниц, WordPress, OpenCart |
| HTTP Header | Заголовок HTTP-ответа сервера | Единственный вариант для PDF и не-HTML файлов | Требует доступа к серверным настройкам (Apache/Nginx), сложно дебажить | PDF-каталоги, файловые ресурсы |
| XML Sitemap | Файл sitemap.xml | Не нагружает HTML, легко масштабировать, удобно для крупных сайтов | Требует поддержки со стороны CMS/генератора sitemap, ошибки сложнее отловить | Крупные e-commerce, порталы 10 000+ страниц |
Метод 1: HTML <head>
Наиболее распространённый метод. Теги добавляются в секцию <head> каждой страницы:
<head>
<!-- Украинская версия -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<!-- Русская версия -->
<link rel="alternate" hreflang="ru" href="https://site.com/ru/page/">
<!-- Английская версия -->
<link rel="alternate" hreflang="en" href="https://site.com/en/page/">
<!-- Версия по умолчанию -->
<link rel="alternate" hreflang="x-default" href="https://site.com/page/">
</head>
Метод 2: HTTP Header
Используется для не-HTML ресурсов. Пример конфигурации для Nginx:
location /catalog.pdf {
add_header Link '<https://site.com/ua/catalog.pdf>; rel="alternate"; hreflang="uk",
<https://site.com/en/catalog.pdf>; rel="alternate"; hreflang="en",
<https://site.com/catalog.pdf>; rel="alternate"; hreflang="x-default"';
}
Метод 3: XML Sitemap
Оптимальный выбор для крупных сайтов. Структура файла sitemap.xml:
<?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://site.com/ua/page/</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://site.com/ua/page/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://site.com/ru/page/"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://site.com/en/page/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://site.com/page/"/>
</url>
<url>
<loc>https://site.com/ru/page/</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://site.com/ua/page/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://site.com/ru/page/"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://site.com/en/page/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://site.com/page/"/>
</url>
</urlset>
Обязательные правила: обратные ссылки и x-default
Два правила, без которых hreflang не работает корректно, независимо от метода внедрения.
Правило 1: обратные (bidirectional) ссылки
Каждая языковая версия должна ссылаться на все остальные версии, включая себя. Если украинская страница ссылается на английскую, то английская страница тоже должна ссылаться на украинскую. Отсутствие обратной ссылки — и Google игнорирует весь набор.
<!-- Правильно: КАЖДАЯ страница содержит ссылки на ВСЕ версии -->
<!-- На UA-странице (/ua/page/) -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/"> <!-- само-ссылка -->
<link rel="alternate" hreflang="ru" href="https://site.com/ru/page/">
<link rel="alternate" hreflang="en" href="https://site.com/en/page/">
<link rel="alternate" hreflang="x-default" href="https://site.com/page/">
<!-- На EN-странице (/en/page/) - ТОТ ЖЕ набор тегов! -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<link rel="alternate" hreflang="ru" href="https://site.com/ru/page/">
<link rel="alternate" hreflang="en" href="https://site.com/en/page/"> <!-- само-ссылка -->
<link rel="alternate" hreflang="x-default" href="https://site.com/page/">
Правило 2: атрибут x-default
Тег x-default указывает страницу для пользователей, чей браузер/регион не соответствует ни одной из указанных языковых версий. Обычно это главная страница или языковой выбор:
<!-- x-default = страница языкового выбора или главная (EN) -->
<link rel="alternate" hreflang="x-default" href="https://site.com/">
site.com/choose-language/.
Hreflang и canonical: как они взаимодействуют
Canonical и hreflang — два разных сигнала для Google, и они не противоречат друг другу при правильной настройке. Проблема возникает, когда разработчики путают их функции.
Canonical говорит Google: «Эта страница является основной версией, если есть дубликаты». Hreflang говорит: «Эти страницы — переводы одного контента для разных аудиторий».
Ключевое правило: canonical должен указывать на себя (self-referencing), если страница входит в hreflang-группу. То есть каждая языковая версия имеет canonical на саму себя.
<!-- ПРАВИЛЬНО: canonical указывает на текущую (свою) страницу -->
<!-- На UA-странице (site.com/ua/page/) -->
<link rel="canonical" href="https://site.com/ua/page/">
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<link rel="alternate" hreflang="en" href="https://site.com/en/page/">
<!-- НЕПРАВИЛЬНО: canonical с одной языковой версии указывает на другую -->
<!-- На UA-странице (site.com/ua/page/) -->
<link rel="canonical" href="https://site.com/en/page/"> <!-- ОШИБКА! -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<link rel="alternate" hreflang="en" href="https://site.com/en/page/">
Если canonical на UA-странице указывает на EN-версию, Google воспринимает UA-версию как дубликат и исключает её из индекса — hreflang перестаёт работать для этой пары.
Топ-7 ошибок с примерами кода
По нашему опыту аудитов мультиязычных сайтов — 9 из 10 проектов имеют хотя бы одну из этих ошибок. Некоторые — сразу несколько:
Ошибка 1: Отсутствие обратных ссылок
<!-- ОШИБКА: Только UA-страница ссылается на EN, но EN не ссылается на UA -->
<!-- UA-страница: -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/">
<link rel="alternate" hreflang="en" href="https://site.com/en/">
<!-- EN-страница: -->
<link rel="alternate" hreflang="en" href="https://site.com/en/">
<!-- Нет тега hreflang="uk" -- Google ИГНОРИРУЕТ весь набор! -->
Ошибка 2: Неправильный код языка
<!-- ОШИБКА: Несуществующие или некорректные коды -->
<link rel="alternate" hreflang="ua" href="..."> <!-- Правильно: "uk" -->
<link rel="alternate" hreflang="rus" href="..."> <!-- Правильно: "ru" -->
<link rel="alternate" hreflang="eng" href="..."> <!-- Правильно: "en" -->
<!-- ПРАВИЛЬНО: -->
<link rel="alternate" hreflang="uk" href="...">
<link rel="alternate" hreflang="ru" href="...">
<link rel="alternate" hreflang="en" href="...">
Ошибка 3: Ссылки на редиректы или недоступные URL
<!-- ОШИБКА: hreflang указывает на URL с редиректом 301 -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page">
<!-- Если этот URL редиректит на site.com/ua/page/ (со слешем) -- Google игнорирует тег -->
<!-- ПРАВИЛЬНО: финальный URL без редиректов -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
Ошибка 4: Неполный набор версий
<!-- ОШИБКА: Есть 3 языковые версии, но hreflang указан только для 2 -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<link rel="alternate" hreflang="en" href="https://site.com/en/page/">
<!-- Пропущен hreflang="ru" -- RU-версия не получит правильного распределения трафика -->
Ошибка 5: Отсутствие x-default
<!-- ОШИБКА: Нет тега x-default -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/">
<link rel="alternate" hreflang="ru" href="https://site.com/ru/">
<link rel="alternate" hreflang="en" href="https://site.com/en/">
<!-- Что покажет Google японцу? Результат непредсказуем -->
<!-- ПРАВИЛЬНО: -->
<link rel="alternate" hreflang="x-default" href="https://site.com/en/">
Ошибка 6: Смешивание методов внедрения
<!-- ОШИБКА: hreflang в HTML head + тот же hreflang в Sitemap одновременно -->
<!-- Это не запрещено, но приводит к конфликтам, если значения различаются -->
<!-- Всегда используйте ОДИН метод для всего сайта -->
Ошибка 7: Canonical на иноязычную версию
<!-- ОШИБКА: UA-страница с canonical на EN-версию -->
<link rel="canonical" href="https://site.com/en/page/"> <!-- UA-страница -->
<link rel="alternate" hreflang="uk" href="https://site.com/ua/page/">
<!-- Google исключит UA из индекса, hreflang будет проигнорирован -->
<!-- ПРАВИЛЬНО: self-referencing canonical -->
<link rel="canonical" href="https://site.com/ua/page/"> <!-- Указывает на себя! -->
Диагностика: Screaming Frog, GSC, hreflang Testing Tool
Даже если hreflang внедрён правильно «на бумаге», ошибки могут проникнуть через обновления CMS, деплойные скрипты или невнимательность разработчика. Регулярная диагностика — обязательная часть технического SEO-аудита.
Google Search Console (GSC)
- Зайдите в GSC → Индексирование → Страницы
- Фильтруйте по статусу "Исключено" → ищите причину "Альтернативная страница с правильно указанным тегом hreflang"
- Перейдите в Настройки → Sitemap → проверьте, не возвращает ли GSC ошибок при обработке sitemap с hreflang
- В разделе Улучшения проверяйте сигналы о конфликтах языковых версий
Screaming Frog SEO Spider
- Запустите краулинг сайта в режиме Spider
- Перейдите в Hreflang → вкладка All — увидите все найденные теги
- Вкладка Errors покажет: отсутствующие обратные ссылки, мёртвые URL, неправильные коды языков
- Вкладка Unconfirmed — теги, для которых Screaming Frog не смог подтвердить обратную ссылку
- Сохраните отчёт Reports → Hreflang для фиксации состояния
Google Hreflang Tags Testing Tool (Merkle)
Бесплатный онлайн-инструмент от Merkle (hreflang.org) позволяет проверить отдельные URL или загрузить список. Инструмент показывает:
- Missing return links — отсутствие обратных ссылок
- Invalid language/region codes — невалидные коды
- Non-200 URLs — недоступные страницы в наборе
- No x-default — отсутствие дефолтной версии
Проверка через curl (для метода HTTP Header)
# Проверить hreflang в HTTP-заголовках:
curl -I https://site.com/en/page/
# Ожидаемый вывод в заголовке Link:
# Link: <https://site.com/ua/page/>; rel="alternate"; hreflang="uk",
# <https://site.com/en/page/>; rel="alternate"; hreflang="en",
# <https://site.com/>; rel="alternate"; hreflang="x-default"
Кейс: мультиязычный сайт после исправления hreflang
Наш клиент — производитель промышленного оборудования с сайтом на 3 языка (UA/RU/EN). До обращения в SEO-Factory сайт имел более 2 300 страниц с hreflang-тегами, но из-за ошибки в шаблоне CMS обратные ссылки отсутствовали в 67% случаев. Дополнительно: canonical на UA-версиях указывал на EN-версии (ошибка при миграции с предыдущего сайта).
Выявленные проблемы (Screaming Frog + GSC):
- 1 541 страница с отсутствующими обратными hreflang-ссылками
- 312 страниц с canonical-конфликтом (UA → EN)
- Код языка
uaвместо правильногоukна всех страницах - Отсутствующий
x-defaultна всех URL
Ход исправления (6 недель):
- Неделя 1–2: Исправление шаблона CMS — автоматическая генерация полного набора hreflang для всех страниц, смена кода
ua→uk - Неделя 3: Исправление canonical на всех UA-страницах (self-referencing), добавление
x-default - Неделя 4: Обновление XML Sitemap, повторная подача в GSC
- Недели 5–6: Мониторинг индексации в GSC, дообработка оставшихся ошибок
Результаты через 3 месяца после исправления:
| Метрика | До исправления | После исправления | Изменение |
|---|---|---|---|
| Органический трафик (UA-версия) | 2 140 сес./мес. | 3 890 сес./мес. | +82% |
| Органический трафик (EN-версия) | 890 сес./мес. | 1 650 сес./мес. | +85% |
| Проиндексировано UA-страниц | 68% | 96% | +28 п.п. |
| Средний CTR в поиске (UA) | 3.2% | 5.7% | +2.5 п.п. |
| Ошибки hreflang в GSC | 1 853 | 14 | -99% |
Главный вывод из этого проекта: ошибки hreflang напрямую влияют на индексацию, а не только на распределение трафика. Когда Google не понимает языковую структуру сайта — он частично исключает страницы из индекса. Если ваш сайт не получает ожидаемого трафика из международного поиска, закажите технический SEO-аудит — мы проверим hreflang в первую очередь.
Часто задаваемые вопросы
Нужен ли hreflang, если сайт на одном языке, но с разными регионами?
Да, необходим. Например, если у вас есть английская версия для США и Великобритании, добавьте hreflang en-US и en-GB с разными URL. Без этого Google может показывать британцам американскую версию с другими ценами или условиями.
Обязателен ли атрибут x-default?
Технически x-default не обязателен, но Google рекомендует его добавлять. Он указывает страницу для пользователей, чей язык или регион не совпадают ни с одним из ваших hreflang-вариантов. Обычно это главная или языково-нейтральная версия.
Сколько времени занимает индексация hreflang-тегов после исправления ошибок?
Google переиндексирует hreflang-теги в течение 2–6 недель после внесения изменений. На крупных сайтах (10 000+ страниц) этот процесс может занять до 2 месяцев. Ускорить можно повторной подачей Sitemap в Google Search Console.
Может ли hreflang конфликтовать с canonical-тегом?
Да, конфликт возникает, когда canonical указывает на страницу другого языка. Правило простое: canonical всегда должен указывать на себя (self-referencing), а hreflang — на все языковые версии. Если canonical ведёт на иноязычную страницу, Google проигнорирует hreflang.
Есть мультиязычный сайт? Проверим hreflang бесплатно
На большинстве мультиязычных сайтов есть критические ошибки hreflang, которые блокируют рост международного трафика. Команда SEO-Factory проведёт технический аудит и выявит все проблемы с языковыми тегами, canonical и структурой URL.
Заказать продвижение мультиязычного сайта или связаться для бесплатной консультации по hreflang-ошибкам.


