# 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), а затем возвращайтесь сюда, чтобы добавить разметку.

## Что 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.
