# General Translation Knowledge Base: Что такое hreflang и как его настроить?
URL: https://generaltranslation.com/ru/kb/what-is-hreflang.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Hreflang сообщает Google, какие URL являются языковыми или региональными версиями одной и той же страницы, чтобы в результатах поиска показывалась нужная. Добавьте его с помощью HTML-тегов link, HTTP-заголовков Link или карты сайта, сделайте все ссылки взаимными и используйте корректные коды, например en-GB, а не en-UK.
Category: Многоязычное SEO
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

Hreflang работает, только когда у каждой языковой версии уже есть собственный URL: он связывает одни URL с другими. Если вы ещё не определились со структурой URL, сначала выберите между [подкаталогами, поддоменами и доменами стран](/kb/multilingual-url-structure), а затем возвращайтесь сюда, чтобы добавить разметку.

## Video

The video is narrated in English, with English captions.

[What is hreflang, and how do I set it up?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-what-is-hreflang.mp4) (48 с)

Hreflang tells Google which URLs are language or regional versions of the same page, so it can show the right one in search results. Add it with HTML link tags, HTTP Link headers, or a sitemap, make every link reciprocal, and use valid codes such as en-GB, not en-UK. General Translation's `gt-next` gives every language its own URL, the prerequisite for hreflang.

## Что hreflang делает и чего не делает

Hreflang объединяет URL-адреса одной страницы в кластер и помечает каждый из них языком и, при необходимости, регионом. Если поисковый запрос немецкоязычного пользователя соответствует вашей английской странице с ценами, Google может показать вместо неё немецкий URL из того же кластера. В [руководстве Google по локализованным версиям](https://developers.google.com/search/docs/specialty/international/localized-versions) сказано, что поисковик может находить альтернативные версии и без аннотаций, но их рекомендуется указывать явно.

От hreflang легко ожидать большего, чем он на самом деле даёт:

* **Это не перенаправление.** Hreflang помогает Google выбрать, какой URL показать в результатах поиска, но не гарантирует конкретного результата. Перейдя по ссылке, посетитель попадает на этот URL, а всё дальнейшее решает ваш сервер (подробнее — в статье [о том, как сайту выбирать язык отдаваемого контента](/kb/locale-routing-seo)).
* **Он не определяет язык.** По словам Google, для определения языка страницы не используются ни hreflang, ни HTML-атрибут `lang`: Google определяет язык по содержимому с помощью собственных алгоритмов.
* **Он не спасает непереведённые страницы.** Google считает локализованные версии дубликатами только в том случае, если основное содержимое осталось непереведённым. Если перевести лишь навигацию и подвал, hreflang сможет пометить такую страницу, но не сделает её уникальной.

## Как добавить hreflang?

Google считает HTML, HTTP-заголовки и карты сайта равнозначными и отмечает, что использование сразу нескольких способов не даёт никаких преимуществ в Поиске. Выберите тот, который лучше всего подходит к архитектуре вашего сайта.

### HTML-элементы link

Добавьте в `<head>` по одному тегу `<link rel="alternate">` для каждой версии страницы, включая текущую. Набор этих элементов должен быть одинаковым во всех версиях. URL-адреса указываются полностью (`https://example.com/de/preise`, а не `/de/preise`).

```html
<!-- Одинаково в <head> каждой из страниц /en/pricing, /de/preise и /fr/tarifs -->
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing" />
```

Не сочетайте hreflang с другими атрибутами (например, `media`) в одном `<link>` и проверяйте итоговый HTML после рендеринга: ссылка, оказавшаяся вне корректно сформированного `<head>`, не учитывается.

### HTTP-заголовки Link

Для файлов без `<head>`, например PDF, передавайте тот же кластер в заголовке ответа `Link`. Каждый URL заключается в угловые скобки, а записи разделяются запятыми.

```http
Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/de/leitfaden.pdf>; rel="alternate"; hreflang="de",
      <https://example.com/fr/guide.pdf>; rel="alternate"; hreflang="fr"
```

### XML-карта сайта

Карта сайта позволяет вынести аннотации за пределы страниц. Объявите пространство имён `xhtml`, создайте для каждого URL отдельную запись `<url>` и перечислите в каждой из них все версии страницы, включая её саму. По словам Google, эти дочерние записи не учитываются в лимите URL для карты сайта.

```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://example.com/en/pricing</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/de/preise</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/fr/tarifs</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
</urlset>
```

Размещайте карту сайта в корневом каталоге сайта, если её записи о страницах охватывают несколько папок локалей. В [руководстве Google по картам сайта](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap) описано, как область действия зависит от каталога, а также варианты отправки карт сайта для нескольких сайтов; альтернативные URL-адреса hreflang могут указывать на другие домены.

## Общие правила для всех способов

* **По возможности используйте один и тот же полный набор, включая саму страницу.** Если языковых версий три, на каждой странице должно быть три записи. Если поддерживать полный набор сложно, Google может обрабатывать и меньшие взаимные группы; в первую очередь добавьте обратные ссылки между новыми версиями и исходной или основной версией.
* **Ссылки должны быть взаимными.** Если страница X указывает на страницу Y, а Y не ссылается обратно на X, Google игнорирует эту пару. Так другой сайт не сможет выдать себя за вашу немецкую версию.
* **При необходимости добавьте `x-default`.** Он задаёт резервную страницу для языков, которым не нашлось соответствия, например страницу выбора языка или версию на языке по умолчанию. Для работы hreflang он не обязателен. Резервная страница должна соответствовать содержимому: не стоит отправлять все вложенные страницы на главную.
* **Код состоит из языка и необязательного региона.** Язык указывается по ISO 639-1 (`de`), регион — по ISO 3166-1 alpha-2 (`de-CH`), регистр не важен. Один только регион недопустим, а код страны на месте языка означает совсем другое: `be` — это белорусский язык, а не Бельгия.
* **Письменность указывать можно.** Google принимает подтеги письменности ISO 15924, такие как `zh-Hans` и `zh-Hant`, в том числе с регионом (`zh-Hans-US`). Для `zh-TW` традиционный китайский определяется по региону.
* **Добавляйте для региональных вариантов резервную версию только с языком.** Если у вас есть страницы `en-IE`, `en-CA` и `en-AU`, добавьте страницу `en` (это может быть одна из трёх) для англоязычных пользователей из остальных стран.

Некоторые корректные коды локалей здесь всё же не работают. `es-419` (испанский для Латинской Америки) — правильный тег BCP 47, но hreflang в Google поддерживает только регионы ISO 3166-1, поэтому помечайте такую страницу как `es` или кодами конкретных стран, например `es-MX` и `es-AR`.

## Должны ли страницы с hreflang ссылаться на себя как на канонические?

Для отдельных переведённых страниц предпочтительный канонический URL обычно указывает на саму страницу. В [рекомендациях Google по дублирующимся URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) советуется при использовании hreflang указывать канонический URL на том же языке, а если такого нет — наиболее подходящую альтернативу. Не указывайте английскую версию в качестве канонической для всех переведённых страниц.

Региональные страницы на одном языке требуют отдельного решения. Если `en-US` и `en-GB` дублируют друг друга, можно выбрать предпочтительный англоязычный канонический URL, а региональный таргетинг задать с помощью hreflang. Следите, чтобы сигналы canonical и hreflang не противоречили друг другу, и проверяйте в Search Console, какой канонический URL выбрал Google. Указанный канонический URL — сильный сигнал, но не гарантия.

```html
<!-- В <head> страницы https://example.com/de/preise -->
<link rel="canonical" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
```

Ещё два связанных момента с той же страницы: Google игнорирует ссылки `rel="canonical"` с атрибутом `hreflang`, поэтому не смешивайте эти два типа ссылок; кроме того, при выборе канонического URL Google отдаёт предпочтение адресам, входящим в кластер hreflang. Указывайте канонический URL каждой версии в кластере и никогда не используйте варианты с параметрами отслеживания.

## Какие ошибки hreflang встречаются чаще всего?

* **Отсутствие обратных ссылок.** Эта ошибка стоит первой в списке распространённых ошибок, составленном Google. Обычно в шаблоне одной из локалей пропущен блок или новый язык добавили лишь на часть страниц.
* **Недопустимые коды.** Google игнорирует зарезервированные коды регионов, такие как `UK` и `EU`, поэтому регион в `en-UK` ни на что не влияет — используйте `en-GB`. Неподдерживаемые регионы, например `419` в `es-419`, тоже не распознаются.
* **Относительные URL или URL со смешанными протоколами.** Альтернативные версии должны указываться полными URL, а Google не рекомендует указывать в hreflang URL с `http://`, если сайт работает по HTTPS.
* **Альтернативные версии, которые не ведут напрямую на нужную индексируемую страницу.** Указывайте итоговый канонический URL, а не перенаправление или страницу с ошибкой. Страница с `noindex` исключается из поиска, поэтому не может быть тем результатом, который вы хотите показать в Google. Проверяйте не только код статуса, но и содержимое целевой страницы и её обратные ссылки.
* **Страницы, на которых переведён только шаблон.** Hreflang не сделает их уникальными, а по словам Google, повторяющийся контент ухудшает качество поиска.

## Как проверить, что hreflang работает?

Отчёта «Международное таргетирование» в Search Console больше нет: Google [отказался от него](https://support.google.com/webmasters/answer/12474899) вместе с настройкой таргетинга по стране, но заявляет, что по-прежнему поддерживает и использует hreflang. Вместо отчёта используйте следующие проверки:

* **Выборочно проверьте одну страницу.** Загрузите HTML и убедитесь, что страница указывает саму себя и все родственные версии:

  ```bash
  curl -s https://example.com/de/preise | grep -o '<link[^>]*hreflang[^>]*>'
  ```

* **Протестируйте опубликованную страницу.** Руководство Google ссылается на два сторонних инструмента, которые Google не поддерживает: [тестер тегов hreflang от Merkle](https://technicalseo.com/seo-tools/hreflang/) для проверки отдельного URL и [генератор hreflang от Aleyda Solis](https://www.aleydasolis.com/english/international-seo-tools/hreflang-tags-generator/) для составления тегов.

* **Просканируйте весь сайт.** Краулер проверяет взаимность ссылок на всех страницах. [Аудит hreflang в Screaming Frog](https://www.screamingfrog.co.uk/seo-spider/tutorials/how-to-audit-hreflang/) сообщает об отсутствующих обратных ссылках, об альтернативных версиях с кодом ответа, отличным от 200, или с `noindex`, о недопустимых кодах, а также об альтернативных версиях, URL которых не является каноническим.

* **Проверьте карту сайта.** Выполните `xmllint --noout sitemap.xml`, чтобы найти ошибки в XML раньше, чем это сделает Google.

## Настройка hreflang с General Translation

Библиотека `gt-next` от General Translation выделяет каждому языку собственный URL с помощью [`createNextMiddleware`](/docs/react/nextjs/reference/functions/create-next-middleware) — это обязательное условие для hreflang. Если задать локализованные слаги через опцию `pathConfig`, например `/fr/a-propos`, то каждый локализованный путь и будет тем значением `href`, которое вы указываете в кластере.

Сами аннотации остаются в вашем приложении. Next.js формирует теги `<link rel="alternate" hreflang>` на основе `metadata.alternates.languages`, а в статье [Как настроить SEO для многоязычного приложения Next.js?](/kb/multilingual-nextjs-seo) приведена вспомогательная функция, которая одним вызовом возвращает канонический URL и все альтернативные версии. Берите настроенные локали в качестве кандидатов, но указывайте только те версии каждой страницы, которые действительно опубликованы.

Если локаль доступна по алиасу, например `/cn` для китайского, то в [руководстве по SEO для алиасов локалей](/docs/react/nextjs/locale-alias-seo) используется [`resolveCanonicalLocale`](/docs/react/nextjs/reference/functions/resolve-canonical-locale): в hreflang передаётся код BCP 47 `zh`, а в URL остаётся `/cn`.

## Ключевые выводы

* Hreflang сопоставляет URL с языками и регионами для результатов поиска. Он не перенаправляет посетителей и не сообщает Google, на каком языке написана страница.
* Используйте один способ (HTML `<link>`, HTTP-заголовок `Link` для PDF или `xhtml:link` в карте сайта) — Google считает их равнозначными.
* Старайтесь указывать полный набор эквивалентных URL, включая ссылки страниц на самих себя и взаимные ссылки. Небольшие группы взаимных ссылок тоже могут обрабатываться; `x-default` указывать необязательно.
* Код состоит из кода языка по ISO 639-1 и необязательного кода региона по ISO 3166-1 alpha-2 или письменности по ISO 15924: `en-GB`, а не `en-UK`; `es-MX`, а не `es-419`.
* Указывайте согласованные канонические URL — для отдельных переводов это, как правило, ссылка страницы на саму себя. Дублирующиеся региональные страницы на одном языке рассматривайте отдельно, а наличие обратных ссылок проверяйте с помощью краулера.

## Related questions

- [Как настроить SEO для многоязычного приложения Next.js?](https://generaltranslation.com/ru/kb/multilingual-nextjs-seo.mdx): Выделите каждому языку собственный URL с префиксом, например /en/about и /es/about, а затем укажите для каждого опубликованного языка html lang, канонический URL, ссылающийся на саму страницу, альтернативные версии hreflang с x-default, переведённые заголовок и описание, а также запись в карте сайта. Неопубликованные версии пометьте noindex. gt-next от General Translation направляет каждый язык на собственный URL и переводит заголовки с помощью getGT.
- [Подкаталог, поддомен или ccTLD для многоязычного SEO](https://generaltranslation.com/ru/kb/multilingual-url-structure.mdx): Используйте подкаталоги вида example.com/de/, если один продукт работает на общем сайте с единым процессом релизов. На страну указывает только ccTLD, поддомены позволяют размещать версии на отдельном хостинге, параметры ?lang= Google не рекомендует, а «имиджевые» домены вроде .io и .ai считает общими.
- [Языковые перенаправления и SEO: URL, cookie-файл или Accept-Language?](https://generaltranslation.com/ru/kb/locale-routing-seo.mdx): Язык каждой страницы, которую вы хотите видеть в индексе, должен определять URL, ведь Googlebot не отправляет заголовок Accept-Language и сканирует сайты в основном с американских адресов. Сохранённый в cookie-файле выбор, а за ним Accept-Language используйте только для того, чтобы решить, куда перенаправлять с нейтрального корневого пути вроде /, причём временным перенаправлением 302 или 307.
- [Переключатель языка: лучшие практики UX, SEO и доступности](https://generaltranslation.com/ru/kb/language-switcher.mdx): Называйте каждый язык на нём самом, например Deutsch или 日本語, и не используйте флаги — они обозначают страны. Каждый вариант должен вести на ту же страницу на выбранном языке через индексируемую ссылку. Запоминайте выбор в cookie-файле и никогда не перенаправляйте автоматически с локализованного URL.
- [Чек-лист тестирования локализации для многоязычных приложений](https://generaltranslation.com/ru/kb/multilingual-app-launch-checklist.mdx): Проверьте девять аспектов в каждой поддерживаемой локали на сборке для рабочей среды: пользовательские сценарии целиком, включая состояния ошибок и письма; переключение языка; формы множественного числа; валюту и часовые пояса; увеличение длины текста; вёрстку для языков right-to-left; доступность; доставку переводов; индексируемые языковые URL. Задайте для каждой проверки явный критерий успешного прохождения.

## Previous and next questions

- Previous question: [Подкаталог, поддомен или ccTLD для многоязычного SEO](https://generaltranslation.com/ru/kb/multilingual-url-structure.mdx)
- Next question: [Что такое псевдолокализация?](https://generaltranslation.com/ru/kb/pseudo-localization.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ru/kb/sitemap.md) for every article.
