• Техническое SEO · hreflang в head

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

Настройка hreflang на сайте – это четыре согласованные между собой вещи: код языка документа, взаимные теги на каждую версию, заданный x-default и присутствие всех языковых ветвей в карте сайта. Делаем их вместе и проверяем не разметку, а фактический ответ: действительно ли по адресу, объявленному украинским, отдается украинская страница. В измеренном нами магазине с тремя версиями она отдавалась по-русски — и по украинской ссылке, и по польской.

Посмотреть, как это работает
Стоимость
после бесплатного аудита
Гарантия
30 дней после подписания акта
Что делаем
язык документа, взаимный hreflang, x-default, canonical, языковые ветви в карте сайта
после бесплатного аудита
Стоимость
30
Гарантия

дней после подписания акта

язык документа, взаимный hreflang, x-default, canonical, языковые ветви в карте сайта
Что делаем
5–15
Срок

рабочих дней — зависит от количества версий и состояния шаблонов

бесплатная проверка языковой разметки, 2–3 рабочих дня
Перед сметой
hreflang заведено дважды разными механизмами, наборы противоречат друг другу
Самый трудный случай в собственном измерении
две версии с взаимным hreflang и x-default на каталоге из 3 565 товаров.
Исправное состояние по тому же измерению
позиций в другой стране: разметка управляет выбором версии, а не местом в выдаче
Чего не обещаем
Кому подходит

Ситуации, в которых эта услуга даёт результат

Сценарий 1 из 4

Две версии одной страницы конкурируют в выдаче между собой

Симптом узнаваем: по одному запросу сегодня показывается российская страница, завтра украинская, и ни одна не держится. Для поисковика это два почти одинаковых документа без объяснения, кем они друг другу приходятся. Hreflang и есть следующее объяснение. Google в документации пишет прямо: несимметричные аннотации он игнорирует – половина правильно проделанной работы не работает вообще.

Разберём вашу ситуацию на бесплатном аудите
Кейсы

Задачи и результат в цифрах — все показатели сняты нашим замером

розничный интернет-магазин нижнего белья, каталог более 110 тыс. позиций

Задача
Разобраться, почему три языковые версии ведут себя в выдаче непредсказуемо.
Решение
Прочли языковую разметку по каждой версии и проверили, что фактически отдается по каждому объявленному адресу.
Результат
Hreflang заведен дважды двумя разными механизмами, и наборы противоречат друг другу: первый ведет на корневые адреса, второй — на языковой подкаталог. По ссылкам, отмеченным как украинское и польское, отдается российский контент. Дополнительно: на украинской версии стоит невалидный код языка, а на польском шаблоне не подставились переменные — буквально lang="code". Что там работает правильно: canonical самоссылающийся на каждой из трех версий. Каталог в момент измерения - 115 456 товарных позиций. Измерение 01.08.2026.

розничный интернет-магазин отопительного оборудования, каталог около 3,5 тыс. позиций

Задача
Держать две языковые версии каталога без взаимной конкуренции в поиске.
Решение
Две версии uk и ru со взаимным hreflang и заданным x-default, самопосылающиеся канонические ссылки.
Результат
Языковая разметка корректна на каталоге из 3 565 товаров – цифру считали штатным поиском движка. Первый ответ сервера 524,8 мс, полная загрузка 662,7 мс при 295,7 КБ разметки. Обнаруженный дефект лежит вне языковой части: /sitemap.xml отдает 200 с пустым телом, а структурированных данных на главной нет никаких. То есть корректный hreflang не спасает, если поисковику незачем обходить. Измерение 31.07.2026.

бренд натуральной косметики, фирменный магазин на рынок ЕС

Задача
Выйти на европейский рынок на трех языках так, чтобы версии не конкурировали между собой в выдаче.
Решение
Три языковые версии bg, en и ru с полным набором hreflang; структурированные данные магазина, контактов и график работы на каждой версии.
Результат
Три рабочие языковые версии с hreflang, шесть типов структурированных данных на главном, первый ответ 512,6 мс при весе разметки 220,4 КБ. Ассортимент – 23 позиции, это весь каталог бренда. Найденные дефекты снова вне языковой части: карта сайта и robots.txt отдают пустое тело, внешней аналитики на сайте нет вообще – ни одного счетчика. Измерение 31.07.2026.
Что входит

Полный перечень работ и того, что вы получаете на выходе

  • Коды языка документа приводим к стандарту на каждой версии — «ua» кодом украинского не является, правильный uk, и это заблуждение тихое: браузер его не показывает, валидатор молчит
  • Полный набор взаимных тегов hreflang: каждая версия называет все остальное и самое себя — иначе аннотация односторонняя, а односторонние Google отвергает целиком
  • Заданный x-default — вы сами решаете, что видит посетитель, чей язык не совпал ни с одним объявленным, вместо того чтобы это решал алгоритм
  • Второй, параллельный набор языковой разметки находим и убираем – именно через два механизма одновременно теги начинают противоречить друг другу
  • Самопосылочный canonical в пределах каждой версии, без перекрестных ссылок между языками: canonical из второстепенного языка на основную отменяет hreflang и исключает версию из индекса
  • Прогон фактического ответа по каждому объявленному адресу списку, а не выборке – именно здесь вылезает расхождение между тегами и тем, что отдает сервер
  • Языковые ветви в карте сайта: все в одном файле или отдельная карта на каждый язык, с директивой Sitemap в robots.txt, чтобы бот знал, где они лежат
  • Уникальные title и описание каждой версии вместо скопированных с основной — переведенный интерфейс с непереведенными метатегами дает в выдаче дубликат
  • Представление карт и разбор отчета по международному таргетингу в Search Console после внедрения
  • Документ «до и после» с датой замера: объявленный язык, фактически отданный язык, наличие в карте сайта — по каждой версии
Когда эта услуга не подходит

Что не входит в работу — чтобы не было сюрпризов на сдаче

  • Перевод контента – это отдельная работа, и машинный перевод каталога мы не рекомендуем
  • Локальные способы оплаты и доставки для нового рынка
  • Юридические тексты под законодательство другой страны
  • Обещания относительно позиций в выдаче другой страны
Этапы работы

Прозрачные этапы с согласованием на каждом шагу

Общий срок:5–15 дней

  1. Снимок речевой разметки

    1–3 рабочих дня

    Читаем код каждой версии: язык документа, наборы hreflang, canonical, метатеги. Параллельно тянем карту сайта и считаем, сколько адресов каждого языка в нем есть. Все с датой замера – это база для сравнения после работ.

  2. Решения по языкам и x-default

    1 рабочий день

    Ваше решение не наше: какие версии остаются, какая основная, что получает x-default. Здесь же отсеиваем языки, под которыми нет ни рынка, ни человека для поддержки. Изменить это можно только вместе с адресами.

  3. Правки в шаблонах

    1–5 рабочих дней

    Коды языка, полный набор взаимных тегов с x-default, самопосылающийся canonical. Второй, параллельный набор разметки, выключаем в том месте, откуда он приходит, — в теме или в модуле, а не перекрываем третьим.

  4. Карта сайта и метатеги версий

    1–3 рабочих дня

    Все языковые ветви в карте: одним файлом или отдельными картами на язык с директивой в robots.txt. Одновременно разводим title и описание на версиях, чтобы они перестали быть копиями основного языка.

  5. Прогон адресов и передача

    1–3 рабочих дня

    Берем список объявленных адресов и читаем язык фактического ответа по каждому. Приводим карты в Search Console, разбираем отчет по международному таргетингу, отдаем таблицу «до и после» теми же строками, что снимали на первом этапе.

Бесплатная проверка языковой разметки

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

Что мы измеряем

  • Атрибут языка документаКоторый стоит в html lang на каждой версии. Находили и невалидные коды языка, и не подставившиеся шаблонные переменные — буквально lang="code" на польской версии живого магазина.
  • Набор hreflangПеречислены все версии, взаимные ссылки или задан x-default. Отдельно смотрим, не заведен ли набор дважды разными механизмами: тема и модуль вместе дают прямой конфликт.
  • Что отдается по ссылкеВажнейший пункт. Берем адрес, объявленный как украинский, и читаем язык ответа. В измерении магазина белья по украинскому и польскому адресам приходил российский контент.
  • Языковые ветви в карте сайтаСколько адресов каждого языка туда попало и объявлена ​​ли карта в robots.txt. Случались карты, которые отдают 200 с пустым телом — формально ответ есть, адрес в ней ноль.
  • Метатеги на версияхИли переведены title и описание, или скопированы с основного языка. Переводимый интерфейс с непереведенными метатегами – это дубликат, а не языковая версия.
  • Канонические ссылкиЕсть ли canonical на каждой версии и ведет ли он на себя, а не на другой язык. В магазине белья canonical оказался самопосыльным на всех трех версиях – это единственное, что там работало правильно.

Что вы получаете

  • Таблица по каждой версии: объявленный язык – фактический язык ответа – наличие в карте сайта.
  • Список конфликтов с конкретными адресами, на которых они видны.
  • План исправления с разделением на то, что делается в шаблоне, и то, что в настройках CMS.
  • Разговор на 30 минут по документу, где с выводами можно спорить.

Срок: 2–3 рабочих дня

Почему это бесплатно

Ибо проверка краткая — несколько запросов и разбор кода, — а цена ошибки высока: некорректная языковая разметка делит ваш собственный трафик между версиями, и это стоит дороже любого аудита.

Что дальше

После проверки называем список работ и срок по этапам. Если языковая разметка исправна, а проблема в другом скажем прямо и покажем, где именно смотреть.

Короткая форма: контакт и адрес сайта

  • Договор, акт и гарантия 30 дней

    На каждый проект письменный договор: объём, сроки, сумма, порядок приёмки. После сдачи — акт и счёт, затем 30 календарных дней гарантии.

  • ФОП и безналичный расчёт

    Исполнитель — зарегистрированный ФОП. Оплата на счёт с закрывающими документами.

  • Права и доступы — ваши

    Код, дизайн и материалы переходят к вам после полной оплаты. Домен, хостинг, репозиторий оформляем на вас.

  • Портал клиента вместо переписки

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

  • Заказчики из Европы

    Среди работ — проекты для Норвегии, Болгарии, Молдовы и Испании.

  • Цифры, которые можно проверить

    Каждый кейс в портфолио — со ссылкой на живой сайт и техническим замером.

  • Сначала аудит, потом сумма

    Прайса на сайте нет намеренно: объём одной и той же работы у двух клиентов отличается кратно.

  • Говорим «нет», когда не уверены

    Если задача не наша или срок нереальный — скажем сразу.

Не нашли свой случай?

Опишите, как это устроено у вас, — ответим, подходит ли «Настройка hreflang и языковых версий» и что это значит в вашей ситуации. Без брифа и без звонка: один вопрос, один ответ.

Что влияет на стоимость

Почему две одинаковые на вид задачи считаются по-разному

  • Сколько мест в коде заводят языковую разметкуГлавный множитель, и его никогда не видать из описания задачи. Один сайт отдает теги из шаблона темы, второй — из модуля, третий — из обоих одновременно, и тогда сначала нужно понять, какой набор оставить, а какой выключить, не сломав переключатель для людей.
  • Количество версий и то, все ли они нужныКоличество пар растет быстрее, чем количество языков: три версии — это уже девять взаимных ссылок, которые нужно сверить поштучно. Иногда более дешевый ответ — убрать версию, которую никто не поддерживает.
  • Где живут версииПодкаталог одного адреса – самый простой случай, все правится в одном шаблоне. Поддомены и отдельные домены добавляют подтверждение прав в Search Console на каждый ресурс: взаимные тэги невозможно поставить с одной стороны.
  • Состояние карты сайтаКарта, в которой есть все ветви, – это ноль дополнительных работ. Карта, отдающая пустое тело или содержащая один из двух языков, означает, что ее надо перегенерировать и объявить в robots.txt, а это уже соседний объем работ.
  • Метатеги на второстепенных версияхЕсли title и описание скопированы с основного языка, разметка сама по себе проблему не закроет: версии останутся одинаковыми в выдаче. Объем считается количеством шаблонов и категорий, которые нужно развести, а не количеством языков.
  • Кто вводит правкиДоступ к шаблонам у нас работаем сами. Правки вносит ваша команда – готовим точные фрагменты и проверяем результат; это не сложнее технически, но длиннее календарно.
Технологии и интеграции

На чём строим и с чем это соединяется

Стек

  • hreflang в head – основной способ, правящийся в шаблоне. Граница: односторонние аннотации Google исключает полностью
  • hreflang на карте сайта — когда лезть в шаблон дорого. Предел: карта должна генерироваться автоматически, руками такой файл не держат
  • x-default — управляет выбором для тех, чей язык не совпал. Предел: это подсказка, а не перенаправление
  • html lang с кодами ISO 639-1. Предел: «ua» кодом не является, правильный uk, и браузер об этом не предупредит
  • rel=canonical самопосылочный. Граница: canonical между языками отменяет весь hreflang одной строкой
  • Search Console, отчет по международному таргетингу. Предел: данные с задержкой, права на ресурс подтверждает владелец домена
  • Мультиязык OpenCart, WPML и Polylang. Тема часто добавляет свой набор поверх модульного — отсюда двойные наборы.
  • Языковые маршруты nginx. Предел: редирект за геолокацией скрывает часть версий от бота, входящего из одной страны

Интеграции

  • Google Search Console
  • Bing Webmaster Tools
  • GA4
  • Cloudflare
Hreflang в head против hreflang в карте сайта

Чем этот вариант отличается от альтернативы

Где правитсяв шаблоне страницы — требуется доступ к коду темы
Сколько весит страницакаждая версия добавляет строку в head каждой страницы
Как ломаетсятихо: тема и модуль дают два набора, противоречащих друг другу
Сколько версий выдерживаетдо трех-четырех читается нормально, далее head распухает
Как проверятьпоштучно по страницам — видно сразу в коде
Что нужно от вас

Без этого не начнём — лучше подготовить заранее

  1. Список языков и рынков, на которые вы реально работаете, не «да будет», а куда продаете.
  2. Доступ к шаблонам: языковая разметка живет в коде страницы, из админки ее больше не видно.
  3. Доступ к Search Console на каждую версию, если они на разных доменах или поддоменах.
  4. Решение, какая версия является основной для посетителя без определенного языка – это и есть x-default.
  5. Человека с вашей стороны, который скажет да по перечню языков: технически это решение не принимается.
  6. Переведены title и описание для второстепенных версий, если их сейчас нет, тексты ваши, расстановка наша.

Если чего-то из этого нет — скажите, подскажем, как собрать или сделаем сами отдельной задачей.

Частые вопросы

Что спрашивают чаще всего — с конкретными ответами

Зачем hreflang, если у меня просто две версии с переключателем?

Переключатель – для человека. Hreflang – для поисковой системы: он говорит, что эти две страницы не дубликаты, а версии одного контента, и какую кому показывать. Без этого две версии конкурируют между собой в той же выдаче, и поисковик выбирает сам. Еще один нюанс, из-за которого половина настроек не работает: инструкция должна быть взаимной. Если украинская страница называет русскую, а украинская не называет — Google такую ​​пару отвергает и остается при своем выборе.

Что такое x-default и обязателен ли он?

Это версия по умолчанию для посетителя, чья речь не совпала ни с одной объявленной. Формально не обязателен, практически нужен, если вы хотите управлять этим выбором сами, а не отдавать его алгоритму. В измеренном нами магазине отопительного оборудования x-default задан, и языковая пара там единственная вещь, к которой не было претензий. Важно понимать предел: x-default – это подсказка о том, какую версию показывать, а не перенаправление. Он никого никуда не переносит.

Как понять, что hreflang сломан?

Самое надежное — открыть адрес, объявленный как украинский, и посмотреть, на каком языке пришел ответ. Разметка может быть валидной и при этом лгать. В магазине нижнего белья мы нашли ровно это: hreflang заведен дважды разными механизмами, первый набор ведет на корневые адреса, второй — на языковой подкаталог, а по ссылкам, отмеченным как украинское и польское, отдается российский контент. Ни один валидатор такого не показывает, потому что синтаксически оба набора правильны.

У нас в коде стоит lang="ua" - это ошибка?

Да. Кода языка «ua» не существует: украинский – это uk, а ua – код страны в другом стандарте. Ошибка тихая, страница открывается нормально, никто ничего не подчеркивает красным. В том же магазине белья украинская версия отдавала именно lang="ua", а польская — lang="code", то есть в шаблон просто не подставилась переменная. Поэтому язык документа мы сверяем на каждой версии отдельно, а не смотрим одну страницу и считаем, что остальные такие же.

Языковые версии обязательно должны быть на карте сайта?

Должны попадать все, иначе второй язык существует для посетителя и не существует для бота. Только не ждите от карты сайта большего, чем она дает: Google документирует ее как способ найти страницы, а не как обещание их проиндексировать. И проверять ее нужно не по факту наличия адреса. В магазине отопительного оборудования карта отдает HTTP 200 — выглядит исправной, а тело ответа пустое: ноль адресов на обоих языках.

Переводить нужно весь сайт или достаточно интерфейса?

Перевод интерфейса без перевода метатегов дает дубликат, а не языковую версию: в выдаче стоит то же название страницы и то же описание. Минимум, который должен быть переведен на каждой версии, — title, описание, название страницы, названия категорий и служебные страницы об оплате, доставке и возврате. Карточки товара можно заливать очередями. Машинный перевод каталога мы не рекомендуем: покупатель видит это в первую секунду, а поисковик — не с первой, но видит.

Сколько языков имеет смысл держать?

Столько, сколько рынков вы обслуживаете по-настоящему – с оплатой, доставкой и поддержкой на этом языке. Сайт закрывает только витрину, и это не фигура речи: в фирменном магазине болгарского бренда косметики три версии, bg, en и ru, с корректной разметкой – и за каждой стоит реальный рынок. Каждая излишняя версия умножает объем контента, который кто-либо должен поддерживать при каждом новом товаре. Поэтому на первом этапе мы чаще предлагаем убрать язык, чем прибавить.

После исправления разметки трафик вырастет?

Прямо нет, и обещать такое было бы нечестно. Исправление делает другое: ваши собственные страницы перестают конкурировать между собой, и поисковик показывает ту версию, которую вы для этого посетителя назначили. Прироста с нового рынка из этого не следует — ему нужен контент, спрос и местные условия продажи. Что появится наверняка: управляемость и возможность проверить. Объявленный язык, фактически отданный язык и наличие в карте сайта — три цифры, которые мы снимаем до работ и после них, а дальше реакция видна в вашей Search Console с задержкой в ​​несколько дней.

Отправьте адрес сайта и перечень языков, которые на нем объявлены.

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

Из измеренных кейсовЯзыковая разметка корректна на каталоге из 3 565 товаров

Смотреть кейсы
  • Ответ в течение 2 часов
  • Без обязательств
  • Работаем по договору

Прайса на сайте нет намеренно: объём той же работы у двух клиентов отличается в разы, и цифра «от» в этом случае ничего не объясняет. Сначала бесплатный аудит — считаем ваши страницы, дубли и скорость, — потом называем сумму и срок и фиксируем их в договоре.