Baza wiedzy Zrób darmowy audyt

Hreflang — jak poprawnie oznaczyć wersje językowe i krajowe strony

Aktualizacja: 18.10.2026

Hreflang to znaczniki, którymi mówisz Google: „ta strona ma też wersję angielską i niemiecką, a tu są ich adresy”. Dzięki nim Niemiec z wyszukiwarki trafia na wersję niemiecką, a nie polską. Źle ustawione nie zablokują strony, ale Google po cichu je zignoruje i może pokazywać użytkownikom nie tę wersję językową, którą trzeba.

Kiedy hreflang jest potrzebny

  • Masz tę samą treść w kilku językach — np. sklep po polsku, angielsku i niemiecku.
  • Masz jeden język dla kilku krajów — np. wersja niemiecka dla Niemiec i osobna dla Austrii (inne ceny, waluta, dostawa). Bez hreflang Google może uznać je za duplikaty i pokazywać jedną z nich w obu krajach.

Jeśli strona jest tylko po polsku i tylko dla Polski, hreflang nie jest potrzebny. Audyt pokaże wtedy informację „Strona nie deklaruje wersji językowych (hreflang) w kodzie ani w nagłówkach — potrzebne tylko, jeśli masz kilka wersji językowych” — to nie jest błąd, nic nie musisz robić. Jeśli podajesz hreflang wyłącznie w mapie witryny, audyt go nie zobaczy (mapy pod tym kątem nie sprawdza) — wtedy ta informacja nic nie znaczy.

Jak wygląda poprawny hreflang

Przykład dla strony w trzech wersjach. Ten sam komplet znaczników musi stać w sekcji <head> każdej z tych wersji:

<link rel="alternate" hreflang="pl" href="https://example.com/o-nas/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about-us/" />
<link rel="alternate" hreflang="de-AT" href="https://example.com/at/uber-uns/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about-us/" />

Zasady, które muszą być spełnione naraz:

  • Poprawne kody. Najpierw język według ISO 639-1 (dwie litery: pl, en, de), opcjonalnie kraj według ISO 3166-1 alfa-2 (de-AT, en-GB). Sam kod kraju nie działa: be to dla Google język białoruski, a nie Belgia. Wielkość liter nie ma znaczenia, ale zwyczajowo kraj pisze się wielkimi literami.
  • Typowy błąd: en-UK. Wielka Brytania ma w ISO kod GB, więc poprawnie jest en-GB. Google wprost pisze, że UK, EU czy UN w hreflang nie mają żadnego efektu. Podobnie z innymi „intuicyjnymi” kodami — sprawdzaj je w tabeli ISO, a nie z pamięci.
  • Każda wersja wskazuje siebie i wszystkie pozostałe. Strona polska ma na liście też samą siebie (hreflang="pl"), a nie tylko wersje obce.
  • Zwrotność. Jeśli polska wersja wskazuje angielską, angielska musi wskazywać polską. Para, w której link idzie tylko w jedną stronę, jest przez Google ignorowana.
  • x-default — adres dla wszystkich, do których żadna wersja nie pasuje (np. Włoch, gdy masz tylko PL, EN i DE). Zwykle wskazuje wersję angielską albo stronę wyboru języka. Google go zaleca, ale nie jest obowiązkowy.
  • Jeden adres na kod. Ten sam kod (np. en) nie może prowadzić do dwóch różnych adresów — Google nie wie wtedy, którą wersję wybrać.
  • Pełne adresy, które działają. Każdy adres z https:// i domeną (nie samo /en/), zwracający kod 200 — nie przekierowanie i nie 404. Używaj wersji https, nie http.
  • Zgodność z canonical. Każda wersja językowa ma canonical wskazujący na samą siebie (albo na stronę w tym samym języku). Częsty błąd: wersja angielska ma canonical na polską — wtedy mówisz Google „to jest kopia polskiej”, a hreflang mówi „to osobna wersja”. Sprzeczne sygnały kończą się zwykle tym, że wersja angielska wypada z wyników.

Hreflang można też podać w nagłówku HTTP albo w mapie strony XML — dla Google te trzy metody są równoważne. Wystarczy jedna; mieszanie ich zwiększa ryzyko sprzeczności.

Co dokładnie wykrył audyt

Audyt czyta znaczniki <link rel="alternate" hreflang="…"> z kodu sprawdzanej strony, a jeśli ich tam nie ma — hreflang z nagłówka HTTP Link. Pokazuje listę (kod języka → adres). Jeśli wszystko jest w porządku, zobaczysz „Strona deklaruje N wersji językowych (hreflang) i są ustawione poprawnie”. Problemy są zbierane w jednym komunikacie „Popraw tagi hreflang”:

  • Brak wskazania na samą siebie (do poprawy) — sprawdzanej strony nie ma na jej własnej liście wersji. Dopisz znacznik z jej językiem i jej adresem.
  • Błędne kody (do poprawy) — audyt sprawdza język z listą ISO 639-1, a kraj z listą ISO 3166-1 i przy każdym błędnym kodzie podaje powód: „nieznany kod języka” (np. polish, pl_PL z podkreśleniem), „Google obsługuje tylko dwuliterowe kody języka” (trzyliterowe kody typu pol), „nieznany kod kraju” (np. en-EU), „Wielka Brytania to GB, nie UK” (en-UK) albo „za dużo części”. Kod ze skryptem, np. zh-Hant-TW, jest poprawny.
  • Ten sam język wskazany kilka razy (do poprawy) — np. dwa znaczniki en z różnymi adresami. Zostaw jeden albo rozróżnij je krajem (en-GB, en-US).
  • Adresy z przekierowaniem (do poprawy) — wskazana wersja nie otwiera się od razu, tylko przekierowuje. W hreflang powinny stać adresy docelowe, zwracające kod 200.
  • Wersje bez linku zwrotnego (poważne) — audyt otwiera do czterech wskazanych wersji i sprawdza, czy każda z nich wskazuje z powrotem na sprawdzaną stronę. Jeśli nie — Google zignoruje tę parę. Dopisek „adres nie działa” oznacza, że wskazana wersja zwraca błąd (404, 500) albo się nie otwiera — wtedy problemem jest sam adres w hreflang.

Brak x-default nie jest liczony jako problem. Audyt dopisuje wtedy tylko wskazówkę „warto dodać x-default” — Google go zaleca, ale nie wymaga (Polylang, na przykład, domyślnie dodaje go tylko na stronie głównej).

Gdy audyt nie zdąży otworzyć pozostałych wersji, nie twierdzi, że wszystko jest poprawnie. Zobaczysz informację, że kody są poprawne, ale linków zwrotnych nie sprawdzono — wtedy zrób to ręcznie (patrz niżej).

Audyt sprawdza jedną stronę, nie cały serwis, i nie czyta hreflang z mapy witryny. Jeśli problem jest w ustawieniach wtyczki czy szablonu, zwykle dotyczy wszystkich podstron.

Jak sprawdzić samemu

  1. Kod strony. Otwórz stronę, naciśnij Ctrl+U (na Macu Cmd+Option+U), potem Ctrl+F i wpisz hreflang. Spisz kody i adresy.
  2. Kliknij każdy adres z listy. Powinien się otworzyć bez przekierowania, w obiecanym języku. W jego kodzie (Ctrl+U) powinna być ta sama lista znaczników — łącznie z adresem strony, od której zacząłeś.
  3. Sprawdź kody. Czy nie ma en-UK, podkreśleń (pl_PL), samych kodów krajów? Czy żaden kod się nie powtarza?
  4. Sprawdź canonical na każdej wersji — szukaj w kodzie rel="canonical". Ma wskazywać na tę samą wersję językową.
  5. Google Search Console. Wpisz adres wersji obcojęzycznej w pasku Sprawdzenie adresu URL. Zobaczysz, czy jest w indeksie i jaki adres Google uznał za kanoniczny. Jeśli wersja angielska ma jako kanoniczny adres polski, coś jest nie tak z canonical lub hreflang. Osobny raport hreflang w GSC (Kierowanie międzynarodowe) został wycofany w 2022 roku.

Przy większym serwisie ręczne klikanie się nie sprawdzi — przyda się crawler SEO, który zbiera hreflang z wszystkich podstron i wypisuje brakujące linki zwrotne.

Jak naprawić

Najważniejsza zasada: hreflang powinien generować system, który zarządza wersjami językowymi (wtyczka, platforma sklepu), a nie ręcznie wklejane znaczniki. Ręczne listy rozjeżdżają się przy pierwszej nowej podstronie.

WordPress i WooCommerce

Sam WordPress, Yoast SEO ani Rank Math nie tworzą hreflang — robi to wtyczka wielojęzyczna. Przy WooCommerce działa to tak samo, wtyczka obsługuje też produkty i kategorie.

  • WPML — dodaje hreflang automatycznie na oryginałach i tłumaczeniach. Kod języka zmienisz w WPML → Ustawienia → Języki: przy danym języku kliknij edycję i wpisz wartość w polu hreflang (np. fr-ca dla francuskiego w Kanadzie). x-default WPML przypisuje do języka domyślnego; w panelu nie ma przełącznika, zmiana wymaga kodu (filtr wpml_hreflangs).
  • Polylang — dodaje hreflang automatycznie dla przetłumaczonych treści, kod bierze z ustawień regionalnych języka (np. en_ZA zamienia na en-ZA). Domyślnie dodaje x-default tylko na stronie głównej, i to tylko gdy przekierowuje ona automatycznie na język odwiedzającego. Jeśli chcesz x-default na wszystkich podstronach, potrzebny jest krótki fragment kodu (filtr pll_rel_hreflang_attributes) — opisany w dokumentacji Polylanga.
  • TranslatePress — dodaje hreflang automatycznie. W Ustawienia → TranslatePress → zakładka Zaawansowane znajdziesz opcję „Remove duplicate hreflang” (czy pokazywać kod z krajem, bez kraju, czy oba) oraz „Enable the hreflang x-default tag for language” (wybór języka dla x-default).

Najczęstszy problem w WordPressie to strony bez tłumaczenia — wtyczka nie połączy ich w parę, więc nie ma czego wskazać. Drugi: wpis przetłumaczony „na nowo” zamiast przez funkcję tłumaczenia, przez co obie wersje nie są ze sobą powiązane. Połącz je w edytorze wpisu (pole tłumaczeń wtyczki).

Shopify

Shopify tworzy hreflang automatycznie dla każdej domeny lub podkatalogu, które ustawisz dla rynków i języków (sekcja Rynki — po angielsku Markets — w panelu, domeny w Ustawienia → Domeny). Automatyczne znaczniki można wyłączyć w Sklep internetowy → Preferencje — rób to tylko, jeśli dodajesz własne w szablonie. Jeśli audyt zgłasza błąd na Shopify, sprawdź najpierw, czy ktoś nie wyłączył tej opcji albo czy aplikacja do tłumaczeń nie dokłada drugiego kompletu znaczników.

PrestaShop

Domyślny szablon (classic) wypisuje hreflang dla każdego aktywnego języka sklepu. Kod pochodzi z pola Kod języka w Międzynarodowe → Lokalizacja → Języki (format xx-yy, np. pl-pl, en-gb — nie en-uk). Core nie dodaje x-default; jeśli go potrzebujesz, potrzebny jest moduł SEO albo zmiana w szablonie. Jeśli używasz szablonu innego niż classic, sprawdź w kodzie strony, czy hreflang w ogóle się pojawia — niektóre szablony go pomijają.

Shoper

Wersje językowe dodaje się w Ustawienia → Regionalne → Języki (w starszym panelu: Ustawienia → Ustawienia regionalne → Języki), a domenę dla danej wersji przypisuje się osobno. Dokumentacja Shopera nie opisuje, jak platforma generuje hreflang. Po dodaniu języka sprawdź kod strony (Ctrl+U, szukaj hreflang). Jeśli znaczników nie ma albo mają błędne kody, zgłoś to pomocy technicznej Shopera — na tej platformie nie masz pełnej kontroli nad sekcją <head>.

Strona pisana na zamówienie

Programista powinien generować komplet znaczników z jednej listy powiązanych wersji (np. tabeli tłumaczeń), tak żeby każda wersja dostawała identyczną listę, w tym siebie. Ręczne wpisywanie znaczników w każdym szablonie osobno to najprostsza droga do brakujących linków zwrotnych.

Jak sprawdzić, że naprawione

  1. Uruchom audyt ponownie — komunikat powinien zmienić się na „…i są ustawione poprawnie”.
  2. Sprawdź ręcznie 2–3 inne podstrony, w tym produkt lub wpis — nie tylko stronę główną.
  3. W Google Search Console zrób Sprawdzenie adresu URL dla wersji obcojęzycznej, kliknij Testuj URL na żywo i obejrzyj kod pobranej strony; jeśli wszystko gra, użyj Poproś o zindeksowanie dla kluczowych adresów.

Google odczyta poprawione znaczniki dopiero przy kolejnych wizytach na wszystkich powiązanych wersjach — w praktyce to od kilku dni do kilku tygodni, dłużej przy rzadko odwiedzanych podstronach. Hreflang jest dla Google wskazówką, nie poleceniem: nawet poprawny nie gwarantuje, że w każdym przypadku pokaże się wymarzona wersja.

Kiedy warto poprosić o pomoc

Gdy masz kilka domen krajowych, kilka rynków w tym samym języku albo tysiące produktów w kilku językach, błędy w hreflang łatwo się mnożą i trudno je wyłapać ręcznie. Wtedy warto, żeby ktoś przejrzał cały serwis crawlerem i poprawił konfigurację u źródła — w IF.PL zajmujemy się SEO technicznym i wdrożeniami stron wielojęzycznych.

Źródła

cross