Hreflang підказує Google, яку мовну або регіональну версію сторінки кому показувати: користувачу з українським інтерфейсом дати /ua/, з англійським /en/. Без цієї розмітки мультимовний сайт часто ранжується «не тією» версією: у видачі для Польщі спливає українська сторінка, а англійська взагалі не сприймається як окрема. Нижче розбираємо, що атрибут hreflang робить насправді, три способи його прописати, які коди мов і регіонів коректні, і де мультимовні сайти зазвичай ламають розмітку.

Атрибут hreflang зв'язує між собою сторінки з однаковим змістом різними мовами або для різних країн. Google читає цей зв'язок і для кожної країни чи мови інтерфейсу підставляє у видачу найдоречнішу версію. Ключове слово тут «підставляє»: усі версії вже мають бути проіндексовані, hreflang лише допомагає вибрати одну з них під конкретного користувача.
Чого hreflang не робить, і саме тут найбільше плутанини:
/en/ лишився український текст, Google це побачить, а hreflang нічим не допоможе.Практичний висновок простий. Якщо у вас одна мова і один ринок, hreflang не потрібен зовсім. Він потрібен, коли є хоча б дві мовні версії або одна мова для кількох країн з різними цінами чи доставкою (en-US і en-GB, наприклад).
Google приймає розмітку з трьох джерел, і всі три рівноцінні. Вибирати треба один спосіб на весь сайт, бо змішування дає конфлікти, які потім важко знайти.
Найпоширеніший варіант для сайтів на CMS. На кожній версії сторінки в <head> перелічують усі версії, включно з нею самою:
<link rel="alternate" hreflang="uk" href="https://site.ua/ua/dostavka/" />
<link rel="alternate" hreflang="ru" href="https://site.ua/dostavka/" />
<link rel="alternate" hreflang="en" href="https://site.ua/en/delivery/" />
<link rel="alternate" hreflang="x-default" href="https://site.ua/ua/dostavka/" />
Плюс: видно в коді, легко перевірити очима. Мінус: на сайті з 20 000 сторінок і п'ятьма мовами кожна сторінка отримує п'ять-шість рядків, тому це має генерувати CMS, а не руки.
Для файлів без HTML, наприклад PDF-каталогів, у відповіді сервера віддають заголовок:
Link: <https://site.ua/ua/catalog.pdf>; rel="alternate"; hreflang="uk", <https://site.ua/en/catalog.pdf>; rel="alternate"; hreflang="en"
Рідкісний спосіб, налаштовується на рівні сервера. Для звичайних сторінок ним не користуються.
Кожен <url> у карті сайту доповнюють елементами <xhtml:link> зі списком усіх версій. Приклад для однієї сторінки:
<url><loc>https://site.ua/ua/dostavka/</loc><xhtml:link rel="alternate" hreflang="uk" href="https://site.ua/ua/dostavka/"/><xhtml:link rel="alternate" hreflang="en" href="https://site.ua/en/delivery/"/></url>
Плюс: HTML сторінок не «пухне», усе лежить в одному файлі, який зручно генерувати й перевіряти скриптом. Мінус: карта росте, і на великих каталогах її доводиться дробити на кілька файлів. Ми в Query для магазинів з десятками тисяч сторінок частіше обираємо саме sitemap, для невеликих сайтів послуг зручніше link у head.
Взаємність означає: якщо сторінка A вказує на сторінку B як на англійську версію, то сторінка B має вказувати на A як на українську. Односторонній зв'язок Google ігнорує повністю, і це найчастіша причина, чому «hreflang прописали, а нічого не змінилось». Перевіряти треба саме пари, а не окремі сторінки.
x-default каже, яку версію показувати тим, чия мова й країна не збігаються з жодною з перелічених. Для українського сайту з uk/ru/en логічно віддавати в x-default або англійську версію (для іноземців), або сторінку вибору мови, якщо вона є. Ставити x-default на українську теж припустимо: тоді невизначені користувачі побачать основну версію. Головне, щоб x-default був один і вів на реальну сторінку з кодом 200.
Мова записується за ISO 639-1 (дві літери), регіон за ISO 3166-1 Alpha-2 після дефіса. Регіон без мови вказувати не можна: hreflang="UA" невалідний, потрібно uk-UA. Найбільше помилок роблять з українською: її код uk, а не ua. Значення ua це домен, а не мова, і Google його не розпізнає.
| Код | Що означає | Коли доречний |
|---|---|---|
| uk | Українська, будь-яка країна | Стандарт для української версії |
| uk-UA | Українська для України | Лише за наявності іншої української версії |
| ru | Російська, будь-яка країна | Версія без прив'язки до країни |
| en | Англійська, будь-яка країна | Одна англійська для всіх |
| en-GB, en-US | Англійська для Британії / США | Різні ціни, валюта, доставка |
| x-default | Версія «для всіх інших» | Один раз у кожному наборі |
Якщо у вас одна англійська версія, пишіть просто en. Дописувати регіон «про запас» не варто: en-US звужує аудиторію, і британський користувач формально під неї не підпадає, хоча Google і намагається підбирати найближчу мову.
За нашими спостереженнями, на більшості сайтів, що приходять на технічну оптимізацію, розмітка або є з помилками, або її немає взагалі. Помилки повторюються від сайту до сайту.
| Помилка | Чим загрожує | Як виправити |
|---|---|---|
| Немає зворотного посилання | Google ігнорує пару | Один список версій для всіх сторінок |
| Веде на неканонічну сторінку | Сигнали суперечать | Лише канонічні URL |
| Відносні URL | Розмітка невалідна | Абсолютні адреси з доменом |
| Конфлікт із canonical | Версія зникає з видачі | Кожна версія канонічна сама на себе |
| Різні мови на одному URL | Google не пов'язує версії | Одна мова = одна адреса |
| Код ua замість uk | Версія без розмітки | Замінити код у шаблоні |
| Веде на noindex, 404, редирект | Пара розпадається | Перевіряти версії перед виводом |
| Перекладу немає, hreflang є | Посилання на неіснуюче | Лише реально перекладені сторінки |

&gl=gb&hl=en і подивіться, яка версія у видачі. Це найчесніший тест.Офіційні вимоги і приклади для всіх трьох способів зібрані в документації Google про локалізовані версії. Якщо валідатор і документація розходяться, правий Google.
Типова конфігурація українського бізнесу: українська основна, російська для частини аудиторії, англійська для експорту або іноземних клієнтів. Кілька практичних рекомендацій, які ми даємо в таких проєктах.
/ua/, але послідовно на всьому сайті. Змішана структура, де частина сторінок з префіксом, а частина без, руйнує розмітку.ru без регіону. ru-UA виправданий лише тоді, коли є ще ru-версія для іншої країни.uk, а не ua.Hreflang не додає позицій, він прибирає втрати. Коли правильна версія показується правильному користувачу, росте CTR і зникають відмови «не та мова». Для сайту з двома-трьома мовами це один-два дні роботи розробника і півдня на перевірку, і ця інвестиція окупається стабільно.