Hreflang to atrybut HTML (rel="alternate" hreflang="xx"), który mówi Google: „ta strona ma wersje w innych językach lub dla innych krajów – oto linki do nich”. Bez hreflang: Google może wyświetlić polską wersję strony użytkownikowi z Niemiec (bo ma wyższy autorytet), albo traktować polską i angielską wersję jako duplikaty (ta sama treść, inny język = duplikat w oczach algorytmu). Hreflang rozwiązuje oba problemy – kieruje właściwą wersję językową do właściwego użytkownika.
Spis treści
ToggleKiedy potrzebujesz hreflang
Tak, potrzebujesz gdy masz stronę w wielu językach (polskim + angielskim + niemieckim) lub wielu wersjach regionalnych (angielski dla USA + angielski dla UK + angielski dla Australii). Konkretne scenariusze:
Wielojęzyczna strona firmowa: twojafirma.pl (PL) + twojafirma.com/en/ (EN) + twojafirma.de (DE). Hreflang mówi Google: „/en/ to angielska wersja tego samego contentu co /”.
E-commerce międzynarodowy: sklep.pl (PLN, polski) + sklep.de (EUR, niemiecki) + shop.com (USD, angielski). Te same produkty, inne języki i waluty. Bez hreflang: Google może wyświetlić niemiecką wersję polskiemu użytkownikowi (bo .de ma więcej linków).
Blog z przetłumaczonymi artykułami: artykuł po polsku + tłumaczenie angielskie. Hreflang łączy je → Google wie, że to ta sama treść w dwóch językach, nie duplikat.
Nie potrzebujesz gdy: strona jest tylko w jednym języku (nawet jeśli odwiedzają ją ludzie z różnych krajów – hreflang to o wersjach językowych, nie o lokalizacji użytkownika).
Jak wygląda tag hreflang
W sekcji <head> każdej strony:
<link rel="alternate" hreflang="pl" href="https://twojafirma.pl/artykul" />
<link rel="alternate" hreflang="en" href="https://twojafirma.com/en/article" />
<link rel="alternate" hreflang="de" href="https://twojafirma.de/artikel" />
<link rel="alternate" hreflang="x-default" href="https://twojafirma.com/en/article" />
Czytamy: „ta strona ma 3 wersje językowe: polską, angielską, niemiecką. Domyślna (x-default) to angielska – wyświetl ją użytkownikom, dla których nie ma dedykowanej wersji (np. Japończyk)”.
Kluczowe zasady:
Dwukierunkowe. Hreflang musi być na obu stronach – polska strona wskazuje na angielską I angielska wskazuje na polską. Jednokierunkowy hreflang (polska wskazuje na angielską, ale angielska nie wskazuje na polską) → Google ignoruje.
Self-referencing. Każda strona musi wskazywać na siebie – polska strona ma hreflang=”pl” z linkiem do siebie + hreflang=”en” z linkiem do angielskiej. Brak self-reference → Google ignoruje.
x-default. Opcjonalny ale zalecany – wskazuje domyślną wersję dla użytkowników, których język nie jest obsługiwany. Najczęściej: angielska wersja.
Kody języków i krajów
Hreflang używa kodów ISO 639-1 (język) i opcjonalnie ISO 3166-1 Alpha-2 (kraj):
| Hreflang | Znaczenie | Kiedy używać |
|---|---|---|
hreflang="pl" |
Polski (dowolny kraj) | Jedna polska wersja dla wszystkich |
hreflang="en" |
Angielski (dowolny kraj) | Jedna angielska wersja dla wszystkich |
hreflang="de" |
Niemiecki | Jedna niemiecka wersja |
hreflang="en-US" |
Angielski dla USA | Osobna wersja dla Ameryki (USD, date format, spelling) |
hreflang="en-GB" |
Angielski dla UK | Osobna wersja dla Wielkiej Brytanii (GBP) |
hreflang="pt-BR" |
Portugalski dla Brazylii | Brazylijski vs europejski portugalski |
hreflang="x-default" |
Domyślna wersja | Dla użytkowników bez dedykowanej wersji językowej |
Język + kraj: używaj tylko gdy masz osobne wersje per kraj tego samego języka (en-US vs en-GB). Jeśli masz jedną wersję angielską: hreflang="en" (bez kodu kraju). Nie pisz hreflang="en-EU" – EU to nie kraj w ISO 3166.
3 sposoby wdrożenia hreflang
1. Tagi HTML w <head> (najczęstsze)
Dodaj tagi <link rel="alternate"> w sekcji <head> każdej strony. Na WordPressie: wtyczka WPML lub Polylang robi to automatycznie. Ręcznie: w motywie → header.php → PHP generujący tagi per język.
2. HTTP header (dla nie-HTML: PDF, dokumenty)
Link: <https://twojafirma.pl/artykul>; rel="alternate"; hreflang="pl",
<https://twojafirma.com/en/article>; rel="alternate"; hreflang="en"
Używaj dla plików, które nie mają <head> (PDF, API). Na Apache/LiteSpeed: .htaccess → Header set Link. Na Nginx: add_header Link.
3. Sitemap XML
<url>
<loc>https://twojafirma.pl/artykul</loc>
<xhtml:link rel="alternate" hreflang="pl" href="https://twojafirma.pl/artykul" />
<xhtml:link rel="alternate" hreflang="en" href="https://twojafirma.com/en/article" />
<xhtml:link rel="alternate" hreflang="de" href="https://twojafirma.de/artikel" />
</url>
Przydatne gdy masz dużo stron (tysiące) i nie chcesz dodawać tagów HTML per strona. WPML generuje sitemap z hreflang automatycznie.
Hreflang na WordPress – WPML i Polylang
WPML (płatny ~$39/rok)
WPML to najpopularniejsza wtyczka do wielojęzyczności WordPress – tłumaczysz treści (wpisy, strony, produkty WooCommerce, menu, widgety, Schema), WPML automatycznie generuje hreflang, przełącznik języków i odpowiednie URL-e (/en/, /de/ lub subdomeny/domeny).
Konfiguracja: WPML → Języki → dodaj języki (PL, EN, DE) → tłumacz treści per strona → WPML dodaje hreflang automatycznie. Sprawdź: F12 → Elements → szukaj hreflang w head.
Polylang (darmowy + Pro)
Polylang – darmowa alternatywa WPML. Darmowa wersja: wielojęzyczność treści + hreflang + przełącznik języków. Pro ($99/rok): tłumaczenie URL-i, WooCommerce integration. Prostszy niż WPML, ale mniej funkcji (szczególnie dla WooCommerce).
Najczęstsze błędy hreflang
Brak dwukierunkowości. Polska strona wskazuje na angielską, ale angielska nie wskazuje na polską → Google ignoruje hreflang na obu. Zawsze obie strony muszą się nawzajem wskazywać.
Brak self-reference. Polska strona wskazuje na angielską i niemiecką, ale nie na siebie (brak hreflang="pl" z linkiem do siebie) → Google ignoruje. Każda strona musi mieć hreflang do siebie + do wszystkich wersji językowych.
Hreflang na niekanoniczne URL. Strona A ma hreflang wskazujący na stronę B, ale B ma canonical na stronę C → sprzeczność → Google ignoruje. Hreflang musi wskazywać na kanoniczne URL-e (te same co canonical).
Złe kody języków. hreflang="uk" to ukraiński (ISO 639-1: uk), nie angielski brytyjski (to en-GB). hreflang="cz" nie istnieje – czeski to cs. hreflang="jp" nie istnieje – japoński to ja. Sprawdź kody: Wikipedia → ISO 639-1.
Hreflang na 404/redirect. Hreflang wskazuje na stronę, która zwraca 404 lub 301 → Google ignoruje. Po usunięciu/przekierowaniu strony: zaktualizuj hreflang na pozostałych wersjach.
Jak sprawdzić hreflang
Google Search Console: Międzynarodowe targetowanie → sprawdź błędy hreflang (brak zwrotnego tagu, złe kody, linki na 404). Uwaga: GSC od 2024 ograniczył ten raport – ale błędy krytyczne nadal pokazuje.
Screaming Frog: crawl strony → zakładka „Hreflang” → pełna analiza: brakujące return tags, non-canonical hreflang, missing self-reference, invalid language codes. Najlepsze narzędzie do audytu hreflang.
Ahrefs / Semrush: Site Audit → sekcja „Hreflang” → lista błędów per strona.
Ręcznie: otwórz stronę → F12 → Elements → Ctrl+F → szukaj hreflang. Sprawdź: czy jest self-reference, czy linki prowadzą do istniejących stron, czy kody językowe są poprawne.
Struktury URL dla wielojęzyczności
| Struktura | Przykład | Zalety | Wady |
|---|---|---|---|
| Subfolder | twojafirma.pl/en/, twojafirma.pl/de/ | Łatwa konfiguracja, jeden hosting, jeden autorytet domeny | Mniej „lokalne” niż ccTLD |
| Subdomena | en.twojafirma.pl, de.twojafirma.pl | Łatwa separacja | Google traktuje subdomeny jako osobne strony (mniejszy autorytet) |
| ccTLD | twojafirma.pl, twojafirma.de, twojafirma.com | Najsilniejszy sygnał lokalny (Google wie że .de = Niemcy) | Drogie (wiele domen), osobny autorytet per domena |
| Parametr URL | twojafirma.pl?lang=en | Proste technicznie | ❌ NIE ZALECANE – Google nie zaleca parametrów do wielojęzyczności |
Rekomendacja: subfoldery (/en/, /de/) – najprostsze, najczęstsze, pełny autorytet domeny współdzielony między językami. ccTLD (osobne domeny per kraj): dla dużych firm z budżetem na link building per domena. Subdomeny: rzadko zalecane (Google traktuje jak osobne strony).
Hreflang a SEO – wpływ na pozycje
Hreflang nie jest bezpośrednim czynnikiem rankingowym – nie poprawi pozycji polskiej strony na polskie frazy. Ale:
Prawidłowe kierowanie użytkowników. Niemiecki użytkownik widzi niemiecką wersję zamiast polskiej → lepsze doświadczenie → niższy bounce rate → pośrednio lepsze pozycje.
Brak kanibalizacji. Bez hreflang: polska i angielska wersja „walczą” o te same frazy w Google (duplikacja) → autorytet rozproszony. Z hreflang: Google wie, że to różne wersje → polska rankuje na polskie frazy, angielska na angielskie → zero kanibalizacji.
Konsolidacja autorytetu. Hreflang mówi Google: „te strony są powiązane” → linki do angielskiej wersji częściowo wzmacniają polską (i odwrotnie). To nie jest transfer jak canonical, ale sygnał powiązania.
Najczęściej zadawane pytania
Czy hreflang zastępuje canonical?
Nie – to dwa osobne mechanizmy. Canonical mówi „to jest oryginalna wersja tej strony” (duplikaty). Hreflang mówi „ta strona ma wersje w innych językach” (tłumaczenia). Każda strona powinna mieć oba: canonical (self-referencing) + hreflang (wskazujące na wersje językowe).
Czy Google wymaga hreflang?
Nie – Google potrafi sam wykryć wersje językowe (na podstawie języka treści, ccTLD, ustawień w Search Console). Ale: hreflang daje jednoznaczny sygnał – zamiast „Google, zgadnij” → „Google, oto dokładna mapa moich wersji językowych”. Dla stron z >2 językami: hreflang jest praktycznie obowiązkowy.
Czy Bing i inne wyszukiwarki obsługują hreflang?
Bing: nie obsługuje hreflang – używa tagu <meta http-equiv="content-language"> i ustawień w Bing Webmaster Tools. Yandex: obsługuje hreflang. Baidu: nie. W praktyce: hreflang jest głównie dla Google (90%+ rynku wyszukiwarek w większości krajów).
Ile wersji językowych mogę mieć?
Bez limitu – Google obsługuje hreflang dla dowolnej liczby języków/regionów. Wikipedia ma hreflang do 300+ wersji językowych. Jedyne ograniczenie: każda strona musi mieć komplet tagów hreflang (self + wszystkie wersje) – przy 50 językach to 50 tagów w head per strona. Dla dużej liczby: użyj sitemap zamiast tagów HTML.
Czy muszę tłumaczyć CAŁĄ stronę żeby użyć hreflang?
Nie – hreflang dotyczy konkretnych stron, nie całej witryny. Jeśli masz 100 stron po polsku i 20 przetłumaczonych na angielski: hreflang dodajesz tylko na tych 20 stronach (wzajemne wskazanie PL ↔ EN). Pozostałe 80 stron: bez hreflang (bo nie mają angielskiej wersji).






