📘 Що таке hreflang?
Hreflang — HTML-атрибут, який повідомляє Google та іншим пошуковим системам про альтернативні мовні та регіональні версії сторінки. Це запобігає проблемам з дублікатами контенту та показує користувачам правильну версію сайту.
- 🌍 Мовні версії: uk (українська), en (англійська), de (німецька)
- 📍 Регіональні версії: en-US (англійська США), en-GB (англійська Британія)
- 🔄 Запобігає duplicate content — Google розуміє, що це варіанти однієї сторінки
- 🎯 Покращує UX — користувачі бачать версію своєю мовою
Частина 1: Синтаксис hreflang
Базовий приклад
<!-- Українська версія сторінки -->
<link rel="alternate" hreflang="uk" href="https://scientific-calculators.com/uk/quadratic-equation" />
<!-- Англійська версія -->
<link rel="alternate" hreflang="en" href="https://scientific-calculators.com/en/quadratic-equation" />
<!-- Російська версія -->
<link rel="alternate" hreflang="ru" href="https://scientific-calculators.com/ru/quadratic-equation" />
<!-- Німецька версія -->
<link rel="alternate" hreflang="de" href="https://scientific-calculators.com/de/quadratic-equation" />
<!-- x-default для всіх інших мов (fallback) -->
<link rel="alternate" hreflang="x-default" href="https://scientific-calculators.com/en/quadratic-equation" />
📌 Важливі правила:
- Взаємність (reciprocity): кожна сторінка повинна посилатися на всі інші версії + на себе
- Абсолютні URL: завжди повний URL з https://
- Self-referencing: сторінка повинна мати hreflang на саму себе
- x-default обов'язковий: fallback версія для невідомих мов/регіонів
Мовні коди (ISO 639-1)
| Мова |
Код |
Приклад hreflang |
| Українська |
uk |
hreflang="uk" |
| Англійська |
en |
hreflang="en" |
| Російська |
ru |
hreflang="ru" |
| Німецька |
de |
hreflang="de" |
| Французька |
fr |
hreflang="fr" |
| Іспанська |
es |
hreflang="es" |
| Польська |
pl |
hreflang="pl" |
Регіональні варіанти (мова + країна)
<!-- Англійська для США -->
<link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<!-- Англійська для Великобританії -->
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<!-- Англійська для Канади -->
<link rel="alternate" hreflang="en-CA" href="https://example.com/ca/" />
<!-- Іспанська для Іспанії -->
<link rel="alternate" hreflang="es-ES" href="https://example.com/es/" />
<!-- Іспанська для Мексики -->
<link rel="alternate" hreflang="es-MX" href="https://example.com/mx/" />
<!-- Іспанська для Аргентини -->
<link rel="alternate" hreflang="es-AR" href="https://example.com/ar/" />
<!-- Португальська для Бразилії -->
<link rel="alternate" hreflang="pt-BR" href="https://example.com/br/" />
<!-- Португальська для Португалії -->
<link rel="alternate" hreflang="pt-PT" href="https://example.com/pt/" />
Частина 2: Три методи реалізації hreflang
1
HTML теги в <head> (найпростіший)
Додайте теги безпосередньо у <head> кожної сторінки:
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8">
<title>Калькулятор квадратного рівняння</title>
<!-- Hreflang теги -->
<link rel="alternate" hreflang="uk" href="https://scientific-calculators.com/uk/quadratic-equation" />
<link rel="alternate" hreflang="en" href="https://scientific-calculators.com/en/quadratic-equation" />
<link rel="alternate" hreflang="ru" href="https://scientific-calculators.com/ru/quadratic-equation" />
<link rel="alternate" hreflang="de" href="https://scientific-calculators.com/de/quadratic-equation" />
<link rel="alternate" hreflang="x-default" href="https://scientific-calculators.com/en/quadratic-equation" />
</head>
<body>
...
</body>
</html>
✅ Переваги:
- Простий у реалізації
- Не потрібен доступ до сервера
- Працює на статичних сайтах
⚠️ Недоліки:
- Збільшує розмір HTML
- Важко підтримувати при багатьох мовах
- Потрібно оновлювати всі сторінки при додаванні нової мови
2
HTTP заголовки (для PDF/файлів)
Налаштуйте сервер для відправки Link HTTP-header:
Link: <https://scientific-calculators.com/uk/guide.pdf>; rel="alternate"; hreflang="uk",
<https://scientific-calculators.com/en/guide.pdf>; rel="alternate"; hreflang="en",
<https://scientific-calculators.com/ru/guide.pdf>; rel="alternate"; hreflang="ru",
<https://scientific-calculators.com/en/guide.pdf>; rel="alternate"; hreflang="x-default"
Apache (.htaccess):
<Files "guide.pdf">
Header add Link '<https://scientific-calculators.com/uk/guide.pdf>; rel="alternate"; hreflang="uk"'
Header add Link '<https://scientific-calculators.com/en/guide.pdf>; rel="alternate"; hreflang="en"'
Header add Link '<https://scientific-calculators.com/en/guide.pdf>; rel="alternate"; hreflang="x-default"'
</Files>
Nginx:
location ~ \.pdf$ {
add_header Link '<https://scientific-calculators.com/uk/$uri>; rel="alternate"; hreflang="uk"';
add_header Link '<https://scientific-calculators.com/en/$uri>; rel="alternate"; hreflang="en"';
add_header Link '<https://scientific-calculators.com/en/$uri>; rel="alternate"; hreflang="x-default"';
}
3
XML Sitemap (найкращий для великих сайтів)
Додайте hreflang у файл sitemap.xml:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<!-- Українська версія -->
<url>
<loc>https://scientific-calculators.com/uk/quadratic-equation</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://scientific-calculators.com/uk/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://scientific-calculators.com/en/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://scientific-calculators.com/ru/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://scientific-calculators.com/de/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://scientific-calculators.com/en/quadratic-equation"/>
</url>
<!-- Англійська версія -->
<url>
<loc>https://scientific-calculators.com/en/quadratic-equation</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://scientific-calculators.com/uk/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://scientific-calculators.com/en/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://scientific-calculators.com/ru/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://scientific-calculators.com/de/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://scientific-calculators.com/en/quadratic-equation"/>
</url>
<!-- Російська версія -->
<url>
<loc>https://scientific-calculators.com/ru/quadratic-equation</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://scientific-calculators.com/uk/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://scientific-calculators.com/en/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://scientific-calculators.com/ru/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://scientific-calculators.com/de/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://scientific-calculators.com/en/quadratic-equation"/>
</url>
<!-- Німецька версія -->
<url>
<loc>https://scientific-calculators.com/de/quadratic-equation</loc>
<xhtml:link rel="alternate" hreflang="uk"
href="https://scientific-calculators.com/uk/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://scientific-calculators.com/en/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://scientific-calculators.com/ru/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://scientific-calculators.com/de/quadratic-equation"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://scientific-calculators.com/en/quadratic-equation"/>
</url>
</urlset>
✅ Рекомендовано для великих багатомовних сайтів!
- Централізоване управління (один файл)
- Легко генерувати автоматично
- Не збільшує розмір HTML
- Легко валідувати
Частина 3: Автогенерація hreflang
JavaScript генератор
// hreflang-generator.js
const languages = ['uk', 'en', 'ru', 'de', 'fr'];
const defaultLang = 'en';
// Структура URL для різних мов
function getUrlForLang(lang, path) {
return `https://scientific-calculators.com/${lang}${path}`;
}
// Додати hreflang теги у <head>
function addHreflangTags() {
const currentPath = window.location.pathname;
const head = document.head;
// Видалити старі теги (якщо є)
document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(link => link.remove());
// Додати теги для кожної мови
languages.forEach(lang => {
const link = document.createElement('link');
link.rel = 'alternate';
link.hreflang = lang;
link.href = getUrlForLang(lang, currentPath);
head.appendChild(link);
});
// Додати x-default
const xDefaultLink = document.createElement('link');
xDefaultLink.rel = 'alternate';
xDefaultLink.hreflang = 'x-default';
xDefaultLink.href = getUrlForLang(defaultLang, currentPath);
head.appendChild(xDefaultLink);
}
// Викликати при завантаженні сторінки
document.addEventListener('DOMContentLoaded', addHreflangTags);
Node.js скрипт для генерації Sitemap
// generate-sitemap-hreflang.js
const fs = require('fs');
const languages = ['uk', 'en', 'ru', 'de'];
const defaultLang = 'en';
const baseUrl = 'https://scientific-calculators.com';
// Список всіх сторінок сайту
const pages = [
'/quadratic-equation',
'/derivative-calculator',
'/matrix-calculator',
'/physics/kinematics',
'/chemistry/molar-mass',
// ... додайте всі сторінки
];
function generateSitemap() {
let xml = `<?xml version="1.0" encoding="UTF-8"?>\n`;
xml += `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"\n`;
xml += ` xmlns:xhtml="http://www.w3.org/1999/xhtml">\n\n`;
pages.forEach(page => {
languages.forEach(lang => {
xml += ` <url>\n`;
xml += ` <loc>${baseUrl}/${lang}${page}</loc>\n`;
// Додати hreflang для всіх мов
languages.forEach(altLang => {
xml += ` <xhtml:link rel="alternate" hreflang="${altLang}" `;
xml += `href="${baseUrl}/${altLang}${page}"/>\n`;
});
// Додати x-default
xml += ` <xhtml:link rel="alternate" hreflang="x-default" `;
xml += `href="${baseUrl}/${defaultLang}${page}"/>\n`;
xml += ` </url>\n\n`;
});
});
xml += `</urlset>`;
fs.writeFileSync('sitemap.xml', xml);
console.log('✅ Sitemap згенеровано: sitemap.xml');
}
generateSitemap();
# Запуск
node generate-sitemap-hreflang.js
Частина 4: Валідація hreflang
1
Google Search Console
- Відкрийте Google Search Console
- Перейдіть у Experience → International Targeting → Language
- Перевірте помилки:
- ⚠️ No return tags — відсутня взаємність
- ⚠️ Incorrect hreflang — неправильний код мови
- ⚠️ Missing x-default — відсутній fallback
3
Валідація через командний рядок
# Перевірити hreflang у HTML
curl -s https://scientific-calculators.com/uk/page | grep 'hreflang'
# Перевірити HTTP headers
curl -I https://scientific-calculators.com/uk/page | grep -i link
# Завантажити та перевірити sitemap.xml
curl -s https://scientific-calculators.com/sitemap.xml | grep 'xhtml:link'
Частина 5: Поширені помилки
❌ Помилка 1: Відсутня взаємність (non-reciprocal)
<!-- ❌ НЕПРАВИЛЬНО: uk версія не посилається на en -->
<!-- /uk/page -->
<link rel="alternate" hreflang="uk" href="/uk/page" />
<!-- /en/page -->
<link rel="alternate" hreflang="en" href="/en/page" />
<link rel="alternate" hreflang="uk" href="/uk/page" />
<!-- ✅ ПРАВИЛЬНО: обидві сторінки посилаються одна на одну -->
<!-- /uk/page -->
<link rel="alternate" hreflang="uk" href="/uk/page" />
<link rel="alternate" hreflang="en" href="/en/page" />
<link rel="alternate" hreflang="x-default" href="/en/page" />
<!-- /en/page -->
<link rel="alternate" hreflang="uk" href="/uk/page" />
<link rel="alternate" hreflang="en" href="/en/page" />
<link rel="alternate" hreflang="x-default" href="/en/page" />
❌ Помилка 2: Відносні URL замість абсолютних
<!-- ❌ НЕПРАВИЛЬНО -->
<link rel="alternate" hreflang="uk" href="/uk/page" />
<link rel="alternate" hreflang="en" href="/en/page" />
<!-- ✅ ПРАВИЛЬНО -->
<link rel="alternate" hreflang="uk" href="https://example.com/uk/page" />
<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
❌ Помилка 3: Відсутній x-default
<!-- ❌ НЕПРАВИЛЬНО: немає fallback для невідомих мов -->
<link rel="alternate" hreflang="uk" href="https://example.com/uk/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<!-- ✅ ПРАВИЛЬНО: є fallback -->
<link rel="alternate" hreflang="uk" href="https://example.com/uk/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/" />
❌ Помилка 4: Неправильні коди мов
<!-- ❌ НЕПРАВИЛЬНО -->
<link rel="alternate" hreflang="ua" href="..." /> <!-- ua = код країни, не мови -->
<link rel="alternate" hreflang="eng" href="..." /> <!-- eng неправильний код -->
<link rel="alternate" hreflang="en_US" href="..." /> <!-- підкреслення _ -->
<!-- ✅ ПРАВИЛЬНО -->
<link rel="alternate" hreflang="uk" href="..." />
<link rel="alternate" hreflang="en" href="..." />
<link rel="alternate" hreflang="en-US" href="..." /> <!-- дефіс - -->
Частина 6: Best Practices
✅ Рекомендації:
- Використовуйте Sitemap XML — найкраще для великих сайтів (не збільшує HTML, легко оновлювати)
- Завжди додавайте x-default — вкажіть англійську версію як fallback
- Self-referencing обов'язковий — кожна сторінка посилається на саму себе
- Consistency — використовуйте лише один метод (HTML теги АБО Sitemap АБО HTTP headers)
- Canonical tags — не використовуйте canonical у поєднанні з hreflang (або зробіть canonical = self)
- Tested thoroughly — перевірте через Google Search Console
- URL structure — використовуйте ccTLDs (
.com.ua, .co.uk) АБО subdomains (uk.example.com) АБО subdirectories (/uk/)
Рекомендована структура URL
| Метод |
Приклад |
Переваги |
Недоліки |
| Subdirectories |
/uk/, /en/ |
Легко налаштувати, єдиний домен |
Складніше geo-targeting |
| Subdomains |
uk.site.com, en.site.com |
Окремий контент, легко масштабувати |
Розділений авторитет домену |
| ccTLDs |
.com.ua, .co.uk |
Найкраще для geo-targeting |
Дорого, складне управління |
| URL parameters |
?lang=uk |
— |
❌ Не рекомендовано для SEO |
Висновок
Hreflang — критично важливий елемент для багатомовних сайтів:
- ✅ Запобігає duplicate content — Google розуміє варіанти однієї сторінки
- ✅ Покращує UX — користувачі бачать версію своєю мовою
- ✅ Підвищує CTR у пошуку — правильна мова = більше кліків
- ✅ Международний SEO — кращі позиції в локальних пошуках
🚀 Рекомендований workflow:
- Оберіть URL структуру: subdirectories (
/uk/) — найкраще для малих/середніх проектів
- Реалізуйте через Sitemap XML — централізоване управління
- Автоматизуйте генерацію — Node.js скрипт для оновлення sitemap
- Додайте x-default на англійську версію
- Валідуйте через Google Search Console
- Моніторте помилки щомісяця