ax.SEO
🐱 🦊 🐼 🦝 🐰 🦉
Кто сегодня с нами? 🐾

Животные меняются при загрузке страницы

Главная / Блог / Полный гид по настройке hreflang для интернет‑магазинов: как избежать дубликации

Полный гид по настройке hreflang для интернет‑магазинов: как избежать дубликации

Практический план настройки hreflang для интернет‑магазинов: от выбора URL‑стратегии до проверки синхронности в head и sitemap.
🐱
Читать проще с подсказками

Карточки, чек-листы, таблицы и примеры помогают быстро найти нужный ответ.

✅ чек-листы 📈 SEO-практика ⚡ быстро

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

Ниже представлен практический план, который поможет правильно внедрить hreflang, проверить его работу и избежать распространённых ошибок.

Что такое hreflang и зачем он нужен

Тег hreflang сообщает поисковым системам, какие версии страницы предназначены для каких языков и регионов. Он реализуется как rel="alternate" hreflang="…" в <link> или в заголовке HTTP. Значение hreflang может включать ISO‑639‑1 (язык) и ISO‑3166‑1 (страна) либо только язык, например ru-RU или en. Если страница доступна без регионального ограничения, указывается x‑default. Такой механизм устраняет дублирование контента, повышает релевантность выдачи и повышает CTR.

Сценарии использования:

  • Многоязычные магазины, где один товар имеет разные языковые версии.
  • Региональные сайты, где в разных странах продаются различные модели.
  • Контент‑платформы с публикациями на нескольких языках.
  • Площадки с ценовыми различиями по странам.
  • Пользовательский контент, где авторы публикуют статьи в разных локализациях.

Подготовка сайта: структура URL и локализация контента

Перед тем как внедрять hreflang, определите, как будет выглядеть структура URL‑адресов. Вы можете использовать один из трёх подходов: корневой домен с языковыми параметрами, поддомены (например, de.example.com) или вложенные папки (example.com/de/). Каждый вариант имеет свои особенности: корневой домен проще для управления, поддомены дают явный раздел, папки удобны для совместного хостинга и SEO‑согласованности. Выберите тот, который соответствует бизнес‑логике и техническим возможностям, но убедитесь, что выбранный формат применён последовательно на всех страницах.

После выбора URL‑стратегии проверьте существующую локализацию. Убедитесь, что каждая версия страницы действительно доступна, содержит корректный <html lang="…"> атрибут, мета‑тег Content-Language и, при необходимости, canonical‑тег, указывающий на оригинал. Проверьте, что сервер не перенаправляет случайно запросы между языками, а обрабатывает их как отдельные ресурсы. Используйте инструменты вроде Google Search Console, hreflang checker и простые curl‑запросы, чтобы убедиться, что каждый URL возвращает правильный код состояния и заголовки. Кроме того, проверьте, что в CMS нет дублирования контента, а все языковые версии связаны в единой структуре, чтобы избежать конфликтов.

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

  • Определить стратегию URL (корневой домен, поддомен, папка).
  • Составить карту языковых кодов и соответствующих путей.
  • Проверить наличие каждой языковой версии страницы.
  • Убедиться в корректности lang, Content-Language и canonical‑тегов.
  • Проверить отсутствие автоматических редиректов между языками.
  • Сделать тестовый запрос к каждой версии через curl и проанализировать заголовки.
  • Обеспечить доступ к CMS, серверу и репозиторию кода.
  • Настроить отдельную тестовую среду для проверки изменений.
  • Подключить аналитику к каждому языковому сегменту.
  • Создать резервную копию сайта перед внесением изменений.

Формирование атрибутов hreflang: выбор кода языка и региона

  1. Определите язык страницы: используйте ISO 639‑1 (двухбуквенный код). Примеры – en, ru, de.
  2. Определите регион, если он релевантен: применяйте ISO 3166‑1 alpha‑2 (двухбуквенный код страны). Примеры – US, RU, DE.
  3. Сформируйте атрибут hreflang:
    • Если регион важен – en-US, ru-RU, de-DE.
    • Если регион не важен – просто en, ru, de.
  4. Добавьте в <head> ссылку для каждой локализации:
    <link rel="alternate" hreflang="en-US" href="https://example.com/en-us/product/123" />
    <link rel="alternate" hreflang="ru" href="https://example.com/ru/product/123" />
    <link rel="alternate" hreflang="x-default" href="https://example.com/product/123" />
  5. Проверьте результат:
    • Откройте исходный код страницы и убедитесь, что все link rel="alternate" присутствуют.
    • В Google Search Console перейдите в раздел «International Targeting» → «Hreflang» и посмотрите статус.
    • Используйте инструмент hreflang testing tool (поставьте URL и проверьте, как Google видит локализации).

Размещение разметки: head, rel=alternate и sitemap

В каждой языковой версии страницы размещаем rel="alternate" в <head>, а в sitemap.xml<xhtml:link>. Это гарантирует, что поисковики увидят взаимосвязь между версиями и не будут считать их дубликатами. Синхронность проверяется, сравнивая наборы hreflang в head и в sitemap; любые расхождения указывают на ошибку в конфигурации.

# --- head ---
<head>
  <link rel="alternate" hreflang="ru" href="https://example.com/ru/product/123" />
  <link rel="alternate" hreflang="en" href="https://example.com/en/product/123" />
  <link rel="alternate" hreflang="x-default" href="https://example.com/product/123" />
</head>

# --- sitemap.xml ---
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.com/product/123</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/ru/product/123"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/product/123"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/product/123"/>
  </url>
</urlset>

# --- проверка синхронности (пример на Python) ---
import xml.etree.ElementTree as ET

def get_hreflangs_from_head(html):
    # парсим html и возвращаем set([('ru', 'url'), ...])
    pass

def get_hreflangs_from_sitemap(xml):
    # парсим sitemap.xml и возвращаем аналогичный набор
    pass

head_set = get_hreflangs_from_head('page.html')
sitemap_set = get_hreflangs_from_sitemap('sitemap.xml')
assert head_set == sitemap_set, "Различия в hreflang между head и sitemap"

Чек‑лист проверки работоспособности hreflang

  • В Search Console откройте «International Targeting» → «Hreflang» и проверьте наличие ошибок «Invalid href» или «Duplicate hreflang».
  • В Yandex Webmaster перейдите в «Indexation» → «International» → «Hreflang» и убедитесь, что все страницы имеют корректный набор тегов без конфликтов.
  • Откройте страницу в браузере, нажмите Ctrl+U, найдите <link rel="alternate" hreflang="…"> и проверьте, что href содержит правильный URL, а hreflang соответствует ISO 639‑1 и ISO 3166‑1.
  • Убедитесь, что для каждой локали присутствует тег x‑default либо отдельный тег для каждой страны/языка.
  • Проверьте, что в коде нет дублирующих тегов для одной и той же локали.
  • Проверьте, что canonical‑тег не конфликтует с hreflang (canonical указывает на основную версию, hreflang – на локальные).
  • Убедитесь, что все hreflang‑URL доступны без ошибок 404 и возвращают корректный контент.

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

  • Неправильные коды hreflang
    • Проблема: неверный ISO‑код региона (например, “en‑GB” вместо “en‑US”) или смешение языков и регионов (“ru‑RU” вместо “ru‑BY”).
    • Последствия: поисковый бот игнорирует тег, страница становится «сиротой», контент дублируется, теряется локальная релевантность, снижается CTR.
    • Как избежать: хранить список допустимых кодов в конфигурации, использовать валидатор hreflang (Google Search Console → International Targeting → Hreflang), проверять каждый код при генерации страниц, не допускать ручных ошибок при ручной вставке.
  • Отсутствие self‑reference
    • Проблема: в группе hreflang не указана ссылка на саму страницу (например, только en‑US и ru‑RU, но нет ru‑RU self‑reference).
    • Последствия: бот не может однозначно определить «родитель» версии, возникает конфликт, возможна дубликация контента и потеря индексации нужной локальной версии.
    • Как избежать: всегда добавлять тег rel="alternate" с hreflang, равным текущему языку/региону, даже если это та же страница. Проверять в Google Search Console, что каждая страница имеет self‑reference.
  • Проблемы с canonical
    • Проблема: canonical указывает на страницу другого языка или на общий домен (например, canonical="/product/123" вместо canonical="/ru/product/123").
    • Последствия: canonical переопределяет hreflang, поисковик индексирует неверную версию, теряется локальный контент, снижается видимость в региональных поисках.
    • Как избежать: если страница мультиязычная, не ставьте canonical, либо указывайте canonical только внутри той же языковой версии. При использовании канонических ссылок проверять, что они совпадают с hreflang и не указывают на другую локаль. Тестировать через инструмент Google Search Console → URL Inspection → Проверить индексацию.

Мониторинг после запуска: индексация, позиции и конверсии

После запуска hreflang важно не просто проверить корректность разметки, но и держать в фокусе динамику индексации и поведения пользователей. Для этого создайте единый мониторинг, где будут собраны позиции по каждому языковому сегменту, кликабельность в результатах поиска (CTR), показатели конверсии и состояние sitemap. Сегментируйте данные в Google Search Console по языковым кодам, в Google Analytics – по «Audience > Geo > Language» и в Data Studio – по «Search Console > Performance» с фильтром «Country» и «Language». Регулярно проверяйте вкладку «Coverage» на наличие ошибок hreflang и дублирования, а также убедитесь, что все URL находятся в sitemap и помечены правильным .

  • Собрать позиции по каждому языковому URL в GSC (Search Console API) и сравнить с предыдущим периодом.
  • Отслеживать CTR по языковым сегментам в Search Console и в GA – выявлять падения, связанные с изменением контента.
  • Проверять конверсию в GA по «Language» и «Country» – убедиться, что локализация не снижает коэффициент конверсии.
  • Периодически валидировать sitemap через GSC → Sitemaps → Validation, чтобы новые страницы индексировались.
  • Контролировать ошибки hreflang в разделе Coverage → Hreflang errors – устранять «Wrong language» и «Missing hreflang».
  • Отслеживать Core Web Vitals по языковым сегментам – PWA может влиять на скорость, но не заменяет контент.

Риски и способы их минимизации

Неверные hreflang заставляют поисковикам показывать не ту локализацию, что приводит к потере целевого трафика. Если Google рассматривает страницу как дублирующую, индексирует только одну версию, а остальные игнорируются. Это критично для магазинов, где каждая локализация должна иметь собственный товарный набор. Ошибки в коде hreflang (неверные коды ISO, отсутствие hreflang‑x‑default, неправильные ссылки) вызывают «сплит» аудитории, снижая CTR и конверсии.

Проблемы с дублями возникают, когда hreflang‑теги конфликтуют с canonical‑тегами. Если у страницы есть canonical, указывающий на одну версию, но hreflang‑теги указывают на другие, поисковик не может определить, какая версия оригинальная. Это приводит к дублированию контента и штрафам за «duplicate content». Для избежания нужно использовать canonical только на «master» странице, а в остальных версиях указывать rel=canonical на свою локализованную версию.

Кэширование в PWA может стать источником ошибок. Service Worker хранит копии страниц, и если hreflang‑теги меняются, кэш может отдавать старую версию, не соответствующую выбранному языку. Это ломает пользовательский опыт, приводит к «неправильному» отображению контента и снижает показатель Core Web Vitals. Чтобы контролировать, добавьте в fetch‑handler проверку Accept‑Language заголовка и обновляйте кэш при смене hreflang. Также используйте стратегию stale‑while‑revalidate, чтобы всегда отдавать актуальный контент.

Риски, связанные с UX: неверный hreflang заставляет пользователя видеть страницу на другом языке, что вызывает фрустрацию и повышает показатель отказов. Технические риски: неправильные коды ISO приводят к тому, что поисковик не распознает язык, а кэш‑проблемы ломают индексацию. Для снижения рисков:

  • Проводите аудит тегов после каждой миграции;
  • Синхронизируйте hreflang и canonical;
  • Настройте Service Worker на проверку заголовков;
  • Используйте инструменты Google Search Console для проверки hreflang‑конфликтов.

Вопросы и ответы

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

Проверьте в исходном коде каждой страницы наличие атрибутов rel='alternate', hreflang='...' и href='...'. Убедитесь, что код языка и региона соответствует ISO‑639‑1 и ISO‑3166‑1. В Google Search Console откройте вкладку hreflang‑errors – отсутствие ошибок подтверждает правильную работу.

Что делать, если поисковая система не индексирует региональные версии?

Проверьте, не блокируется ли региональная страница в robots.txt или meta‑robots. Убедитесь, что hreflang‑ссылки ведут на существующие URL, а canonical не указывает на главную. Если всё в порядке, отправьте запрос на индексацию в Search Console. При отсутствии индексации рассмотрите изменение структуры URL.

Как выбрать правильный код языка и региона для hreflang?

Используйте ISO‑639‑1 для языка (en, ru) и ISO‑3166‑1 для региона (US, RU). Если страница предназначена для всех стран, укажите только язык (en). Для региональных вариантов указывайте комбинацию языка и региона (en‑US). Не используйте сокращения вроде en‑GB без проверки.

Как избежать конфликтов между hreflang и canonical?

Canonical должен указывать на саму страницу, а не на альтернативную версию. В hreflang‑ссылках указывайте только альтернативные URL. Если страница имеет уникальный контент, не ставьте canonical на другую страницу. Проверяйте в Search Console наличие конфликтов canonical‑hreflang.

Как проверить наличие ошибок в hreflang с помощью инструментов?

В Google Search Console откройте раздел Coverage → Hreflang errors. В Bing Webmaster Tools – Hreflang diagnostics. Также можно использовать сторонний валидатор, вводя URL и получая список ошибок, например, отсутствие hreflang‑атрибутов, неверный код языка или дублирующие ссылки.

Как обновлять hreflang при изменении структуры сайта?

При изменении URL обновите все hreflang‑ссылки на старых страницах, чтобы они указывали на новые адреса. Пересмотрите атрибуты rel='alternate' и убедитесь, что они находятся в каждой версии. После обновления отправьте sitemap в Search Console для ускорения индексации.

Как реализовать hreflang для страниц без контента (например, 404)?

Если страница не содержит контента, не добавляйте hreflang. Для 404 используйте canonical на главную страницу и не указывайте hreflang. Если страница служит как fallback для региона, создайте отдельный URL с контентом и примените hreflang.

Как использовать hreflang в динамических URL с параметрами?

Включите hreflang в базовый URL без параметров, а в атрибуте href указывайте полный URL с параметрами. Убедитесь, что все варианты (en, ru, en‑US, ru‑RU) присутствуют. Если параметры влияют на контент, создайте отдельные страницы и примените hreflang к ним.

Как проверить, что hreflang не приводит к каноническим конфликтам?

Сравните атрибуты canonical и hreflang в исходном коде. Canonical не должен ссылаться на страницу, указанную в hreflang как альтернативу. Если конфликт обнаружен, исправьте canonical на саму страницу и обновите sitemap.

Как реализовать hreflang для товаров с разными ценами в разных странах?

Создайте отдельные URL для каждой страны, где указана цена. В каждом товаре добавьте hreflang‑ссылки на все версии. Укажите canonical на страницу, которая содержит общую информацию, а не на конкретную ценовую версию. Это позволит поисковикам выбирать правильную страницу для региона.

Важно

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

Редакционная проверка

Материал подготовлен и проверен редакцией AX.SEO

Проверено
AX
Автор Редакция AX.SEO
Digital-редактор 7 лет опыта

Редакция AX.SEO готовит материалы о SEO, разработке, AI, аналитике, маркетинге и росте digital-проектов.

Проверил Александр SEO
SEO-специалист 10 лет опыта

Проверяет практическую применимость рекомендаций, корректность терминов и соответствие материала digital-тематике.

AX.SEO объясняет digital простым языком: без магии, пустых обещаний и “секретных кнопок роста”.