hreflang: nasza konfiguracja 12 języków i 5 typowych błędów
Krótka odpowiedź: hreflang to oznaczenie w kodzie strony, które mówi Google, które strony są wersjami językowymi lub regionalnymi tej samej treści, żeby wyszukiwarka pokazywała każdemu odwiedzającemu właściwą z nich. Każda wersja musi wymieniać siebie i wszystkie pozostałe, a każda para musi wskazywać na siebie nawzajem, bo inaczej oznaczenia mogą zostać zignorowane. Poniżej opisujemy, jak seogrinder.com ustawia hreflang dla dwunastu języków, oraz pięć błędów hreflang z dokumentacji Google.
Co robi hreflang i kiedy jest potrzebny?
Google wyjaśnia tę ideę na stronie Tell Google about localized versions of your page: jeśli masz kilka wersji strony dla różnych języków lub regionów, to informacja o nich ma pomóc wyszukiwarce wskazywać użytkownikom najbardziej odpowiednią wersję. Dosłownie: „help Google Search point users to the most appropriate version of your page by language or region”.
Google wymienia trzy sytuacje, w których takie oznaczenie jest zalecane:
- Główna treść zostaje w jednym języku, a tłumaczysz tylko szablon, czyli na przykład nawigację i stopkę.
- Masz drobne różnice regionalne przy podobnej treści w jednym języku, na przykład angielski dla USA, Wielkiej Brytanii i Irlandii.
- Treść jest w pełni przetłumaczona, na przykład niemiecka i angielska wersja każdej strony.
Google może znaleźć alternatywne wersje samodzielnie, ale mówi, że zwykle najlepiej wskazać je wprost. Przetłumaczona strona nie jest duplikatem: wersje lokalne „are only considered duplicates if the main content of the page remains untranslated” (Google).
Są dwie rzeczy, którymi hreflang nie jest. Nie jest sposobem, w jaki Google rozpoznaje język strony: Google pisze, że „doesn't use hreflang or the HTML lang attribute to detect the language of a page” (Google), a strona o witrynach wielojęzycznych dodaje, że do tego służy widoczna treść. I nie jest obietnicą pozycji: Google opisuje jeden cel, czyli pokazanie każdemu szukającemu pasującej wersji.
Jak seogrinder.com łączy dwanaście języków
Ta część opisuje blog seogrinder.com tak, jak go zastaliśmy 5 listopada 2026. Strona główna / nie ma znaczników hreflang. Każdy artykuł to osobna strona w jednym języku. Przeczytaj znaczniki samodzielnie:
curl -sS https://seogrinder.com/pl/blog/checklista-seo-audyt | grep '<link rel="alternate" hreflang'
Polecenie wypisze 13 wierszy, te same na wszystkich dwunastu wersjach tego artykułu:
<link rel="alternate" hreflang="en" href="https://seogrinder.com/en/blog/seo-audit-checklist">
<link rel="alternate" hreflang="ar" href="https://seogrinder.com/ar/blog/qaimat-tadqiq-seo">
<link rel="alternate" hreflang="de" href="https://seogrinder.com/de/blog/seo-audit-checkliste">
<link rel="alternate" hreflang="es" href="https://seogrinder.com/es/blog/checklist-seo-auditoria">
<link rel="alternate" hreflang="fr" href="https://seogrinder.com/fr/blog/checklist-audit-seo-gratuite">
<link rel="alternate" hreflang="hi" href="https://seogrinder.com/hi/blog/seo-audit-checklist-hindi">
<link rel="alternate" hreflang="it" href="https://seogrinder.com/it/blog/checklist-audit-seo">
<link rel="alternate" hreflang="ja" href="https://seogrinder.com/ja/blog/seo-chekkurisuto">
<link rel="alternate" hreflang="ko" href="https://seogrinder.com/ko/blog/seo-chekeuliseuteu-jeomgeom">
<link rel="alternate" hreflang="nl" href="https://seogrinder.com/nl/blog/seo-audit-checklist-uitvoeren">
<link rel="alternate" hreflang="pl" href="https://seogrinder.com/pl/blog/checklista-seo-audyt">
<link rel="alternate" hreflang="pt" href="https://seogrinder.com/pt/blog/checklist-de-auditoria-seo">
<link rel="alternate" hreflang="x-default" href="https://seogrinder.com/en/blog/seo-audit-checklist">
Co pokazuje ten blok:
- Jedna metoda. Znaczniki są w nagłówku HTML. Te strony nie wysyłają hreflang w nagłówku HTTP, a
sitemap.xmlnie ma wpisówxhtml:link. Google nazywa trzy metody równoważnymi i nie widzi korzyści w używaniu wszystkich naraz. - Proste kody języków. Dwanaście kodów, bez regionów, bo każdy język ma dokładnie jedną wersję artykułu.
- Strona wymienia samą siebie. Wiersz
plto adres tej właśnie strony. Wszystkie dwanaście wersji ma ten sam zestaw wierszy. - Zwykłe znaczniki. Stoją w
<head>, po jednym<link>na wersję, bez dodatkowych atrybutów. Google oczekuje poprawnie zbudowanego nagłówka i ostrzega przed łączeniem hreflang z atrybutami takimi jakmediaw jednym znaczniku. - Canonical wskazuje na siebie. Każda wersja podaje jako canonical własny adres, a nie angielski, co pasuje do stwierdzenia Google, że przetłumaczone wersje nie są duplikatami.
- Osobny adres dla każdego języka, bez automatycznego przekierowania.
/pl/blog/checklista-seo-audytma polski slug. Google zaleca osobne adresy dla języków zamiast ciasteczek lub ustawień przeglądarki i odradza przekierowywanie odwiedzających według domniemanego języka. Żądanie do angielskiej strony z nagłówkiemAccept-Language: dezwraca 200 i tam zostaje (sprawdzone 5 listopada 2026). Każdy artykuł ma ponadto menu języków ze zwykłymi linkami do pozostałych wersji.
Jak to jest zbudowane. Plik każdego artykułu podaje swój temat w wierszu group. Kod bloga zbiera wszystkie pliki z tą samą wartością group, wypisuje po jednym <link> na członka (najpierw angielski, potem według kodu języka) i ustawia x-default na wersję angielską. Język bez pliku nie dostaje wiersza, dlatego temat, który istnieje tylko po angielsku i niemiecku, ma trzy wiersze: en, de i x-default. Google dopuszcza niepełne zestawy: „you can omit some languages on some pages; Google will still process the ones that point to each other” (Google).
Jak liczyliśmy. Ta pętla czyta wszystkie adresy artykułów z mapy witryny i liczy wiersze hreflang na każdej stronie:
for u in $(curl -sS https://seogrinder.com/sitemap.xml | grep -o 'https://seogrinder.com/[a-z][a-z]/blog/[^<]*'); do
curl -sS "$u" | grep -c '<link rel="alternate" hreflang'
done | sort | uniq -c
5 listopada 2026 wynik to 408 13: 408 stron z 13 wierszami (dwanaście języków plus x-default). Mały skrypt pobrał potem te same 408 stron i porównał znaczniki: każda strona wymienia siebie, każdy podany adres odpowiada kodem 200 i wskazuje stronę z powrotem, a x-default to adres angielski. Nasza kontrola bloga (check:blog) sprawdza te reguły dla każdej strony artykułu przy każdej zmianie w blogu.
Do czego służy x-default?
Google nazywa x-default „recommended for specifying the fallback page for users whose language settings don't match any of your site's localized versions” (Google). To nie jest obowiązek.
Google dodaje, że wartość może nosić każda strona, ale została „designed for language selector pages and so it will work best with those”. Strony wyboru języka dla artykułów nie mamy, więc naszą stroną zapasową jest angielska wersja tego samego artykułu; dla stron przeglądu bloga jest to /en/blog. To nasza decyzja, a nie reguła.
Najczęstsze błędy: 5 błędów hreflang z dokumentacji Google
Strona Google ma sekcję „Common Mistakes” z trzema pozycjami, a wytyczne podają dwa dalsze wymagania ze słowem „must”. Z nich powstało pięć poniższych punktów. Google nie mówi, jak często każdy z nich występuje. Tylko dwa mają podany skutek: brakujące odsyłacze zwrotne (znaczniki są ignorowane) i zarezerwowane kody regionów (ta część jest ignorowana). Przy pozostałych strona podaje samą regułę.
1. Brakujące odsyłacze zwrotne
Jeśli strona X wymienia stronę Y, strona Y musi wymieniać stronę X. Reguła Google dosłownie: „If two pages don't both point to each other, the tags will be ignored” (Google). Google od razu podaje powód: obca witryna nie może po prostu ogłosić się alternatywną wersją twojej strony. Rozwiązanie: niech każda wersja wypisuje ten sam blok linków z jednego wspólnego źródła. Jeśli pełny zestaw trudno utrzymać, Google pozwala pominąć niektóre języki na niektórych stronach, ale zaznacza, że nowo dodane języki powinny być powiązane w obie strony z wersją oryginalną lub główną.
2. Wersja, która nie wymienia samej siebie
Wytyczna dla wszystkich metod: „Each language version must list itself as well as all other language versions” (Google). Dla metody HTML oznacza to jeden link na każdą wersję, „including itself”, i identyczny zestaw na każdej wersji. Google nie mówi, co się stanie bez odwołania do samej siebie, więc potraktuj to jako błąd i dodaj wiersz.
3. Nieprawidłowe kody języków
Pierwsza część wartości to język w formacie ISO 639-1, po nim opcjonalnie region. Google pisze: „Specifying the region alone is not valid”. W przykładzie dla Belgii be jest błędne, bo to kod języka białoruskiego; poprawne są de-BE, nl-BE i fr-BE. Kody spoza tych norm, takie jak es-419, nie są obsługiwane (kody pisma, takie jak zh-Hans, są dozwolone). Wielkość liter nie ma znaczenia, ale region pisze się według normy wielkimi literami.
4. Nieprawidłowe kody regionów
Region musi być oficjalnie przyznanym kodem ISO 3166-1 Alpha 2. W przypadku kodów zarezerwowanych na coś innego obowiązuje: „Google Search ignores that part of the annotation”. Google wymienia EU, UN i UK jako pozbawione działania. Dla Zjednoczonego Królestwa właściwy kod to GB, jak we własnym przykładzie Google, en-GB.
5. Adresy względne lub niepełne
„Alternate URLs must be fully-qualified, including the transport method (http/https)” (Google). Przykład Google: https://example.com/foo, a nie //example.com/foo ani /foo.
Jak sprawdzić hreflang?
Ręcznie: uruchom powyższe polecenie curl na jednej ze swoich stron i zobacz, czy strona wymienia samą siebie. Potem uruchom je na każdym adresie z wyniku i poszukaj pierwszej strony; to jest test odsyłaczy zwrotnych. Google wymienia też narzędzia do debugowania od osób trzecich i zaznacza, że „are not maintained or checked by Google”.
Z SEOgrinder, naszym własnym narzędziem, które budujemy: przeskanuj stronę, otwórz zakładkę „Strona w Google” i znajdź kartę „Języki (hreflang)”. Sprawdza ona kody, odwołanie do samej siebie, x-default, czy cele odpowiadają i czy odsyłają z powrotem. Gdy wszystko jest w porządku, widać jeden wiersz; w przeciwnym razie karta wypisuje każdą kontrolę z wynikiem, a problemy trafiają na listę zadań.
| Błąd | Co pokazuje SEOgrinder (przykładowe brzmienie) |
|---|---|
| 1. Brakujące odsyłacze zwrotne | „2 cele nie odsyłają z powrotem” |
| 2. Brak odwołania do samej siebie | „Strona nie wskazuje samej siebie” |
| 3 i 4. Nieprawidłowe kody | „1 niepoprawny kod języka” (język i region są sprawdzane względem norm, które podaje Google) |
| 5. Adresy względne | Brak osobnego wiersza: SEOgrinder rozwiązuje adres względny względem strony, zanim go sprawdzi, więc szukaj tego błędu w kodzie źródłowym |
Dwa ograniczenia. Pobiera najwyżej dziesięć celów na stronę; przy naszych stronach z 13 wpisami sprawdza dziesięć i mówi o tym („Pobrano i sprawdzono 10 z 13 wpisów”). Ocenia też tylko stronę, którą wpiszesz; dla całej witryny przejdź po adresach w pętli, jak wyżej.
Najczęstsze pytania
Czy potrzebuję hreflang, jeśli każdy język ma własny adres?
To nie jest obowiązek. Google może znaleźć wersje bez tego oznaczenia, ale mówi, że zwykle najlepiej wskazać je wprost.
Czy hreflang poprawia moje pozycje?
Strona Google tego nie twierdzi. Opisuje cel jako kierowanie użytkowników do najbardziej odpowiedniej wersji według języka lub regionu. Pozycji nikt nie obieca.
Której z trzech metod użyć?
Dla Google są równoważne, a użycie kilku naraz nie daje korzyści. Google zauważa, że znaczniki HTML pasują do witryn bez mapy witryny lub bez kontroli nad nagłówkami, a nagłówek HTTP do plików innych niż HTML, na przykład PDF. My używamy znaczników HTML.
Twój następny krok
Uruchom polecenie curl na jednej ze swoich stron i sprawdź, czy wymienia samą siebie i czy jeden z celów odsyła z powrotem. Potem przeskanuj stronę w SEOgrinder, otwórz „Strona w Google”, napraw pierwszy wiersz w karcie „Języki (hreflang)”, który zgłasza problem, i kliknij Sprawdź ponownie. Gdzie hreflang mieści się wśród ośmiu grup kontroli, pokazuje nasza checklista SEO.