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

Практическая настройка языковых и региональных версий: карта URL, canonical, взаимность, проверка и типовые ошибки.

Ноутбук с языковыми версиями сайта и международной картой

Короткий ответ: hreflang связывает равнозначные страницы на разных языках или для разных регионов. Он не переводит контент, не заменяет canonical и не гарантирует показ нужной версии, но помогает поисковой системе выбрать подходящий URL для пользователя. Рабочая настройка начинается с полной таблицы соответствий: каждая страница должна ссылаться на себя и на все свои альтернативы, а ответы должны быть взаимными.

Что такое hreflang и какую задачу он решает

hreflang - это указание о языковой и, при необходимости, региональной версии страницы. Например, русскоязычный URL может быть связан с английским и казахским вариантами одной услуги. Поисковик получает сигнал: перед ним не случайные дубли, а разные версии одного содержания для разных аудиторий.

Разметка особенно полезна, когда страницы похожи по структуре и смыслу. Интернет-магазин может использовать одинаковый каталог для нескольких стран, а B2B-компания - публиковать одну услугу на русском и английском. Без явной связи поисковая система сама выбирает, какой адрес показывать. Иногда в выдачу попадает английская страница для русскоязычного пользователя или версия с ценами не для его страны.

Важно разделять роли технических сигналов. Canonical указывает основную страницу среди дублей, а hreflang связывает самостоятельные языковые или региональные страницы. Robots.txt управляет обходом, sitemap помогает находить URL. Подробно эта логика разобрана в материале про sitemap, robots.txt и canonical.

Когда hreflang действительно нужен

Разметку стоит внедрять, если на сайте есть хотя бы одна из ситуаций:

  • один и тот же товар или услуга представлены на нескольких языках;
  • отдельные версии созданы для стран с одним языком, но разными ценами, доставкой или юридическими условиями;
  • основное содержание совпадает, а различаются валюта, контакты, примеры и коммерческое предложение;
  • сайт использует разные домены, поддомены или папки для языков;
  • пользователи регулярно попадают не на ту локальную версию из поиска.

Если сайт полностью русскоязычный и региональность меняет только город внутри одной страны, hreflang обычно не нужен. Для страниц Москвы, Казани и Екатеринбурга важнее уникальная польза, контакты, условия оказания услуги и нормальная внутренняя структура. Не следует ставить hreflang="ru-MOW": код города не является допустимым региональным кодом.

Не нужен hreflang и для машинных переводов, которые недоступны пользователю как отдельные индексируемые URL. Сначала должна существовать полноценная страница: с корректным текстом, меню, формой, валютой, контактами и юридическими данными. Разметка не превращает слабый автоперевод в качественную локальную версию.

Язык, регион и x-default

Значение hreflang состоит из кода языка и необязательного кода региона. Язык записывают по ISO 639-1, регион - по ISO 3166-1 Alpha 2. Регистр не влияет на смысл, но единый формат облегчает проверку.

Примеры:

  • ru - русский язык без привязки к стране;
  • en - английский язык без привязки к стране;
  • en-GB - английский для Великобритании;
  • en-US - английский для США;
  • ru-KZ - русский для аудитории Казахстана;
  • kk-KZ - казахский для аудитории Казахстана;
  • x-default - версия по умолчанию, когда точного соответствия нет.

Не добавляйте регион только потому, что офис находится в конкретной стране. Если одна русская версия одинаково подходит людям из разных стран, достаточно ru. Региональная детализация оправдана, когда меняется реальный пользовательский опыт: цены, ассортимент, доставка, налоги, документы, сроки, номера телефонов или доступность услуги.

x-default часто ставят на селектор страны или на универсальную страницу. Это запасной вариант, а не обязательная строка для любого сайта. Если главная определяет регион и предлагает выбор, x-default указывает именно на нее. Если универсальной версии нет, не нужно создавать фиктивный адрес только ради разметки.

Сначала соберите карту соответствий URL

Главная причина ошибок - попытка расставить теги прямо в шаблоне без полной карты страниц. Составьте таблицу, где каждая строка означает одну группу эквивалентных URL. В столбцах будут языки и регионы.

Пример группы для страницы SEO-аудита:

  1. https://example.com/ru/seo-audit/ - русский язык.
  2. https://example.com/en/seo-audit/ - английский язык.
  3. https://example.com/kz/ru/seo-audit/ - русский для Казахстана.
  4. https://example.com/choose-region/ - версия x-default.

Все четыре страницы должны описывать одну и ту же услугу. Нельзя связывать русскую карточку товара с английской категорией, главной или статьей. Если перевода конкретной страницы нет, лучше не указывать замену, чем вести человека на нерелевантный URL.

Для большого сайта карту удобнее строить из базы данных или экспорта CMS. Добавьте столбцы с кодом ответа, canonical, индексируемостью и наличием страницы в sitemap. Так одна таблица покажет не только пары переводов, но и конфликты сигналов. Поиск похожих адресов и ошибочных копий можно совместить с проверкой дублей страниц в SEO.

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

HTML-теги в head

Для обычных HTML-страниц это самый понятный вариант. В head каждой версии размещают полный набор ссылок:

<link rel="alternate" hreflang="ru" href="https://example.com/ru/service/">

<link rel="alternate" hreflang="en" href="https://example.com/en/service/">

<link rel="alternate" hreflang="x-default" href="https://example.com/choose-language/">

Плюс способа - разметку легко увидеть в исходном HTML. Минус - при десятках языков блок становится большим, а ошибки шаблона размножаются на тысячи страниц. Теги должны присутствовать в исходном коде, а не появляться только после сложного выполнения JavaScript.

XML sitemap

Для крупных сайтов языковые связи можно хранить в sitemap. Каждый URL содержит ссылки xhtml:link на себя и остальные версии. Файл должен объявлять пространство имен XHTML. Набор альтернатив в sitemap должен быть полным и взаимным, как и в HTML.

Этот способ удобен, когда CMS трудно доработать, но генератор sitemap контролируется разработчиками. Он не отменяет обычные записи <loc>. Следите за лимитами файла, разбивайте карты по типам страниц и проверяйте их после каждого обновления каталога.

HTTP-заголовки

HTTP-заголовок Link подходит для PDF и других документов без HTML-раздела head. Сервер возвращает список альтернатив с атрибутами rel="alternate" и hreflang. Для обычных страниц этот способ сложнее поддерживать и диагностировать, поэтому его применяют только при понятной технической причине.

Не нужно одновременно дублировать одну и ту же разметку в HTML, sitemap и заголовках. Это допустимо, но увеличивает число мест, где данные могут разойтись. Выберите один основной источник и сделайте его надежным.

Как hreflang должен работать вместе с canonical

У каждой языковой страницы обычно должен быть canonical на саму себя. Русский URL указывает canonical на русский URL, английский - на английский. После этого hreflang связывает их как альтернативы.

Опасная ошибка выглядит так: английская страница содержит canonical на русскую, а hreflang объявляет обе страницы самостоятельными версиями. Один сигнал просит объединить URL, другой - сохранить их как альтернативы. Поисковик может проигнорировать разметку или исключить одну страницу из выбора.

Междоменная настройка работает по тому же принципу. Версии могут находиться на example.ru, example.com и example.kz; все равно нужны доступные абсолютные URL, самостоятельные canonical и взаимные ссылки. Если домены переносят или меняют структуру, сначала планируют редиректы и соответствия. Полезный порядок работ есть в инструкции про смену домена без потери SEO.

Пошаговая настройка без хаоса

Шаг 1. Зафиксируйте архитектуру

Выберите, где живут локальные версии: в папках, на поддоменах или отдельных доменах. Для поисковика допустимы все варианты. Для команды важнее единообразие, возможность независимо управлять контентом и отсутствие случайных дублей.

Проверьте, что у каждого URL один стабильный формат: HTTPS, согласованный вариант со слешем, без лишних параметров сессии. В разметке используйте конечные адреса, которые сразу отвечают кодом 200, а не проходят через редирект.

Шаг 2. Проверьте качество локальных страниц

Сравните не только перевод текста. Убедитесь, что локализованы title, description, H1, навигация, кнопки, формы, контакты, цены, единицы измерения, доставка, политика обработки данных и сообщения об ошибках. Смешанная страница, где половина интерфейса осталась на другом языке, формально может иметь hreflang, но будет плохо решать задачу пользователя.

Шаг 3. Сформируйте полные группы

Для каждой страницы определите все существующие альтернативы. Каждая версия должна ссылаться на себя. Если в группе есть русская, английская и казахская страницы, один и тот же набор из трех ссылок размещают на всех трех страницах.

Шаг 4. Добавьте взаимность

Если страница A называет B альтернативой, страница B должна отвечать ссылкой на A. Это защищает владельца другого домена от одностороннего назначения его страницы альтернативой и помогает поисковику доверять связи.

Шаг 5. Согласуйте canonical и индексирование

Проверьте self-canonical, код 200, отсутствие noindex, доступность для робота и наличие в основном sitemap. Не размечайте удаленные, закрытые авторизацией или канонизированные на другой язык URL.

Шаг 6. Обновите внутренние ссылки

Меню, хлебные крошки и ссылки внутри текста должны оставлять человека в выбранной языковой версии, если есть соответствующая страница. Английская статья не должна незаметно вести на русскую услугу. Принципы построения маршрутов описаны в гайде про внутреннюю перелинковку.

Шаг 7. Проверьте публичные ответы

Запрашивайте реальные URL, а не только файлы в репозитории. Проверяйте код ответа, конечный адрес после редиректов, canonical, набор альтернатив и их взаимность. Отдельно пройдите несколько пользовательских сценариев с мобильного устройства.

Частые ошибки и их последствия

Нет ссылки на саму страницу

В группе указаны соседние языки, но отсутствует текущая версия. Набор считается неполным. Добавляйте self-reference в каждую группу.

Ответные ссылки отсутствуют

Русская страница ссылается на английскую, а английская не ссылается обратно. Такое бывает, когда версии обновляются разными командами. Нужна автоматическая проверка взаимности.

Использованы относительные URL

В href лучше указывать абсолютный адрес с протоколом и доменом. Это особенно важно для междоменных связей и снижает риск неправильной интерпретации.

Коды языка или региона выдуманы

Записи вроде uk-UK, где перепутаны язык и страна, или код города вместо региона делают тег недействительным. Проверяйте коды по стандартам и храните разрешенный список в конфигурации.

Альтернатива ведет через редирект или возвращает ошибку

Поисковику приходится проходить лишний маршрут, а иногда конечная страница уже удалена. В разметке должны быть только конечные индексируемые URL с ответом 200.

Автоматический редирект не дает выбрать язык

Жесткое перенаправление по IP или заголовкам браузера мешает роботу и человеку открыть другую версию. Лучше предложить переключение и запомнить выбор, сохранив доступ к каждому URL.

Hreflang пытаются использовать вместо перевода

Одинаковый текст на всех URL с разными кодами языка не создает локализацию. Для региональных версий на одном языке частичное совпадение нормально, но различия должны соответствовать реальным условиям рынка.

Практический пример для сайта услуг

Представим компанию, которая проводит SEO-аудит в России и Казахстане и работает с международными командами на английском. У нее есть три страницы: русская для России, русская для Казахстана и общая английская.

Российская версия показывает цены в рублях, российские контакты и условия договора. Казахстанская версия содержит тенге, местный номер и особенности документов. Английская объясняет процесс для зарубежного руководителя. Это полноценные альтернативы, потому что задача одна, но коммерческий контекст отличается.

В каждой странице размещают одинаковую группу ru-RU, ru-KZ, en и при необходимости x-default. Canonical остается самостоятельным. Переключатель языка ведет непосредственно на соответствующую услугу, а не на главную. После публикации команда проверяет исходный HTML, коды ответа и индексацию. Для контроля можно использовать подход из статьи как проверить индексацию сайта.

Если казахстанская версия услуги еще не готова, временно не включайте ее в группу. Не заменяйте ее главной страницей Казахстана: это другая сущность и другой интент. После публикации новой версии добавьте ее одновременно во все страницы группы.

Как проверять hreflang после запуска

Разовая приемка недостаточна. Страницы удаляются, URL меняются, перевод отстает, шаблоны ломаются после релиза. Нужен регулярный технический контроль.

Минимальная проверка должна отвечать на вопросы:

  • все ли URL группы доступны с кодом 200;
  • совпадает ли canonical с текущей языковой страницей;
  • есть ли ссылка на себя;
  • отвечает ли каждая альтернатива обратной ссылкой;
  • нет ли запрещенных или несуществующих кодов;
  • совпадает ли язык видимого содержания с заявленным кодом;
  • не ведут ли внутренние ссылки в другую локаль без причины;
  • не появились ли новые страницы без языковых связей.

На небольшом сайте достаточно таблицы и выборочной ручной проверки после релиза. На крупном проекте нужен краулер или собственный скрипт, который строит граф альтернатив и показывает неполные группы. Ошибку полезно привязывать не только к URL, но и к шаблону: одна неправильная настройка карточки товара может затронуть весь каталог.

Смотрите и на результат в аналитике. Сегментируйте органический трафик по языковым каталогам, странам и посадочным страницам. Если пользователи из Казахстана часто попадают на российскую версию и сразу переключаются, проверьте локальную страницу, ее индексирование, внутренние ссылки и полноту hreflang.

Чек-лист перед публикацией

  • Для каждой локальной страницы существует отдельный доступный URL.
  • Язык, валюта, контакты и условия соответствуют выбранной аудитории.
  • Составлена полная таблица эквивалентных страниц.
  • Используются допустимые коды языка и региона.
  • Каждая страница ссылается на себя и все альтернативы.
  • Все ссылки взаимны.
  • В href стоят абсолютные HTTPS-адреса без промежуточных редиректов.
  • Каждый URL отвечает 200 и разрешен для индексирования.
  • Canonical каждой версии указывает на нее саму.
  • x-default ведет на реальную универсальную страницу, если она нужна.
  • Переключатель языка открывает соответствующую страницу, а не только главную.
  • Внутренние ссылки не выбрасывают пользователя в другую локаль.
  • Sitemap и hreflang не противоречат друг другу.
  • После релиза проверены исходный HTML и публичные ответы.
  • Настроен повторный контроль после изменений CMS и структуры.

FAQ

Нужен ли hreflang для двух версий на русском языке?

Да, если версии предназначены для разных стран и реально отличаются условиями, ценами или предложением. Используйте, например, ru-RU и ru-KZ. Для одинаковых страниц без региональной пользы сначала оцените, нужны ли отдельные URL вообще.

Можно ли указать hreflang только в sitemap?

Да. XML sitemap является полноценным способом передачи языковых связей. Важно сформировать полные взаимные группы, использовать конечные URL и не допускать расхождений с canonical.

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

Да. Self-reference входит в полный набор альтернатив. На каждой странице группы перечисляются она сама и все остальные языковые или региональные версии.

Что делать, если перевода одной страницы пока нет?

Не подставляйте главную или приблизительно похожий материал. Оставьте существующие версии связанными между собой, а новую добавьте во всю группу после публикации.

Заменяет ли hreflang canonical?

Нет. Canonical решает задачу выбора основной страницы среди дублей, а hreflang связывает самостоятельные локальные версии. Обычно у каждой индексируемой версии должен быть self-canonical.

Нужно ли перенаправлять пользователя по IP?

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

Почему поисковик показывает не ту страну даже при правильной разметке?

hreflang является сигналом, а не приказом. Проверьте качество локальной страницы, язык контента, внутренние ссылки, canonical, доступность URL, обратные связи и другие региональные признаки.

Что сделать сейчас

Начните не с тегов, а с выгрузки всех локальных URL. Соберите группы эквивалентных страниц, отметьте пропуски, проверьте canonical и коды ответа. Затем внедрите один источник hreflang, проведите публичную проверку и добавьте ее в регламент каждого релиза.

Если нужна независимая проверка многоязычной структуры, напишите в Telegram Alextram. Для подготовки таблицы URL, инструкций и первичной обработки контента можно использовать нейросеть XelaGroup, но финальные языковые версии и публичные ответы должен проверить человек.