Що насправді робить hreflang?
hreflang — це анотація, яка повідомляє Google, яка адреса є версією сторінки для якої мови й регіону. У настанові Tell Google about localized versions of your page сказано, що анотації допомагають показувати відповідну версію відповідному користувачеві. Вони не обіцяють позиції у видачі, і я такого теж не обіцяю. Яку версію і кому показати, вирішує пошуковик. Тож сприймайте hreflang як службовий сигнал про відповідність версій, а не як засіб просування.
У тій самій настанові є корисна примітка про дублікати: локалізовані версії вважаються дублікатами лише тоді, коли основний вміст сторінки лишається неперекладеним. Отже, справді перекладена сторінка не є дублем оригіналу, і немає підстав вказувати канонічною адресою однієї мови іншу.
Чому кожній мові потрібна власна адреса?
У матеріалі Managing multi-regional and multilingual sites Google радить використовувати різні адреси для кожної мовної версії, а не cookie чи налаштування браузера, що змінюють мову на тій самій адресі. Скрипт, який підміняє текст після натискання кнопки, залишає одну адресу, яку пошуковик бачить однією мовою, а відвідувач не може поділитися посиланням на версію, яку читав.
Там само радять використовувати на кожній сторінці одну мову і для вмісту, і для навігації, та застерігають від перекладу лише службових елементів, коли основний вміст залишається іншою мовою. Тож будуйте справжні сторінки: для двомовного сайту це повний набір сторінок кожною мовою, кожен на власній адресі.
Куди вставляти теги hreflang?
Google називає три способи: елементи link у head HTML, заголовок Link у HTTP-відповіді та записи в XML-карті сайту. Він зазначає, що з його погляду вони рівнозначні, тож обирайте той, який зможете підтримувати. Для звичайних HTML-сторінок найпростіший head. Спосіб із заголовком призначений для не-HTML файлів, наприклад PDF. Карта сайту тримає всі пари в одному файлі. Кілька способів одночасно користі в пошуку не дають.
Які правила змушують hreflang працювати?
Правило перше: посилання мають бути взаємними. Google пише, що кожна мовна версія має перелічувати і себе, і всі інші версії, що якщо дві сторінки не вказують одна на одну, теги ігноруються, а набір анотацій має бути однаковим на кожній версії. Якщо англійська сторінка вказує на німецьку, а німецька не вказує ні на що, англійський тег пропадає.
Правило друге: адреси мають бути повними. Google вказує, що альтернативні адреси повинні містити протокол, наприклад https://example.com/de/page/, а голий шлях на кшталт /de/page/ цій вимозі не відповідає.
Правило третє: коди мають бути дійсними. Мова — це код ISO 639-1, за яким за потреби йде регіон у вигляді коду ISO 3166-1 Alpha 2. Регіон не можна вказувати окремо, а коди на кшталт es-419 не підтримуються.
Коли додавати регіон, а коли обійтися мовою?
Додавайте регіон, коли аудиторія прив'язана до країни. Сайт Fedenko працює на швейцарський ринок, тому його версії оголошено як de-CH для німецької у Швейцарії та en-CH для англійської у Швейцарії, плюс x-default. Якщо аудиторію визначає мова, а не країна, досить простого коду мови, і саме так зроблено на цьому сайті: en та uk. Суть у тому, щоб описати справжню аудиторію, а не додавати точність, яку нічим підтвердити. Якщо тексти для різних країн однієї мови однакові, множити версії немає сенсу: кожна додаткова версія — ще один набір сторінок, який треба підтримувати.
Навіщо потрібен x-default?
x-default — це запасний варіант для користувачів, чиї мовні налаштування не збігаються з жодною з ваших версій. Google пояснює, що він застосовується, коли жодна інша мова чи регіон не підходять, не потребує коду мови й створений для сторінок вибору мови, тож якщо така сторінка у вас є, x-default найприродніше спрямувати саме на неї. Багато сайтів спрямовують його на версію, яку вважають головною, так робить і цей сайт: його x-default — англійська сторінка.
Які помилки найчастіше ламають двомовний сайт?
- Односторонні посилання, коли сторінка вказує на іншу мову, а на неї не вказують у відповідь. Google такі теги ігнорує.
- Код регіону без мови або код поза списками ISO.
- Немає посилання на себе: кожна версія має перелічувати й саму себе.
- Перемикач мов, що веде на головну сторінку іншої мови, а не на відповідну сторінку.
- Автоматичне перенаправлення відвідувачів за мовою браузера. Google попереджає, що такі редіректи можуть не дати користувачам і пошуковикам побачити всі версії, і радить посилання, за якими людина обирає сама.
- Змішування мов на сторінці, наприклад перекладене меню над неперекладеним текстом.
- Покладання на атрибут lang. Google пише, що для визначення мови сторінки не використовує інформацію на рівні коду, як-от атрибути lang, чи адресу, а читає видимий вміст.
Що робити зі сторінкою, яка є лише однією мовою?
Таке трапляється: матеріал, написаний однією мовою, або послуга, потрібна лише одному ринку. Наведені правила тут працюють на вас. hreflang описує пари, які існують, тож сторінка без відповідника просто не має тегів alternate, і не варто створювати порожню чи машинно перекладену копію лише заради повного набору. Google до того ж зазначає, що сторінка з перекладеним лише службовим оформленням — це поганий досвід, тож порожня копія зашкодила б більше, ніж відсутність пари.
Відвідувачеві потрібен перемикач мов, який не веде в глухий кут. На цьому сайті український матеріал про те, що впливає на вартість сайту, не має англійської версії, тому його посилання EN веде на англомовний список статей, а не на неіснуючу сторінку. Це моє рішення, а не правило Google, але воно зберігає працездатність перемикача на кожній сторінці.
Чи перекладати також заголовки, описи й адреси?
Заголовки та описи: так. Це видимий вміст, а українська сторінка з англійським заголовком у видачі — переклад наполовину. Кожна версія має мати власний заголовок, власний опис і рівно один заголовок першого рівня своєю мовою.
Адреси — питання вибору. Слова в шляху можна перекладати, транслітерувати латиницею або залишати один і той самий слаг для всіх мов. На цьому сайті для українських шляхів використано латинську транслітерацію, наприклад /uk/posluhy/ для списку послуг. Будь-який варіант працює, якщо адреса стабільна, зрозуміла й однакова скрізь, де вона заявлена: на сторінці, у тезі canonical, у тегах hreflang і в карті сайту.
Як зберігати правильність пар із часом?
Більшість помилок hreflang виникає не під час запуску. Вони з'являються пізніше, коли сторінку перейменовують однією мовою й не перейменовують іншою або додають нову сторінку лише в одну версію. Розглядайте набір як єдине ціле: будь-яка зміна адреси, мови чи заголовка вноситься в обидві версії однією правкою, а пари перевіряються перед публікацією. На цьому сайті скрипт збирання не пропускає зміну, якщо пара не взаємна, і правило перетворюється на перевірку, яку неможливо забути.
Як це виглядає на реальному сайті?
На Fedenko німецькі й англійські версії головної, прибирання, ремонту, сторінок «Про нас», контактів, юридичних і подяки пов'язані через hreflang для de-CH, en-CH та x-default, а під час запуску також налаштовано канонічні адреси, карту сайту та структуровані дані. Повний перелік — у кейсі Fedenko.
Цей сайт дотримується тієї самої схеми. Кожна сторінка, що існує обома мовами, має канонічну адресу, hreflang для en, uk і x-default, а ті самі пари є в карті сайту. Перемикач мов веде на відповідну сторінку, а скрипт збирання перевіряє, що кожна пара вказує назад. Єдиний виняток не приховую: сторінка, яка існує лише однією мовою, не отримує hreflang узагалі, бо їй нема з чим утворювати пару.
Як перевірити власний сайт?
- Відкрийте код сторінки кожної мовної версії й знайдіть у head посилання alternate.
- Порівняйте переліки. Вони мають бути однаковими на всіх версіях, і кожен має містити саму сторінку.
- Відкрийте кожну адресу зі списку. Вона має завантажуватися без перенаправлення й показувати потрібну мову.
- Натисніть перемикач мов на трьох різних сторінках і переконайтеся, що він веде на відповідну сторінку, а не на головну.
- Якщо пари є й у карті сайту, перевірте, що вони збігаються з head. Два різні набори на одному сайті лише створюють плутанину.
- Повторіть усю перевірку після кожного перейменування чи додавання сторінки.
Таке технічне налаштування входить до послуги SEO, аналітика й налаштування Google та до обсягу двомовного сайту.