Налаштування hreflang на сайті — це чотири узгоджені між собою речі: код мови документа, взаємні теги на кожну версію, заданий x-default і присутність усіх мовних гілок у карті сайту. Робимо їх разом і перевіряємо не розмітку, а фактичну відповідь: чи справді за адресою, оголошеною українською, віддається українська сторінка. У виміряному нами магазині з трьома версіями вона віддавалася російською — і за українським посиланням, і за польським.
мова документа, взаємний hreflang, x-default, canonical, мовні гілки в карті сайту
після безкоштовного аудиту
Вартість
30
Гарантія
днів після підписання акта
мова документа, взаємний hreflang, x-default, canonical, мовні гілки в карті сайту
Що робимо
5–15
Строк
робочих днів — залежить від кількості версій і стану шаблонів
безкоштовна перевірка мовної розмітки, 2–3 робочих дні
Перед кошторисом
hreflang заведено двічі різними механізмами, набори суперечать один одному
Найважчий випадок у власному вимірі
дві версії з взаємним hreflang і x-default на каталозі з 3 565 товарів
Справний стан із того ж виміру
позицій в іншій країні: розмітка керує вибором версії, а не місцем у видачі
Чого не обіцяємо
Кому підходить
Ситуації, у яких ця послуга дає результат
Ситуація 1 з 4
Дві версії однієї сторінки конкурують у видачі між собою
Симптом упізнаваний: за одним запитом сьогодні показується російська сторінка, завтра українська, і жодна не тримається. Для пошукової системи це два майже однакові документи без пояснення, ким вони одне одному доводяться. Hreflang і є таким поясненням. Google у документації пише прямо: несиметричні анотації він ігнорує — половина правильно зробленої роботи не працює взагалі.
Розберемо вашу ситуацію на безкоштовному аудиті
Ситуація 2 з 4
Версія відкривається, але віддає не ту мову
Найгірший із сценаріїв, бо ззовні все виглядає справним. У магазині нижньої білизни з каталогом на 115 456 позицій ми знайшли два паралельні набори hreflang: перший вів на кореневі адреси, другий — на мовний підкаталог. За посиланнями, поміченими як українське й польське, віддавався російський контент. Розмітка була формально валідна і при цьому брехала.
Ситуація 3 з 4
Додаєте мову під новий ринок
Тут розмітку роблять один раз і надовго, тому дешевше зробити її відразу. Фірмовий магазин болгарського бренду косметики тримає три версії — bg, en і ru — з hreflang і шістьма типами структурованих даних на головній. Чесна межа: переклад вітрини ринком не є. Покупцю з іншої країни потрібні ще місцева оплата, доставка й підтримка — сайт закриває першу задачу і жодної з решти.
Ситуація 4 з 4
Мовна розмітка справна, а другої мови в пошуку немає
Буває й так, і тоді копати треба не в hreflang. У магазині опалювального обладнання на 3 565 товарів обидві версії оголошені коректно, з x-default, а /sitemap.xml віддає HTTP 200 з порожнім тілом: бот отримує відповідь, у якій нуль адрес. Сама карта при цьому нічого не гарантує — 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 календарних днів гарантії: помилки з нашої вини усуваємо безоплатно. Усне з дзвінка дублюємо письмово того ж дня — домовленість, якої немає в тексті, не рахується.
ФОП і безготівковий розрахунок
Виконавець — зареєстрований ФОП. Оплата на рахунок із закривними документами, які бухгалтерія проведе як витрати. Курс для гривневої оплати фіксується договором, а не з’ясовується постфактум.
Права й доступи — ваші
Код, дизайн і матеріали переходять до вас після повної оплати. Домен, хостинг, репозиторій, аналітику й рекламні кабінети оформлюємо на вас — щоб сайт не залежав від підрядника. NDA підписуємо на запит, після завершення свої доступи видаляємо самі.
Портал клієнта замість переписки
На час роботи ви отримуєте доступ до порталу: договори, рахунки, акти й стан проєкту в одному місці. Документи формуються з даних угоди, тому реквізити й суми в них не розходяться, а про оплати й дедлайни нагадує система, а не пам’ять менеджера.
Замовники з Європи
Серед робіт — проєкти для Норвегії, Болгарії та Іспанії: болгарський магазин трьома мовами з кур’єрською доставкою, іспанський з оплатою карткою й переказом, норвезький сайт клініки. Це видно в портфоліо, а не тільки в описі.
Цифри, які можна перевірити
Кожен кейс у портфоліо — з посиланням на живий сайт і технічним виміром: швидкість відповіді, вага сторінки, обсяг каталогу, знайдені дефекти. Ці цифри можна зняти самому й звірити з нашими.
Спершу аудит, потім сума
Прайсу на сайті немає навмисно: обсяг тієї самої роботи у двох клієнтів відрізняється в рази, і цифра «від» нічого не пояснює. Спершу безкоштовний розбір — рахуємо ваші сторінки, дублі й швидкість, — потім називаємо суму й строк і фіксуємо їх у договорі.
Кажемо «ні», коли не впевнені
Якщо задача не наша, строк нереальний або послуга вам просто не потрібна — скажемо це першим листом, а не після передоплати. Гарантій позицій у пошуку не даємо: їх не дає ніхто, а обіцянка без механізму — це продаж, а не робота.
NDA підписуємо на запит. Після завершення співпраці наші доступи до ваших сервісів видаляємо самі й повідомляємо про це.
Не знайшли свій випадок?
Опишіть, як це влаштовано у вас, — відповімо, чи підходить «Налаштування 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 із затримкою в кілька днів.
Надішліть адресу сайту й перелік мов, які на ньому оголошені.
У відповідь — таблиця по кожній версії: що написано в розмітці, що віддається насправді, що є в карті сайту. Якщо мовна частина справна, ми так і напишемо й покажемо, де справжня причина.
Прайса на сайті немає навмисно: обсяг тієї самої роботи у двох клієнтів відрізняється в рази, і цифра «від» у такому разі нічого не пояснює. Спершу безкоштовний аудит — рахуємо ваші сторінки, дублі й швидкість, — потім називаємо суму й строк і фіксуємо їх у договорі.