RSS
  1. Algorytmik
  2. SEO
  3. Hreflang w HTML, nagłówkach i mapie witryny: błędy, przez które Google go ignoruje
SEO/PORADNIK

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.

Opublikowano
7 min czytania1353 słów
Hreflang: 3 metody i błędy - okładka tekstu
Ilustracja: Algorytmik
Spis treści
  1. Kiedy wskazanie wersji językowych ma sens
  2. Hreflang nie służy do wykrywania języka
  3. Trzy metody wskazania wersji: porównanie
  4. Hreflang w kodzie HTML
  5. Nagłówki HTTP dla plików PDF
  6. Mapa witryny XML z xhtml:link
  7. Błędy, przez które Google ignoruje hreflang

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/foo ani /foo.
  • Google nie używa hreflang ani atrybutu lang do 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

MetodaGdzie ją umieszczaszKiedy pasujeNa co uważać
Tagi HTMLelementy <link rel="alternate" hreflang="..."> w <head>gdy nie masz mapy witryny ani możliwości ustawienia nagłówków HTTPlinki muszą być w poprawnie zbudowanej sekcji <head>
Nagłówki HTTPnagłówek Link: w odpowiedzi GETpliki w formacie innym niż HTML, np. PDFadresy w nawiasach < i >, pozycje rozdzielone przecinkami
Mapa witryny XMLelementy <xhtml:link> wewnątrz <url>wskazanie wszystkich wariantów poszczególnych adresów w jednym plikuprzestrzeń 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-us czy de do 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"

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łądReguła Google
Strona A wskazuje B, ale B nie wskazuje AJeś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 stronyKażda wersja musi uwzględniać siebie oraz wszystkie inne wersje językowe.
Adres względny zamiast pełnegoAlternatywne 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

#hreflang#SEO międzynarodowe#wersje językowe#mapa witryny#x-default

Widzisz błąd albo nieaktualną liczbę? Napisz: kontakt. Poprawki opisuję w tekście z datą.

Piotr Olszewski

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 →

Z Promptowego - blog o AI tego samego autora

Też w sieci: DYGOT - dziennik kultury, gier i nauki: Google wyłączy AI w szkołach. Kto ją zablokuje, straci też wyszukiwarkę