- Algorytmik
- SEO
- Hreflang w HTML, nagłówkach i mapie witryny: błędy, przez które Google go ignoruje
Hreflang w HTML, nagłówkach i mapie witryny: błędy, przez które Google go ignoruje
Hreflang możesz wdrożyć w HTML, nagłówkach HTTP lub mapie witryny - Google traktuje te metody równo. Sprawdź składnię i błędy, przez które tagi są ignorowane.

Spis treści
Hreflang mówi Google, że kilka adresów to zlokalizowane wersje tej samej treści. Możesz go wdrożyć w kodzie HTML, w nagłówkach HTTP albo w mapie witryny XML, a według dokumentacji Google o zlokalizowanych wersjach stron te trzy metody są równoważne. Najczęstszy powód, dla którego hreflang nie działa, jest prosty: strony nie wskazują na siebie nawzajem, a wtedy tagi zostają zignorowane.
W skrócie
- Trzy metody (HTML, nagłówki HTTP, mapa witryny) są dla Google równoważne. Stosowanie wszystkich naraz nie daje korzyści w wyszukiwarce, a utrzymanie trzech wdrożeń bywa trudniejsze niż jednego.
- Każda wersja językowa musi wskazywać siebie i wszystkie pozostałe. Jeśli dwie strony nie wskazują na siebie nawzajem, tagi są ignorowane.
- Adresy w hreflang muszą być pełne, z http lub https:
https://example.com/foo, a nie//example.com/fooani/foo. - Google nie używa hreflang ani atrybutu
langdo wykrywania języka strony. Robi to algorytmami, na podstawie widocznej treści. - Dla użytkowników bez dopasowania dodaj wartość
x-default.
Kiedy wskazanie wersji językowych ma sens
Nawet jeśli nic nie zrobisz, Google nadal może znaleźć alternatywną wersję językową strony. Dokumentacja zaznacza jednak, że zazwyczaj najlepiej wskazać strony wyraźnie. Zalecenie dotyczy trzech sytuacji:
- główna treść jest w jednym języku, a tłumaczysz tylko szablon (nawigację, stopkę) - typowe dla stron z treściami użytkowników, takimi jak posty,
- treści różnią się nieznacznie regionalnie, ale w obrębie jednego języka są podobne, np. angielski dla USA, Wielkiej Brytanii i Irlandii,
- cała witryna jest przetłumaczona na wiele języków, np. niemiecka i angielska wersja każdej strony.
Zlokalizowane wersje są uznawane za duplikaty tylko wtedy, gdy główna treść strony pozostaje nieprzetłumaczona. Pełne tłumaczenie nie robi więc z Twoich podstron duplikatów.
Hreflang nie służy do wykrywania języka
Przeczytałem obie dokumentacje i ta zasada pojawia się w nich wprost. Google nie używa hreflang ani atrybutu HTML lang, żeby ustalić język strony. Według dokumentacji o witrynach multiregionalnych język jest rozpoznawany na podstawie widocznej treści, bez informacji na poziomie kodu, takich jak lang czy adres URL.
Praktyczny wniosek: użyj jednego języka w treści i nawigacji na każdej stronie i unikaj wyświetlania równolegle kilku wersji językowych. Przetłumaczenie samego interfejsu przy treści w oryginalnym języku powoduje, że w wynikach wielokrotnie pojawia się ta sama treść z interfejsem w różnych językach, co frustruje użytkowników.
Trzy metody wskazania wersji: porównanie
| Metoda | Gdzie ją umieszczasz | Kiedy pasuje | Na co uważać |
|---|---|---|---|
| Tagi HTML | elementy <link rel="alternate" hreflang="..."> w <head> | gdy nie masz mapy witryny ani możliwości ustawienia nagłówków HTTP | linki muszą być w poprawnie zbudowanej sekcji <head> |
| Nagłówki HTTP | nagłówek Link: w odpowiedzi GET | pliki w formacie innym niż HTML, np. PDF | adresy w nawiasach < i >, pozycje rozdzielone przecinkami |
| Mapa witryny XML | elementy <xhtml:link> wewnątrz <url> | wskazanie wszystkich wariantów poszczególnych adresów w jednym pliku | przestrzeń nazw xhtml, mapa obejmuje tylko adresy swojego katalogu |
Wybierz jedną metodę, która pasuje do Twojej infrastruktury. Dokumentacja zaznacza, że łączenie wszystkich trzech nie daje żadnych korzyści w wyszukiwarce.
Hreflang w kodzie HTML
W <head> każdej wersji umieszczasz zestaw elementów <link>: po jednym dla każdej wersji, łącznie z bieżącą stroną. Zestaw jest identyczny na wszystkich wersjach. Składnia pojedynczego elementu to <link rel="alternate" hreflang="lang_code" href="url_of_page" />.
Przykład z dokumentacji dla witryny kierowanej do USA, Wielkiej Brytanii i Niemiec:
<head>
<title>Widgets, Inc</title>
<link rel="alternate" hreflang="en-GB"
href="https://en-gb.example.com/page.html" />
<link rel="alternate" hreflang="en-US"
href="https://en-us.example.com/page.html" />
<link rel="alternate" hreflang="en"
href="https://en.example.com/page.html" />
<link rel="alternate" hreflang="de"
href="https://de.example.com/page.html" />
<link rel="alternate" hreflang="x-default"
href="https://www.example.com/" />
</head>
Ten sam kod trafia na wszystkie pięć stron z przykładu. Zwróć uwagę na dwie rzeczy z dokumentacji:
- Google nie używa subdomen w rodzaju
en,en-gb,en-usczydedo określania odbiorców strony. Docelowych odbiorców musisz dokładnie zmapować w tagach. - Nie łącz adnotacji hreflang z innymi atrybutami, np.
media, w jednym tagu<link>.
Jeśli nie masz pewności, czy linki są w <head>, wklej kod z renderowanej strony do narzędzia do sprawdzania stron HTML.
Wartość x-default
Wartość x-default to strona zastępcza dla języków bez dopasowania. Dokumentacja poleca ją szczególnie dla stron głównych z wyborem wersji językowej lub kraju albo z automatycznym przekierowaniem:
<link rel="alternate" href="https://example.com/" hreflang="x-default" />
Nagłówki HTTP dla plików PDF
Nagłówek zwracasz razem z odpowiedzią GET. Metoda przydaje się dla plików innych niż HTML. Format to Link: <url1>; rel="alternate"; hreflang="lang_code_1", <url2>; rel="alternate"; hreflang="lang_code_2", .... Dla każdej wersji, także żądanej, podajesz komplet parametrów, a nagłówki zwracane przy poszczególnych wersjach są identyczne. Adres musi mieć otaczające znaki < i >.
Przykład z dokumentacji dla trzech wersji pliku PDF (angielska, niemiecka ze Szwajcarii i niemiecka dla pozostałych):
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-CH",
<https://de.example.com/file.pdf>; rel="alternate"; hreflang="de"
Mapa witryny XML z xhtml:link
W mapie dla każdego adresu tworzysz osobny element <url> z elementem <loc> i podrzędnymi <xhtml:link> dla wszystkich wersji, łącznie z tą, w której je dodajesz. Przy trzech wersjach strony mapa ma trzy wpisy <url>, a każdy z nich po trzy identyczne wpisy podrzędne.
Reguły z dokumentacji:
- zadeklaruj przestrzeń nazw:
xmlns:xhtml="http://www.w3.org/1999/xhtml", - kolejność elementów
<xhtml:link>nie ma znaczenia, ale warto jej nie zmieniać, żeby łatwiej wykrywać błędy, - elementy podrzędne nie wliczają się do limitu adresów URL w mapach witryn,
- prześlij mapę do katalogu, którego dotyczy. Może zawierać tylko adresy podrzędne względem katalogu, w którym leży.
Fragment przykładu dla strony angielskiej, z wersjami niemiecką i szwajcarską:
<?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://www.example.com/english/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="de-CH"
href="https://www.example.de/schweiz-deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
...
</urlset>
Dwa pozostałe elementy <url> (niemiecki i szwajcarski) mają ten sam komplet trzech <xhtml:link>.
Błędy, przez które Google ignoruje hreflang
Wszystkie poniższe reguły pochodzą z wytycznych dla wszystkich metod i z opisu poszczególnych wdrożeń.
| Błąd | Reguła Google |
|---|---|
| Strona A wskazuje B, ale B nie wskazuje A | Jeśli dwie strony nie wskazują na siebie nawzajem, tagi zostaną zignorowane. Dzięki temu nikt w innej witrynie nie może wskazać dowolnej strony jako wersji Twojej. |
| Zestaw nie zawiera bieżącej strony | Każda wersja musi uwzględniać siebie oraz wszystkie inne wersje językowe. |
| Adres względny zamiast pełnego | Alternatywne adresy URL muszą być pełne i jednoznaczne, z metodą przesyłania (http/https). Adresy typu //example.com/foo czy /foo nie wystarczą. |
Jeśli utrzymanie pełnego zestawu dwukierunkowych linków zaczyna sprawiać trudności, Google przetworzy te, które wskazują na siebie wzajemnie. Pamiętaj jednak, że nowsze wersje językowe musisz połączyć dwukierunkowo z oryginalną, dominującą wersją. Jeśli oryginał jest po francusku i działa na .fr, nowsze wersje meksykańska (.mx) i hiszpańska (.es) wskazujesz na wersję .fr, a nie tylko między sobą.
Jeśli chcesz sprawdzić, jak wersje wyglądają w wynikach, skorzystaj z podglądu SERP, a więcej o międzynarodowym SEO znajdziesz w hubie SEO.
Czy mogę wskazać wersje językowe, jeśli każda działa na innej domenie?
Tak. Według dokumentacji Google alternatywne adresy URL nie muszą należeć do tej samej domeny.
Czy domena .tv albo .me wskaże Google kraj docelowy?
Nie. Google traktuje niektóre domeny ccTLD wykorzystywane promocyjnie, takie jak .tv czy .me, jak domeny funkcjonalne (gTLD). Lista tych domen może się zmienić, więc sprawdź ją w dokumentacji.
Czy tag meta geo.position pomaga w kierowaniu na kraj?
Nie. Google ignoruje tagi meta lokalizacji, takie jak geo.position czy distribution, oraz atrybuty HTML kierowania geograficznego.
Co zrobić, jeśli nie mam jednej strony zastępczej dla wszystkich nieobsłużonych języków?
Dokumentacja poleca dodanie strony zastępczej z wartością x-default, szczególnie dla stron głównych z wyborem języka lub kraju albo z automatycznym przekierowaniem.
Źródła
- Zlokalizowane wersje Twoich stron - Centrum wyszukiwarki Google, Google for Developers - dostęp 05.11.2026
- Zarządzanie witrynami multiregionalnymi i wielojęzycznymi - Centrum wyszukiwarki Google, Google for Developers - dostęp 05.11.2026
Widzisz błąd albo nieaktualną liczbę? Napisz: kontakt. Poprawki opisuję w tekście z datą.
Autor i wydawca Algorytmika. Od lat pisze o wyszukiwarkach, AI i mediach społecznościowych, a na co dzień prowadzi serwisy, które żyją z ruchu z Google, Discover i sociali. Każdą liczbę w tekstach podpina pod źródło.
Jak pracuję i skąd biorę dane →

