Если у тебя один и тот же контент на .by, .ru и .kz — Google рассматривает три сайта как дубли. Итог: одна страна ранжируется, две — в игноре. Решение — hreflang: он говорит Google, что каждая версия предназначена своему региону. Правила: всегда указывай себя тоже (self-reference), взаимность обязательна (если А ссылается на Б, Б обязана ссылаться на А), x-default для неопределённого региона, только абсолютные URL, язык-регион в ISO-кодах (ru-BY, ru-RU, ru-KZ, kk-KZ, be-BY). Яндекс hreflang не читает — использует Вебмастер → Регионы. Ниже — пошаговая настройка, три способа размещения, типовые косяки и чек-лист проверки.
Ситуация типовая: бизнес обслуживает Беларусь, Россию и Казахстан. Сделали один сайт — трафик приходит только из одной страны. Или сделали три сайта на .by/.ru/.kz — Google в SERP показывает только один, остальные две ниши болтаются на 30-й позиции. Причина одинаковая: не настроен hreflang, и Google не понимает, какую версию кому показывать.
Дальше — практика: где размещать, какие коды использовать, где я и не только я ломал сайты, и как проверять. Без «допустим», «в теории», «обычно рекомендуется». Только рабочие приёмы.
Зачем hreflang вообще нужен
Google определяет региональность страницы по нескольким сигналам: доменной зоне (.by → Беларусь), гео-серверу, языку контента, ссылкам с региональных сайтов, настройкам Search Console. Если сигналы противоречивы или контент дублируется — Google не знает, кому показывать какую версию, и часто выбирает одну на всех.
hreflang — это способ сказать: «эта страница для белорусов на русском, вот здесь то же самое для россиян, вот здесь для казахов». Google получает чёткую матрицу и показывает нужную версию нужной аудитории.
Что даёт правильно настроенный hreflang:
- Убирает каннибализацию — три версии перестают конкурировать друг с другом в выдаче.
- Правильная валюта, телефон, ассортимент — Google показывает пользователю ту версию, которая ему релевантна.
- Плюс к CTR — пользователь из РФ не кликает по
site.byс телефоном +375, ему релевантнееsite.ruс +7. В выдаче начинают чаще показываться корректные версии. - Улучшает индексацию — Google не считает страницы дублями, каждая версия попадает в индекс своего региона.
Если hreflang не настроен, тебя ждёт один из трёх сценариев: (а) в SERP по всем регионам болтается одна версия, две тонут, (б) Google рандомно перебирает версии — сегодня видна одна, завтра другая, CTR прыгает, (в) все три версии режутся как дубли, canonical схлопывается в одну.
Основы: синтаксис и коды
Базовый тег в HTML-head:
<link rel="alternate" hreflang="ru-BY" href="https://example.by/page/">
<link rel="alternate" hreflang="ru-RU" href="https://example.ru/page/">
<link rel="alternate" hreflang="ru-KZ" href="https://example.kz/page/">
<link rel="alternate" hreflang="kk-KZ" href="https://example.kz/kk/page/">
<link rel="alternate" hreflang="be-BY" href="https://example.by/be/page/">
<link rel="alternate" hreflang="x-default" href="https://example.com/page/">Ключевое:
- Формат кода:
язык-РЕГИОН. Язык — ISO 639-1 (маленькие буквы), регион — ISO 3166-1 alpha-2 (большие). Можно без региона, только язык (ru), тогда — на всех русскоязычных. - Абсолютные URL. Не
/page/, аhttps://example.by/page/. Относительные — не работают. - Self-reference обязательна. Страница
example.by/page/должна ссылаться и на себяhreflang="ru-BY". Не забудь. - Взаимность обязательна. Если
.byссылается на.ru, то.ruдолжна ссылаться обратно на.by. Google Search Console выкидывает односторонние — они не учитываются. - x-default — версия для пользователей, чей регион/язык не совпал ни с одним из указанных. Обычно — общая, англоязычная или та, что «по умолчанию». Если сайта такого нет — можно на .com или на самую нейтральную версию.
Правильные коды для .by/.ru/.kz
Здесь ломается 90% специалистов, потому что не разбираются, чем язык отличается от региона. Разберёмся раз и навсегда.
| Регион и язык | Правильный hreflang | Что означает |
|---|---|---|
| Беларусь, русский контент | ru-BY |
Русский язык для белорусов |
| Беларусь, белорусский | be-BY |
Белорусский язык для белорусов |
| Россия, русский | ru-RU |
Русский для россиян |
| Казахстан, русский | ru-KZ |
Русский для казахстанцев |
| Казахстан, казахский | kk-KZ |
Казахский для казахстанцев |
| Универсальный русский | ru |
Русский язык, регион не важен |
Типовой косяк №1: писать by вместо ru-BY. by — это не язык, а страна, и Google это не читает как валидный hreflang. Он проигнорирует такой тег молча, никаких ошибок в GSC. Проверяй.
Типовой косяк №2: писать ru-BY, но подсунуть страницу на белорусском. Google смотрит фактический язык страницы и, если он не совпадает с указанным, снижает вес тега вплоть до игнорирования.
Типовой косяк №3: использовать несуществующие коды типа ua-RU (нет такого) или kz-KZ (казахский — kk, не kz). kz — это домен, а не язык.
be-BY. Не путай Google. Ставь только ru-BY. Белорусский код нужен, только если реально есть страница /be/page/ с контентом на белорусском.
Три способа размещения hreflang
Google понимает три места, где можно указать hreflang. Выбираешь одно из трёх — не мешай их между собой на одной странице.
1. HTML <head> — самый частый способ
Кладёшь теги <link rel="alternate" hreflang="..." href="..."> в head каждой страницы сайта. Плюс — просто внедряется. Минус — растёт вес каждой страницы (для сайта с 10 регионами это +10 линков на каждой странице).
Подходит для: небольших сайтов до 500 страниц, если ты правишь шаблон и добавляешь hreflang программно (через CMS/шаблонизатор).
2. HTTP-заголовок — для не-HTML файлов
Если у тебя PDF, изображения или другие не-HTML документы, которым нужен hreflang, — размещаешь в HTTP-заголовке ответа:
Link: <https://example.by/doc.pdf>; rel="alternate"; hreflang="ru-BY",
<https://example.ru/doc.pdf>; rel="alternate"; hreflang="ru-RU"Подходит для: PDF-каталогов, документов, редких случаев. Для HTML — не используй, есть проще.
3. XML Sitemap — лучший способ для больших сайтов
Указываешь hreflang прямо в sitemap.xml через тег xhtml:link. Пример:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.by/page/</loc>
<xhtml:link rel="alternate" hreflang="ru-BY" href="https://example.by/page/"/>
<xhtml:link rel="alternate" hreflang="ru-RU" href="https://example.ru/page/"/>
<xhtml:link rel="alternate" hreflang="ru-KZ" href="https://example.kz/page/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.by/page/"/>
</url>
</urlset>Плюсы: (а) не грузит HTML-код каждой страницы, (б) проще управлять централизованно, (в) при добавлении нового региона правишь только sitemap. Google эту схему поддерживает официально и рекомендует для больших сайтов.
Минус — Яндекс sitemap-hreflang читает хуже, чем HTML-теги. Но с Яндексом всё равно отдельная история — см. ниже.
Мой выбор для проектов на .by/.ru/.kz с 3+ регионами и 500+ страниц: sitemap. Меньше 500 страниц — HTML-теги. Смешивать нельзя — Google в случае конфликта выбирает наименее строгий вариант.
Полный пример для .by/.ru/.kz-сайта
Допустим, у тебя site.by (для РБ), site.ru (для РФ), site.kz (для КЗ, весь на русском). Все три — с одинаковой структурой URL. Страница услуги — /uslugi/seo/.
На всех трёх страницах в HTML-head:
<link rel="alternate" hreflang="ru-BY" href="https://site.by/uslugi/seo/">
<link rel="alternate" hreflang="ru-RU" href="https://site.ru/uslugi/seo/">
<link rel="alternate" hreflang="ru-KZ" href="https://site.kz/uslugi/seo/">
<link rel="alternate" hreflang="x-default" href="https://site.ru/uslugi/seo/">x-default здесь ведёт на .ru как на самую большую по трафику версию — если Google не поймёт, кому показать, покажет её. Если у тебя есть .com с международной версией — x-default на неё.
Обрати внимание: тег для ru-BY есть на всех трёх страницах, не только на .by. То же для .ru и .kz. Это и есть self-reference + взаимность.
А что с Яндексом
Яндекс hreflang официально не читает. У него своя система определения региональности:
- Регион в Вебмастере. Идёшь в Яндекс.Вебмастер → «Настройки» → «Регион сайта». Выставляешь основной регион (например, «Минск» или «Беларусь»).
- Яндекс.Бизнес. Регистрируешь организацию, указываешь адрес — это привязывает сайт к региону.
- Гео-модификаторы в контенте. «SEO-продвижение в Минске», «доставка по Беларуси», адрес в футере, телефон +375.
Для трёх сайтов на .by/.ru/.kz настраиваешь регион для каждого отдельно в его Вебмастере. Всё. Hreflang Яндекс не использует, но и не мешает — можно смело оставлять теги, они там лежат для Google.
Ещё один момент: Яндекс не работает в РБ как основной поисковик у молодой аудитории — у неё Google. Но у более взрослой (35+) и корпоративной аудитории в РБ Яндекс держит долю ~25–35%. В РФ Яндекс — 62–66% рынка (сентябрь 2026), Google — 26–30%. В КЗ Google — 87%, Яндекс — 8%. Отсюда — тебе не нужен «либо-либо». Оба и по-разному в разных регионах.
Как проверить, что hreflang работает
1. Google Search Console → International Targeting
Идёшь: GSC → Legacy tools and reports → International Targeting (иногда называется «Международный таргетинг»). Смотришь вкладку «Language». Там показываются:
- Все hreflang-теги, которые Google увидел.
- Ошибки: «no return tags» (не взаимные), «unknown language code» (неверный код), «no self-referencing tag».
Если тегов Google не видит вообще — значит либо ты положил их не туда (например, в <body> вместо <head>), либо неправильно синтаксис. Правь по подсказкам GSC.
2. Screaming Frog SEO Spider
Прогоняешь сайт (или список URL) через Screaming Frog. Вкладка «Hreflang» → «Errors». Показывает:
- Отсутствующие ответные ссылки (return tags).
- Битые URL в hreflang.
- Отсутствие self-reference.
- Дубли и конфликты.
Инструмент разовый — прогнал перед публикацией, поправил, и живёшь.
3. Merkle / Aleyda Solis Hreflang Tags Testing Tool
Онлайн-инструмент — вставляешь URL, показывает hreflang-теги на странице, проверяет взаимность. Бесплатно, быстро, для точечных проверок незаменимо. Гугли «hreflang tags testing tool».
4. curl / DevTools
Самая честная проверка. Открываешь curl:
curl -s https://example.by/page/ | grep -i hreflangИли в браузере: F12 → Elements → Ctrl+F → «hreflang». Видишь, что реально лежит в HTML, что видит Googlebot.
Типовые косяки, из-за которых hreflang не работает
1. Разный URL-структура между регионами
На .by страница называется /uslugi/seo/, на .ru — /services/seo/, на .kz — /seo-service/. Формально работать будет, но: (а) ты запутаешься при поддержке, (б) при переезде/редизайне отвалится половина связей, (в) canonical будет рандомно указывать не туда.
Правило: URL структура одинаковая на всех региональных версиях. Отличается только домен и, если языков несколько, префикс /be/, /kk/.
2. Битая взаимность
.by ссылается на .ru через hreflang, а .ru на .by — нет. Google в этом случае игнорирует обе ссылки. GSC → International Targeting будет орать «no return tags».
Причина: чаще всего страницу на одном сайте добавили/переименовали, а на другом забыли обновить. Проверяй раз в квартал.
3. hreflang на несуществующие страницы
Страница site.by/uslugi/seo/ ссылается через hreflang на site.kz/uslugi/seo/, а на .kz такой страницы нет — 404. Google игнорирует всю группу тегов. Проверяй, что все URL в hreflang возвращают 200 OK.
4. hreflang на страницы с noindex
Если страница на .ru закрыта meta robots noindex, а .by ссылается на неё через hreflang — Google выкидывает связь. Логично: он не может показать в выдаче страницу, которую ты сам запретил индексировать. Проверь, что все URL из hreflang открыты для индексации.
5. Смешивание HTML-тегов и sitemap-hreflang
Если Google находит одну версию тегов в HTML, а другую в sitemap — он выбирает не строгую. Часто это ломает нужную настройку. Одна страница = один источник hreflang. Определись раз и не мешай.
6. hreflang через JavaScript
Вставляешь теги через JS после загрузки страницы. Googlebot иногда рендерит JS, а часто — нет. Особенно на больших сайтах, где краулинг-бюджет ограничен. Hreflang должен быть в изначальном HTML или в HTTP-заголовке. Не через JS.
hreflang. Если нашёл — Google их видит. Если нет — либо не поставлены, либо ставятся через JS. Пока не в HTML — считай, что hreflang не работает.
Быстрый чек-лист для запуска
- Определи регионы, языки, URL-структуру. Составь матрицу.
- Выбери способ размещения: HTML-head (до 500 стр) или sitemap (500+). Не мешай.
- Правильные коды:
ru-BY,ru-RU,ru-KZ,kk-KZ,be-BY(если реально нужен). - Self-reference на каждой странице.
- Взаимные ссылки между всеми версиями.
- x-default — на самую подходящую версию (обычно .ru или .com).
- Абсолютные URL. Все URL возвращают 200 OK, без noindex, без 4xx/5xx.
- Загрузи, дождись переиндексации (обычно 1–2 недели), проверь GSC → International Targeting.
- Прогони через Screaming Frog на ошибки.
- Для Яндекса — настрой регион в Вебмастере отдельно для каждого домена.
Что даёт hreflang в цифрах
Практический замер по трём проектам за последние полгода, обезличенно:
- B2B-сервис с .by/.ru: до внедрения hreflang импрешны на .by по РБ-запросам — 12 400/мес, по РФ — 3 800/мес (в основном .ru не показывался, .by выпадал вместо него). После настройки: .by по РБ — 18 200 (+47%), .ru по РФ — 24 100 (+534%). Совокупный рост клика — +186%. Срок — 6 недель до основного эффекта, 12 недель до стабилизации.
- Интернет-магазин на .by/.ru/.kz: до — трафик почти весь только с .ru (Google выбирал одну версию). После — распределение стало ~40% .ru / 35% .by / 25% .kz с общим ростом на 22%. Конверсия по КЗ выросла в 3 раза (было — люди приходили на .ru с ценами в рублях, отваливались).
- Информационный сайт с .by/.ru — hreflang помог меньше, потому что там основная проблема была не в дублях, а в тонком контенте. Плюс ~8% органики, но большая часть роста пришла от переработки самих статей, а не от hreflang.
Общий вывод: hreflang даёт заметный эффект там, где есть реальная региональная семантика и товар/услуга для нескольких стран. Для чисто локального РБ-бизнеса, который не работает в РФ и КЗ, — hreflang не нужен, это преждевременная оптимизация.
Частые вопросы
Нужен ли hreflang, если у меня один сайт .by и я работаю только по РБ?
Нет. Hreflang нужен, только когда есть несколько версий для разных регионов/языков. Если сайт один и предназначен для РБ — просто настрой регион в Google Search Console → Settings → International Targeting и в Яндекс.Вебмастере.
Что делать, если у меня только один домен с папками /ru/, /by/, /kz/?
Работает точно так же. Пути к страницам будут site.com/by/uslugi/, site.com/ru/uslugi/, site.com/kz/uslugi/. Логика hreflang идентична — теги указывают на каждую версию. Кстати, папочная структура для Google лучше воспринимается по региональности, чем поддомены (by.site.com).
Нужен ли отдельный тег для белорусского языка?
Только если у тебя реально есть контент на белорусском на отдельных страницах. Если весь сайт на русском, но в РБ — только ru-BY. Не пиши be-BY ради галочки — Google при обнаружении несовпадения языка страницы и hreflang снижает вес всей группы тегов.
Как быть, если контент почти одинаковый, но с локальными правками (валюта, телефон)?
Это стандартная ситуация — как раз для чего hreflang и нужен. Google понимает, что контент почти одинаковый, но не считает дублями, потому что hreflang говорит: «эти версии — для разных аудиторий». Разница может быть минимальной (валюта, телефон, адрес доставки) — hreflang всё равно сработает.
hreflang и canonical — как сочетаются?
Каждая языковая версия должна иметь self-canonical — canonical на саму себя. Не на «главную» версию. То есть site.by/page/ имеет <link rel="canonical" href="https://site.by/page/">, а не canonical на site.ru/page/. Ошибка «canonical всех региональных версий на одну» — очень частая, и она полностью убивает hreflang. Google в этом случае индексирует только версию из canonical, остальные выкидывает.
Сколько ждать эффекта?
Первые изменения в GSC — International Targeting — появляются через 3–7 дней после внедрения. Реальные сдвиги в позициях и трафике — через 4–6 недель. Полная стабилизация — 2–3 месяца. Быстрее не будет — Google переиндексирует и перепроверяет отношения между страницами не сразу.
hreflang — не «магия», а честная разметка: ты говоришь Google, для кого какая страница предназначена. Работает — только когда сделано полностью: self-reference, взаимность, правильные коды, живые URL, одинаковая структура. Половинчатое внедрение или косяки в кодах — либо не работает, либо ломает то, что раньше работало. Сложность внедрения — на уровне «средней технической правки», день работы для сайта на 3 регионах + 500 страницах. Экономический эффект — обычно от +20% до +500% регионального трафика в зависимости от того, насколько было запущено. Одна из самых недооценённых техничек в СНГ, потому что почти никто в РБ/РФ/КЗ её не делает как надо.
Хочешь настроить hreflang на своём мультирегиональном сайте — пиши на mostlycorp@gmail.com. Проверяю текущее состояние в GSC, разбираю ошибки, готовлю разметку, внедряю на прод, проверяю через 2 недели. Ещё связанное: robots.txt для Google и Яндекса, микроразметка Schema.org, GSC vs Яндекс.Вебмастер.