Техническое SEO
Hreflang: полное руководство по международному SEO

Атрибут hreflang — фундамент мультиязычного SEO. Без него Google показывает не ту версию страницы не тому пользователю. Разбираем синтаксис, архитектуру, типичные ошибки и инструменты проверки.
Hreflang — HTML-атрибут, который сообщает поисковым системам, для какого языка и региона предназначена каждая версия страницы. Google использует эти данные, чтобы показывать пользователям именно ту версию контента, которая соответствует их языку и географии.
Без hreflang Google пытается угадать нужную версию самостоятельно — и часто ошибается: русскоязычный пользователь получает английскую страницу, а немец видит французскую версию. Это снижает CTR, увеличивает bounce rate и потери конверсии.
Что такое hreflang
Атрибут hreflang появился в 2011 году — Google ввёл его для решения проблемы дублированного контента на международных сайтах. Если страница /about существует в версиях /en/about, /de/about и /fr/about, Google не должен расценивать их как дубликаты — каждая служит отдельной аудитории.
Год появления
Google ввёл hreflang для мультиязычных сайтов
Кодов регионов
ISO 3166-1 alpha-2 поддерживает Googe
Взаимность
Все версии страницы должны ссылаться друг на друга
Влияние на скорость
Правильно реализованный hreflang не замедляет сайт
Hreflang поддерживает только Google и Yandex. Bing использует Content-Language мета-тег и HTTP-заголовки, но работает со структурой URL и геотаргетингом через инструменты веб-мастера. Если ваша аудитория — Рунет, hreflang всё равно нужен для корректной работы Яндекса.
Когда нужен hreflang
Не каждый мультиязычный сайт нуждается в hreflang — важно понять, когда атрибут действительно решает проблему.
| Ситуация | Нужен hreflang | Комментарий |
|---|---|---|
| Один язык, разные страны (en-US, en-GB) | Да | Разный контент (цены, правописание, акции) |
| Разные языки (ru, en, de) | Да | Основной сценарий использования hreflang |
| Один язык, один регион | Нет | Нет смысла дублировать ссылки на себя |
| Контент идентичен на всех языках | Нет | Нет смысла — используйте canonical |
| Частичный перевод (70%+ контента) | Да | Даже неполный перевод требует разметки |
| Автоматический перевод без редактуры | Нет | Google может расценить как спам |
/en-us/ и /en-gb/ без каких-либо различий), лучше использовать canonical, а не hreflang.Синтаксис и форматы
Hreflang использует коды из двух стандартов: ISO 639-1 для языка и ISO 3166-1 alpha-2 для региона. Формат: язык или язык-РЕГИОН.
<!-- Только язык -->
<link rel="alternate" hreflang="ru" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<!-- Язык + регион -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />
<!-- x-default: страница для пользователей без подходящего варианта -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Регион в hreflang всегда пишется в верхнем регистре (en-GB, fr-CA), язык — в нижнем (en, fr). Многие реализации используют строчные символы повсюду — Google понимает оба варианта, но каноничный формат соблюдать стоит.
| Код | Значение |
|---|---|
| ru | Русский (любой регион) |
| en | Английский (любой регион) |
| en-US | Английский для США |
| en-GB | Английский для Великобритании |
| de-AT | Немецкий для Австрии |
| zh-Hans | Китайский упрощённый |
| zh-Hant | Китайский традиционный |
| x-default | Страница для неопределённого региона/языка |
Способы внедрения
Hreflang можно реализовать тремя способами. Выбор зависит от технологии сайта и размера.
1. HTML-тег в секции head
Самый распространённый метод. Теги <link rel="alternate" hreflang="..."> добавляются в <head> каждой страницы. Важно: все версии страницы должны ссылаться на все остальные версии, включая себя.
<!-- Страница /en/about — ссылается на ВСЕ версии -->
<head>
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<link rel="canonical" href="https://example.com/en/about/" />
</head>2. HTTP-заголовок Link
Для PDF, изображений и других не-HTML ресурсов используются HTTP-заголовки. Этот метод работает также для любых страниц, но требует настройки сервера.
# Nginx: добавить hreflang в HTTP-заголовки
add_header Link '</en/about/>; rel="alternate"; hreflang="en", </about/>; rel="alternate"; hreflang="ru", </de/about/>; rel="alternate"; hreflang="de"';3. Sitemap XML
Оптимальный способ для крупных сайтов (10 000+ страниц). Все hreflang-связи описываются в sitemap — это снижает нагрузку на HTML и упрощает управление.
<?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/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://example.com/about/"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/about/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/"/>
</url>
<url>
<loc>https://example.com/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://example.com/about/"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/about/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/"/>
</url>
</urlset>x-default: страница выбора языка
Значение x-default указывает страницу для пользователей, чей язык или регион не соответствует ни одному из заявленных вариантов. Google показывает эту версию, когда нет подходящего hreflang.
Типичные варианты использования x-default:
- Страница выбора языка — пользователь попадает на
/choose-language/и сам выбирает версию - Основная версия сайта — чаще всего английская или та, которую Google должен показывать по умолчанию
- Главная страница — если сайт имеет несколько языков, x-default указывает на
/
Canonical + hreflang
Canonical и hreflang решают разные задачи, но работают вместе. Правило простое: canonical всегда указывает на себя (self-referencing canonical), когда на странице есть hreflang.
| Тег | Задача | Как использовать с hreflang |
|---|---|---|
| canonical | Указывает предпочтительный URL для индексации | Всегда на саму страницу (self-referential) |
| hreflang | Связывает языковые версии страницы | На все версии, включая текущую |
<head>:<!-- ПРАВИЛЬНО: canonical на себя + hreflang на все версии -->
<link rel="canonical" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<!-- ОШИБКА: canonical на другую языковую версию -->
<link rel="canonical" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/ru/about/" />Если canonical русской страницы указывает на английскую версию — Google воспримет русскую страницу как дубликат и не включит её в индекс. Именно поэтому hreflang без self-referencing canonical практически бесполезен.
Типичные ошибки
По данным аудитов, около 60% сайтов с hreflang имеют хотя бы одну критическую ошибку. Разберём наиболее частые.
Ошибка 1: отсутствие взаимных ссылок
Самая распространённая проблема. Страница A ссылается на страницу B через hreflang, но страница B не ссылается обратно на страницу A. Google игнорирует такой hreflang — он недействителен без взаимности.
<!-- Страница /en/about/ — ОШИБКА: нет ссылки на /ru/about/ -->
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<!-- Здесь должна быть ссылка на ru-версию! -->
<!-- Страница /ru/about/ — ссылается на en, но en не ссылается назад -->
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/ru/about/" />Ошибка 2: неправильные языковые коды
hreflang="ru-RU"вместоhreflang="ru"— ненужное уточнение региона для языка без диалектовhreflang="en_US"с подчёркиванием вместо дефиса — невалидный кодhreflang="english"— слово вместо ISO-кодаhreflang="zh"вместоhreflang="zh-Hans"илиhreflang="zh-Hant"— китайский нужно уточнять
Ошибка 3: hreflang на неиндексируемые страницы
Если страница заблокирована в robots.txt или помечена noindex — hreflang для неё бессмысленен. Google не будет обрабатывать hreflang со страниц, которые не может индексировать.
Ошибка 4: возврат 301-редиректа вместо контента
Часть сайтов настраивает автоматический редирект на основе языка браузера: пользователь из России запросил /about/ — его редиректят на /ru/about/. Google видит 301 и не может корректно обработать hreflang. Решение: отдавать контент без редиректа, использовать JavaScript-переключение или cookie.
Ошибка 5: ссылки на 404 или редиректы
В hreflang должны указываться финальные, канонические URL. Ссылка через редирект или на страницу 404 делает атрибут недействительным для этой версии.
Инструменты проверки
Ручная проверка hreflang на больших сайтах невозможна — нужны инструменты автоматизации.
| Инструмент | Что проверяет | Стоимость |
|---|---|---|
| Google Search Console | Ошибки hreflang в отчёте «Международный таргетинг» | Бесплатно |
| Aleyda Solis hreflang tool | Валидность тегов для одной страницы, взаимность ссылок | Бесплатно |
| TechnicalSEO hreflang checker | Пакетная проверка, экспорт ошибок | Бесплатно / платно |
| Screaming Frog | Полный краулинг с анализом hreflang | Платно |
| Ahrefs Site Audit | Ошибки hreflang в рамках SEO-аудита | Платно |
| Semrush Site Audit | Отдельный отчёт по hreflang | Платно |
Google Search Console — первый инструмент для проверки. Раздел «Настройки» → «Международный таргетинг» → вкладка «Язык» показывает страницы с ошибками hreflang и причины (неизвестный язык, несуществующая страница, отсутствие взаимности).