Hreflang атрибуты говорят Google, какая версия сайта показывать в каком регионе. Для сайта в Казахстане это критично: ru-KZ для русскоязычной аудитории, kk-KZ для казахскоязычной, en для зарубежной.
Когда hreflang действительно нужен
Hreflang решает ровно одну задачу — выбор языковой версии для конкретного пользователя. Он не повышает позиции сам по себе и не заменяет оптимизацию. Ставить его нужно, когда у вас есть две и более версии одной и той же страницы на разных языках или для разных стран.
Если у вас только русская версия — hreflang не нужен вообще. Если казахская версия существует, но представляет собой машинный перевод без вычитки, сначала имеет смысл довести контент: Google неплохо распознаёт автоперевод, и продвигать такую версию всё равно не получится. Практический опыт по казахстанским проектам показывает, что вторая языковая версия окупается не всегда — считать нужно по реальному спросу в поиске, а не по принципу «пусть будет».
Отдельный случай — один язык, но разные страны: сайт для Казахстана и России на русском. Здесь hreflang обязателен, иначе поисковик будет считать страницы дублями и выбирать одну из них произвольно.
Правильный синтаксис
<link rel="alternate" hreflang="ru-KZ" href="https://site.kz/">
<link rel="alternate" hreflang="kk-KZ" href="https://site.kz/kk/">
<link rel="alternate" hreflang="en" href="https://site.kz/en/">
<link rel="alternate" hreflang="x-default" href="https://site.kz/">
Ключевое правило: этот блок должен быть одинаковым на всех перечисленных страницах и включать саму страницу тоже. То есть на казахской версии повторяется тот же набор из четырёх строк, включая ссылку на казахскую версию. Именно это и называется return tag — взаимные подтверждения.
Код языка — по стандарту ISO 639-1, код региона — ISO 3166-1 alpha-2. Для казахского это kk, не kz: kz — это код страны, а не языка. Ошибка частая и полностью обнуляет атрибут, потому что значение считается невалидным и игнорируется.
Размещать hreflang можно тремя способами: в head страницы, в HTTP-заголовках или в XML-карте сайта. Для обычного сайта проще всего в head. Для PDF и других не-HTML файлов остаются только заголовки. Для крупных каталогов на десятки тысяч страниц удобнее sitemap — блок в head раздувает вес каждой страницы.
5 типичных ошибок
- Указан hreflang без обратной ссылки (return tag)
- Использован язык вместо языка-региона (только ru вместо ru-KZ)
- x-default не указан
- Hreflang не совпадает с canonical
- Hreflang в robots.txt-блокированных страницах
Четвёртый пункт заслуживает отдельного разбора, потому что ломает всё тише остальных. Canonical на каждой языковой версии должен указывать на саму себя. Если казахская страница имеет canonical на русскую, вы одновременно говорите Google «это отдельная версия для казахоязычных» и «это копия русской, индексируй русскую». Побеждает canonical, и казахская версия просто выпадает из индекса.
К списку стоит добавить ещё три ошибки, которые встречаются не реже. Относительные URL вместо абсолютных — hreflang требует полный адрес с протоколом. Ссылки на страницы, отдающие редирект или 404 — атрибут игнорируется целиком, если цель недоступна. И автоматический редирект по геолокации или языку браузера: если робот из США принудительно перебрасывается на английскую версию, он никогда не увидит остальные.
Проверка через GSC
Search Console показывает ошибки hreflang в отчёте «International targeting». Исправляем по приоритету: сначала ошибки return tag, потом неправильные коды.
Перед тем как ждать данных от Search Console (они появляются с задержкой в дни), полезно прогнать сайт краулером — Screaming Frog или аналогом. Он собирает все hreflang-блоки и сразу показывает несоответствия: односторонние ссылки, конфликты с canonical, невалидные коды, ссылки на нерабочие URL. На среднем сайте это 15 минут работы вместо недель наблюдения.
После исправлений имеет смысл проверить точечно через инструмент проверки URL: он показывает, какую каноническую версию Google выбрал по факту. Если выбранная каноническая не совпадает с заявленной — ищите конфликт дальше, hreflang здесь только симптом.
Что ещё влияет на региональную выдачу
Hreflang — не единственный сигнал. Работают также доменная зона (.kz однозначно указывает на Казахстан), физический адрес и телефон в контактах, валюта и формат цен, локальные ссылки и упоминания, скорость отдачи с сервера в целевом регионе.
Структура URL тоже сигнал. Три рабочих варианта: подпапки (site.kz/kk/), поддомены (kk.site.kz) и отдельные домены. Для большинства проектов в Казахстане подпапки оптимальны — весь ссылочный вес остаётся на одном домене, а настройка проще. Поддомены и отдельные домены оправданы, когда версии сайта фактически независимы: разный ассортимент, разные юрлица, разные команды.
Ещё один момент, о котором забывают: переключатель языка должен быть обычной ссылкой в разметке, а не элементом, работающим только через JavaScript. Робот должен иметь возможность перейти по нему без выполнения скриптов. И вести переключатель обязан на аналогичную страницу, а не на главную — сброс на главную с любой внутренней страницы обнуляет смысл второй версии и раздражает пользователей.
Если языковые версии делаются на уже существующем проекте, закладывайте не только перевод текстов, но и адаптацию мета-тегов, alt-атрибутов, хлебных крошек, форм и писем-уведомлений. Полусделанная локализация выглядит хуже её отсутствия. Когда версия проектируется с нуля, это учитывается ещё на этапе создания сайта, а для многостраничных проектов — при проработке структуры корпоративного сайта.
Практический вывод: сначала проверьте, что hreflang вообще нужен вашему проекту и что вторая языковая версия имеет живой поисковый спрос. Если нужен — сделайте его через краулер за один проход, а не по одной странице, и обязательно сверьте с canonical. Разбор ошибок разметки, структуры и семантики на конкретном сайте закрывается в рамках SEO-продвижения от 180 000 ₸.