Просування сайтів & web-аналітика

Оберіть свою мову

Поставити запитання +38 096 558 7514

Hreflang в мультимовності

Одним з найостанніших трендів сайтобудування в Україні є додавання на сайт багатомовності, для реалізації якої потрібно наявність hreflang на технічному боці сайту.

Власник сайту часом може і не знати про цю директиву, поки не переведе сайт на кілька мов і йому не прийде повідомлення з Google Search Console. Постараємося роз'яснити максимально коротко, що ж таке hreflang і як його правильно використовувати. Максимум корисної інформації без зайвих слів.

Hreflang - це спеціальний HTML-атрибут сайту, який використовується для вказівки наявності мовних версій сторінок.

Саме hreflang вказує роботу Google, що дана сторінка є на таких-то мовах, і який URL веде на сторінку за замовчуванням, якщо переведення для даної сторінки наразі не має.

Hreflang в html

Hreflang має наступний вигляд в коді html:


<link href="https://holostenko.ua/contacts" rel="alternate" hreflang="ru" />
<link href="https://holostenko.ua/uk/contacts" rel="alternate" hreflang="uk-UA" />
<link href="https://holostenko.ua/contacts" rel="alternate" hreflang="x-default" />

Розберемо по порядку що і навіщо:

  • rel="alternate" - атрибут html тега link, який повідомляє Google про всі наявні мовні версії даної сторінки;
  • hreflang="код мови і країни" - зазначення мови конкретної мовної версії і до якої країни вона має відношення (мова прописується в форматі ISO 639-1 і країна в форматі ISO 3166-1 Alpha 2). Для України hreflang буде наступним - hreflang="uk-UA";
  • x-default - основна версія сторінки або як часто кажуть резервна, передбачається в тому випадку, якщо користувач не знайде своєї мови, тобто як стандартна сторінка.

* Атрибути hreflang прописуються в розділ <head> html сторінки.

Hreflang та SEO

Вище ми вже обговорили, що за допомогою атрибута hreflang ми вказуємо мовну версію сайту для Google. Чисто теоретично пошукова машина повинна у себе в базі зберігати ці дані, і коли запит користувача здійснюється на конкретній мові - пошукова машина повинна віддавати відповіді цією ж мовою, якщо така відповідь в машині є. За нашими ручними тестами це працює.

Але, основна користь hreflang в seo не тільки ця, а й вирішення проблеми ризиків дубльованого контенту ("дублі сайту", якщо на мові сеошників).

Дубль контенту - це ситуація, коли один і той же контент представлений на декількох сторінках сайту.

Уявімо ситуацію, коли один сайт продає на декількох ринках збуту в різних валютах на одній мові. Наприклад, це Великобританія та США. Вийде кілька карток товару, які будуть відрізнятися лише умовами доставки та ціною. Для Google це буде інтерпретуватися як дубльований контент, але якщо вказати hreflang в конкретних мовних версіях, це питання буде вирішене.

По суті, hreflang є обов'язковим атрибутом для технічної seo оптимизації мультимовного сайту. І без нього ніяк.

Hreflang в WordPress, Joomla, Opencart та інших

З нашого досвіду з сайтами над якими ми працювали, якщо сайт має інструмент багатомовності, то hreflang автоматично впроваджений. Не потрібно ніде нічого допилювати. Це залізне правило для Wordpress, Joomla, Opencart.

Про реалізацію hreflang варто задуматися невеликим сайтам на html без CMS і великим проектам на Laravel (вище ми розповіли як впровадити hreflang в html).

Правила реалізації hreflang, які краще не порушувати

Парність

Якщо Ви на сторінці з англійською мовою вказуєте 2 атрибута hreflang в яких є посилання на іншу мову, то на сторінці з іншою мовою посилання з атрибутами hreflang теж обов'язково повинні бути.

Вказівка на себе

Посилання з атрибутами hreflang повинні вказувати не тільки на інші мовні версії, але і вказувати посилання на саму себе.

Вказівка резервної сторінки

З точки зору html "x-default" - можна не вказувати, але Google це рекомендує зробити.

Відсутність битих сторінок

Не повинно бути в тегах посилань на сторінки, статус яких віддає 404.

Розбіжність мов

Мова багатомовних сторінок мусить збігатися з кодами, які вказані для мов в hreflang.

Альтернативні способи реалізації hreflang

Якщо в html у Вас нічого не виходить, хоча це самий робочий спосіб, тоді є ще 2 альтернативних:

  • HTTP-заголовки. Актуальний спосіб для сторінок без html, а саме посилання на скачування файлів або інсталяційні пакети.
  • Файли Sitemap. Прописування здійснюється через тег "xhtml: link". Цілком аналогічно, як і в способі html в директорії <url> прописуються посилання на інші мовні версії сайтів за допомогою "xhtml: link". Приклад докладаємо.

<url>
<loc>https://example.com/blog/test/</loc>
<xhtml: link rel = "alternate" hreflang = "x-default" href = "https://example.com/blog/test/ "/>
<xhtml: link rel =" alternate "hreflang =" ru" href ="https://example.com/blog/test/ "/>
<xhtml: link rel =" alternate "hreflang ="uk" href =" https://example.com/blog/uk/test/ "/>
</url>

Hreflang Test (перевірка на валідність)

В інтернеті є кілька сайтів, які пропонують послуги моментальної тест перевірки hreflang. Але, все по порядку.

  • Якщо у Вас будуть помилки, Вам про це в першу чергу повідомить Google Search Console в звіті покриття або повідомленням на e-mail.
  • Якщо, Ви бажаєте перевірити свою конкретну сторінку - самий адекватний сайт-тест hreflang цей app.hreflang.org.

Запустивши перевірку, Ви повинні отримати позитивну відповідь:

тест hreflang

Ви повинні отримати зелений тест. Якщо ж щось не так, тоді перевіряєте html.

На цьому все. Сподіваємося, для Вас цей матеріал був корисним, зрозумілим і без зайвої інформації. Бажаємо Вам успіхів у реалізації hreflang і багатомовності для Вашого сайту.

Якщо у Вас є питання щодо наших послуг, будь ласка, напишіть, як з Вами зв'язатися та коротко опишіть свій бізнес.

* Ваші особисті дані повністю захищені та не будуть передані третім особам.

Оберіть, яким способом з Вами краще зв'язатися.

  • United States+1
  • United Kingdom+44
  • Afghanistan (‫افغانستان‬‎)+93
  • Albania (Shqipëri)+355
  • Algeria (‫الجزائر‬‎)+213
  • American Samoa+1
  • Andorra+376
  • Angola+244
  • Anguilla+1
  • Antigua and Barbuda+1
  • Argentina+54
  • Armenia (Հայաստան)+374
  • Aruba+297
  • Ascension Island+247
  • Australia+61
  • Austria (Österreich)+43
  • Azerbaijan (Azərbaycan)+994
  • Bahamas+1
  • Bahrain (‫البحرين‬‎)+973
  • Bangladesh (বাংলাদেশ)+880
  • Barbados+1
  • Belarus (Беларусь)+375
  • Belgium (België)+32
  • Belize+501
  • Benin (Bénin)+229
  • Bermuda+1
  • Bhutan (འབྲུག)+975
  • Bolivia+591
  • Bosnia and Herzegovina (Босна и Херцеговина)+387
  • Botswana+267
  • Brazil (Brasil)+55
  • British Indian Ocean Territory+246
  • British Virgin Islands+1
  • Brunei+673
  • Bulgaria (България)+359
  • Burkina Faso+226
  • Burundi (Uburundi)+257
  • Cambodia (កម្ពុជា)+855
  • Cameroon (Cameroun)+237
  • Canada+1
  • Cape Verde (Kabu Verdi)+238
  • Caribbean Netherlands+599
  • Cayman Islands+1
  • Central African Republic (République centrafricaine)+236
  • Chad (Tchad)+235
  • Chile+56
  • China (中国)+86
  • Christmas Island+61
  • Cocos (Keeling) Islands+61
  • Colombia+57
  • Comoros (‫جزر القمر‬‎)+269
  • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
  • Congo (Republic) (Congo-Brazzaville)+242
  • Cook Islands+682
  • Costa Rica+506
  • Côte d’Ivoire+225
  • Croatia (Hrvatska)+385
  • Cuba+53
  • Curaçao+599
  • Cyprus (Κύπρος)+357
  • Czech Republic (Česká republika)+420
  • Denmark (Danmark)+45
  • Djibouti+253
  • Dominica+1
  • Dominican Republic (República Dominicana)+1
  • Ecuador+593
  • Egypt (‫مصر‬‎)+20
  • El Salvador+503
  • Equatorial Guinea (Guinea Ecuatorial)+240
  • Eritrea+291
  • Estonia (Eesti)+372
  • Eswatini+268
  • Ethiopia+251
  • Falkland Islands (Islas Malvinas)+500
  • Faroe Islands (Føroyar)+298
  • Fiji+679
  • Finland (Suomi)+358
  • France+33
  • French Guiana (Guyane française)+594
  • French Polynesia (Polynésie française)+689
  • Gabon+241
  • Gambia+220
  • Georgia (საქართველო)+995
  • Germany (Deutschland)+49
  • Ghana (Gaana)+233
  • Gibraltar+350
  • Greece (Ελλάδα)+30
  • Greenland (Kalaallit Nunaat)+299
  • Grenada+1
  • Guadeloupe+590
  • Guam+1
  • Guatemala+502
  • Guernsey+44
  • Guinea (Guinée)+224
  • Guinea-Bissau (Guiné Bissau)+245
  • Guyana+592
  • Haiti+509
  • Honduras+504
  • Hong Kong (香港)+852
  • Hungary (Magyarország)+36
  • Iceland (Ísland)+354
  • India (भारत)+91
  • Indonesia+62
  • Iran (‫ایران‬‎)+98
  • Iraq (‫العراق‬‎)+964
  • Ireland+353
  • Isle of Man+44
  • Israel (‫ישראל‬‎)+972
  • Italy (Italia)+39
  • Jamaica+1
  • Japan (日本)+81
  • Jersey+44
  • Jordan (‫الأردن‬‎)+962
  • Kazakhstan (Казахстан)+7
  • Kenya+254
  • Kiribati+686
  • Kosovo+383
  • Kuwait (‫الكويت‬‎)+965
  • Kyrgyzstan (Кыргызстан)+996
  • Laos (ລາວ)+856
  • Latvia (Latvija)+371
  • Lebanon (‫لبنان‬‎)+961
  • Lesotho+266
  • Liberia+231
  • Libya (‫ليبيا‬‎)+218
  • Liechtenstein+423
  • Lithuania (Lietuva)+370
  • Luxembourg+352
  • Macau (澳門)+853
  • North Macedonia (Македонија)+389
  • Madagascar (Madagasikara)+261
  • Malawi+265
  • Malaysia+60
  • Maldives+960
  • Mali+223
  • Malta+356
  • Marshall Islands+692
  • Martinique+596
  • Mauritania (‫موريتانيا‬‎)+222
  • Mauritius (Moris)+230
  • Mayotte+262
  • Mexico (México)+52
  • Micronesia+691
  • Moldova (Republica Moldova)+373
  • Monaco+377
  • Mongolia (Монгол)+976
  • Montenegro (Crna Gora)+382
  • Montserrat+1
  • Morocco (‫المغرب‬‎)+212
  • Mozambique (Moçambique)+258
  • Myanmar (Burma) (မြန်မာ)+95
  • Namibia (Namibië)+264
  • Nauru+674
  • Nepal (नेपाल)+977
  • Netherlands (Nederland)+31
  • New Caledonia (Nouvelle-Calédonie)+687
  • New Zealand+64
  • Nicaragua+505
  • Niger (Nijar)+227
  • Nigeria+234
  • Niue+683
  • Norfolk Island+672
  • North Korea (조선 민주주의 인민 공화국)+850
  • Northern Mariana Islands+1
  • Norway (Norge)+47
  • Oman (‫عُمان‬‎)+968
  • Pakistan (‫پاکستان‬‎)+92
  • Palau+680
  • Palestine (‫فلسطين‬‎)+970
  • Panama (Panamá)+507
  • Papua New Guinea+675
  • Paraguay+595
  • Peru (Perú)+51
  • Philippines+63
  • Poland (Polska)+48
  • Portugal+351
  • Puerto Rico+1
  • Qatar (‫قطر‬‎)+974
  • Réunion (La Réunion)+262
  • Romania (România)+40
  • Russia (Россия)+7
  • Rwanda+250
  • Saint Barthélemy+590
  • Saint Helena+290
  • Saint Kitts and Nevis+1
  • Saint Lucia+1
  • Saint Martin (Saint-Martin (partie française))+590
  • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
  • Saint Vincent and the Grenadines+1
  • Samoa+685
  • San Marino+378
  • São Tomé and Príncipe (São Tomé e Príncipe)+239
  • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
  • Senegal (Sénégal)+221
  • Serbia (Србија)+381
  • Seychelles+248
  • Sierra Leone+232
  • Singapore+65
  • Sint Maarten+1
  • Slovakia (Slovensko)+421
  • Slovenia (Slovenija)+386
  • Solomon Islands+677
  • Somalia (Soomaaliya)+252
  • South Africa+27
  • South Korea (대한민국)+82
  • South Sudan (‫جنوب السودان‬‎)+211
  • Spain (España)+34
  • Sri Lanka (ශ්‍රී ලංකාව)+94
  • Sudan (‫السودان‬‎)+249
  • Suriname+597
  • Svalbard and Jan Mayen+47
  • Sweden (Sverige)+46
  • Switzerland (Schweiz)+41
  • Syria (‫سوريا‬‎)+963
  • Taiwan (台灣)+886
  • Tajikistan+992
  • Tanzania+255
  • Thailand (ไทย)+66
  • Timor-Leste+670
  • Togo+228
  • Tokelau+690
  • Tonga+676
  • Trinidad and Tobago+1
  • Tunisia (‫تونس‬‎)+216
  • Turkey (Türkiye)+90
  • Turkmenistan+993
  • Turks and Caicos Islands+1
  • Tuvalu+688
  • U.S. Virgin Islands+1
  • Uganda+256
  • Ukraine (Україна)+380
  • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
  • United Kingdom+44
  • United States+1
  • Uruguay+598
  • Uzbekistan (Oʻzbekiston)+998
  • Vanuatu+678
  • Vatican City (Città del Vaticano)+39
  • Venezuela+58
  • Vietnam (Việt Nam)+84
  • Wallis and Futuna (Wallis-et-Futuna)+681
  • Western Sahara (‫الصحراء الغربية‬‎)+212
  • Yemen (‫اليمن‬‎)+967
  • Zambia+260
  • Zimbabwe+263
  • Åland Islands+358
Дякуємо! Ваше повідомлення надіслано.
Відправлення не вдалося. Будь ласка, виправте помилки та спробуйте ще раз.