Przekazywanie Google informacji o zlokalizowanych wersjach strony

Jeśli masz wiele wersji strony dla różnych języków lub regionów, przekaż Google informacje na ten temat. Dzięki temu wyszukiwarka Google skieruje użytkowników do najodpowiedniejszej wersji strony na podstawie języka lub regionu.

Nawet jeśli nie podejmiesz żadnych działań, Google nadal będzie w stanie znaleźć alternatywną wersję językową strony. Zazwyczaj jednak najlepszym rozwiązaniem jest wyraźne wskazanie stron w określonych językach lub przeznaczonych dla konkretnych regionów.

Przykładowe sytuacje, w których zalecamy wskazanie alternatywnych wersji stron:

  • Prezentujesz główną treść w jednym języku, a tłumaczysz tylko szablon, np. elementy nawigacyjne i stopkę. Jest to typowa sytuacja w przypadku stron z treściami użytkowników, takimi jak posty.
  • Materiały na Twojej stronie charakteryzują niewielkie różnice regionalne, a treści w obrębie jednego języka są podobne. Na przykład możesz mieć treści w języku angielskim skierowane do użytkowników z USA, Wielkiej Brytanii i Irlandii.
  • Zawartość Twojej witryny jest w całości przetłumaczona na wiele języków. Na przykład masz niemiecką i angielską wersję każdej strony.

Zlokalizowane wersje strony są uznawane za duplikaty tylko wtedy, gdy główna treść strony pozostaje nieprzetłumaczona.

Metody wskazywania stron alternatywnych

Wielojęzyczne lub multiregionalne wersje strony możesz wskazać Google na 3 sposoby:

Te 3 metody są równoważne z perspektywy Google. Możesz wybrać metodę, która najlepiej pasuje do Twojej witryny. Wszystkie te 3 metody możesz stosować jednocześnie, ale w wyszukiwarce nie daje to żadnych korzyści (w rzeczywistości zarządzanie 3 implementacjami może okazać się znacznie trudniejsze niż 1).

Użyj hreflang, by poinformować Google o odmianach Twoich treści. Dzięki temu będziemy wiedzieć, że te strony zawierają zlokalizowane wersje tych samych treści. Google nie używa tagu hreflang ani atrybutu HTML lang do wykrywania języka strony. Aby określić język, używamy algorytmów.

Wytyczne dotyczące wszystkich metod

  • Każda wersja językowa musi uwzględniać siebie oraz wszystkie inne wersje językowe.
  • Alternatywne adresy URL muszą być pełne i jednoznaczne, a także muszą obejmować metodę przesyłania (http/https), czyli na przykład:
    https://example.com/foo, a nie //example.com/foo czy /foo
  • Alternatywne adresy URL nie muszą należeć do tej samej domeny.
  • Jeśli masz kilka różnych adresów URL w tym samym języku, ale przeznaczonych dla różnych regionów, warto utworzyć jeden adres typu catch-all dla użytkowników z nieokreślonych lokalizacji. Możesz na przykład przygotować osobne adresy URL dla anglojęzycznych użytkowników z Irlandii (en-ie), Kanady (en-ca) i Australii (en-au), a innych anglojęzycznych użytkowników z Wielkiej Brytanii, Stanów Zjednoczonych oraz pozostałych lokalizacji kierować na ogólną angielską wersję strony (en). Może to być jedna z określonych wersji strony.
  • Jeśli dwie strony nie wskazują na siebie nawzajem, tagi zostaną zignorowane. Dzięki temu nikt nie może w innej witrynie utworzyć tagu wskazującego na dowolną stronę jako alternatywną wersję jednej z Twoich stron.
  • Jeśli utrzymanie pełnego zestawu dwukierunkowych linków dotyczących poszczególnych języków zaczyna sprawiać trudności, możesz część z nich pominąć na niektórych stronach. Google przetworzy te, które wskazują wzajemnie na siebie. Pamiętaj jednak o dwukierunkowym powiązaniu stron utworzonych w nieobsługiwanych wcześniej językach z oryginalną/przeważającą wersją językową. Jeśli na przykład językiem oryginalnej strony jest francuski, a jej adresy URL występują w domenie .fr, to w takim przypadku konieczne jest dwukierunkowe powiązanie nowszych stron w wersji meksykańskiej (.mx) i hiszpańskiej (.es) z dominującą wersją w domenie .fr zamiast dwukierunkowego łączenia ze sobą nowych stron napisanych w odmianach języka hiszpańskiego (.mx.es).
  • Warto dodać stronę zastępczą na potrzeby języków bez dopasowania, szczególnie w przypadku stron głównych z możliwością wyboru wersji językowej / kraju lub automatycznym przekierowaniem. Użyj wartości x-default:
    <link rel="alternate" href="https://example.com/" hreflang="x-default" />

Tagi HTML

Dodaj elementy <link rel="alternate" hreflang="lang_code"... > w nagłówku strony, aby wskazać Google wszystkie jej wersje językowe i regionalne. Takie rozwiązanie jest przydatne, jeśli nie masz mapy witryny ani możliwości określenia w swojej witrynie nagłówków odpowiedzi HTTP.

W przypadku każdej wersji strony uwzględnij zestaw elementów <link> w elemencie <head> – po 1 linku dla każdej wersji, w tym dla danej strony. Zestaw linków jest identyczny dla każdej wersji strony. Zobacz dodatkowe wytyczne

Oto składnia poszczególnych elementów link:

<link rel="alternate" hreflang="lang_code" href="url_of_page" />
Składnia
lang_code Obsługiwany kod języka/regionu, na który jest kierowana określona wersja strony, lub parametr x-default odpowiadający każdemu językowi, który nie jest wyraźnie wymieniony w tagu hreflang na stronie.
url_of_page Pełny URL konkretnej wersji strony w danym języku lub przeznaczonej do wyświetlania w określonym regionie.

Umieść tagi <link> w górnej części elementu <head>. Tagi <link> muszą znaleźć się co najmniej wewnątrz poprawnie sformatowanej sekcji <head> lub przed elementami, które mogłyby spowodować przedwczesne zamknięcie sekcji <head>, takimi jak <p> czy piksel śledzący. Jeśli masz wątpliwości, wklej kod z renderowanej strony do narzędzia do sprawdzania stron HTML, aby upewnić się, że linki są umieszczone wewnątrz elementu <head>.

Przykład

Firma Example Widgets, Inc. ma witrynę przeznaczoną dla użytkowników ze Stanów Zjednoczonych, Wielkiej Brytanii i Niemiec. Następujące adresy URL zawierają zasadniczo tę samą treść, ale z pewnymi regionalnymi różnicami:

Adresy URL z odmianami regionalnymi
https://en.example.com/page.html Ogólna strona główna w języku angielskim, która zawiera informacje o opłatach za dostawę międzynarodową ze Stanów Zjednoczonych.
https://en-gb.example.com/page.html Brytyjska strona główna z cenami w funtach.
https://en-us.example.com/page.html Amerykańska strona główna z cenami w dolarach amerykańskich.
https://de.example.com/page.html Strona główna w języku niemieckim.
https://www.example.com/ Strona domyślna bez określonego języka i regionu. Zawiera selektory umożliwiające wybór tych opcji.

Zauważ, że do określania docelowych odbiorców strony Google nie używa subdomen w określonych językach (en, en-gb, en-us, de) zawartych w tych adresach URL. Musisz dokładnie zmapować tych docelowych odbiorców.

Poniżej widać kod HTML, który powinien znajdować się w sekcji <head> na wszystkich stronach wymienionych w tabeli adresów URL z odmianami regionalnymi. Skieruje on użytkowników anglojęzycznych z USA i Wielkiej Brytanii oraz użytkowników niemieckojęzycznych na zlokalizowane strony, a wszystkich pozostałych odbiorców odeśle na ogólną stronę główną. Wyszukiwarka Google zwróci wynik odpowiedni dla użytkownika na podstawie ustawień przeglądarki.

<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>

Nagłówki HTTP

Możesz zwrócić nagłówek HTTP razem z odpowiedzią GET strony, by przekazać Google informacje o wszystkich jej wersjach językowych i regionalnych. Jest to przydatne w przypadku plików w formacie innym niż HTML (np. PDF).

Oto format nagłówka:

Link: <url1>; rel="alternate"; hreflang="lang_code_1", <url2>; rel="alternate"; hreflang="lang_code_2", ...
Składnia
<url_x> Pełny adres URL strony alternatywnej, która odpowiada ciągowi ustawień regionalnych przypisanemu do powiązanego atrybutu hreflang. Adres URL musi zawierać otaczające go znaczniki <>. Przykład: <https://www.google.com>
lang_code_x Obsługiwany kod języka/regionu, na który jest kierowana określona wersja strony, lub parametr x-default odpowiadający każdemu językowi, który nie jest wyraźnie wymieniony w tagu hreflang na stronie.

Musisz określić zestaw parametrów <url>rel="alternate" oraz wartości hreflang dla każdej wersji strony, łącznie z wersją żądaną. Trzeba je rozdzielić przecinkami jak w poniższym przykładzie. Nagłówki Link: zwracane w przypadku poszczególnych wersji strony są identyczne. Zobacz dodatkowe wytyczne

Przykład

Oto przykład nagłówka Link: zwracanego przez witrynę zawierającą 3 wersje pliku PDF: jedną dla użytkowników anglojęzycznych, jedną dla użytkowników niemieckojęzycznych ze Szwajcarii i jedną dla wszystkich pozostałych użytkowników niemieckojęzycznych:

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

Aby wskazać Google wszystkie warianty językowe i regionalne poszczególnych adresów URL, możesz użyć mapy witryny w formacie XML. W tym celu dodaj element <loc> określający pojedynczy adres URL z wpisami podrzędnymi <xhtml:link> definiującymi poszczególne wersje językowe lub regionalne strony łącznie z wersją, w której dodajesz wpisy. Jeśli więc masz 3 wersje strony, Twoja mapa witryny będzie zawierać wpisy dla adresów URL każdej z wersji, a każda pozycja będzie miała 3 identyczne wpisy podrzędne.

Reguły dotyczące mapy witryny:

  • Określ przestrzeń nazw xhtml w ten sposób:
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
  • Dla każdego adresu URL utwórz osobny element <url>, tak jak w przypadku każdej innej mapy witryny.
  • Każdy element <url> musi zawierać element podrzędny <loc> wskazujący adres URL strony.
  • Każdy element <url> musi zawierać element podrzędny <xhtml:link rel="alternate" hreflang="supported_language-code"> zawierający wszystkie alternatywne wersje strony, łącznie z wersją, w której dodajesz te elementy. Kolejność elementów podrzędnych <xhtml:link> nie ma znaczenia, ale warto jej nie zmieniać, by ułatwić wykrywanie błędów. Elementy podrzędne nie wliczają się do limitu adresów URL w mapach witryn.
  • Prześlij mapę witryny do katalogu w witrynie, którego ta mapa witryny dotyczy. Pamiętaj, że mapa witryny może zawierać tylko podrzędne adresy URL katalogu, w którym jest ona przechowywana.
  • Nasza dokumentacja dotycząca map witryn obejmuje też rozszerzenia map witryn. Przestrzegaj ogólnych wskazówek dotyczących mapy witryny.
  • Zobacz dodatkowe wytyczne

Przykład

To jest przykład strony anglojęzycznej przeznaczonej dla użytkowników z całego świata mówiących po angielsku. Ma ona równoważne wersje przeznaczone dla użytkowników niemieckojęzycznych z całego świata oraz użytkowników niemieckojęzycznych ze Szwajcarii. W witrynie znajdą się wszystkie te adresy URL:

  • www.example.com/english/page.html kierowany na użytkowników anglojęzycznych,
  • www.example.de/deutsch/page.html kierowany na użytkowników niemieckojęzycznych,
  • www.example.de/schweiz-deutsch/page.html kierowany na użytkowników niemieckojęzycznych w Szwajcarii.

Mapa witryny obejmująca te 3 strony wygląda tak:

<?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>
  <url>
    <loc>https://www.example.de/deutsch/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>
  <url>
    <loc>https://www.example.de/schweiz-deutsch/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>

Obsługiwane kody języków i regionów

Wartość atrybutu hreflang składa się z 1 lub 2 wartości rozdzielonych myślnikiem. Na przykład: en-US. Pierwszy kod atrybutu hreflang to kod języka (w formacie ISO 639-1), po którym następuje opcjonalny drugi kod reprezentujący kod regionu (w formacie ISO 3166-1 alfa-2) alternatywnego adresu URL.

Aby kierować reklamy na mieszkańców Belgii mówiących różnymi językami, możesz użyć tych kodów języków i regionów:

  • prawidłowy (niemiecki dla użytkowników w Belgii): de-be
  • prawidłowy (niderlandzki dla użytkowników w Belgii): nl-be
  • prawidłowy (francuski dla użytkowników w Belgii): fr-be
  • nieprawidłowy, ponieważ pierwszy kod dotyczy języka (be to kod języka białoruskiego): be

Aby uprościć oznaczanie etykietami, możesz określić sam kod języka, na przykład:

  • de: materiały w języku niemieckim, niezależnie od regionu;
  • en-GB: materiały w języku angielskim dla użytkowników z Wielkiej Brytanii;
  • de-ES: materiały w języku niemieckim dla użytkowników z Hiszpanii.

W przypadku różnic w rodzajach pisma używanych przez dany język właściwy rodzaj pisma jest wybierany na podstawie kraju. Na przykład użycie kodu zh-TW na stronie przeznaczonej dla użytkowników na Tajwanie spowoduje automatyczny wybór pisma chińskiego (w tym przypadku tradycyjnego). Możesz również wyraźnie określić alfabet w formacie ISO 15924, na przykład:

  • zh-Hant: chiński (tradycyjny),
  • zh-Hans: chiński (uproszczony).

Podobnie jak w przypadku innych kodów języków możesz też określić region. Użyj na przykład zh-Hans-US, aby określić język chiński (uproszczony) dla użytkowników z USA.

Używanie wartości x-default w przypadku języków bez dopasowania

Zarezerwowana wartość x-default jest wykorzystywana wtedy, gdy żaden język ani region nie odpowiada ustawieniom przeglądarki użytkownika. Ta wartość jest zalecana do określania strony zastępczej dla użytkowników, których ustawienia języka nie pasują do żadnej ze zlokalizowanych wersji Twojej witryny. Możesz użyć wartości x-default na dowolnej stronie, ale została ona opracowana z myślą o stronach wyboru języka, więc najlepiej z nimi będzie działać.

W przypadku wartości x-default nie trzeba określać kodu języka. Strona jest kierowana do użytkowników, których ustawienia języka nie są zgodne z Twoją witryną, więc język strony nie ma znaczenia.

Aby zaimplementować adnotację hreflang="x-default", dodaj kolejny tag link do istniejących adnotacji hreflang i ustaw atrybut href na adres URL, pod który mają trafiać użytkownicy, jeśli Twoja witryna nie obsługuje danego języka. Implementacja HTML może wyglądać np. tak:

<link rel="alternate" href="https://example.com/en-gb" hreflang="en-gb" />
<link rel="alternate" href="https://example.com/en-us" hreflang="en-us" />
<link rel="alternate" href="https://example.com/en-au" hreflang="en-au" />
<link rel="alternate" href="https://example.com/country-selector" hreflang="x-default" />

Rozwiązywanie problemów

Typowe błędy

Oto najczęstsze błędy związane z użyciem parametru hreflang:

  • Brak linków zwrotnych: jeśli strona X zawiera link do strony Y, strona Y musi zawierać link zwrotny do strony X. Jeśli nie będzie tak w przypadku niektórych stron, które korzystają z adnotacji hreflang, adnotacje mogą zostać zignorowane lub nieprawidłowo zinterpretowane. Weźmy na przykład ten link na https://de.example.com/index.html:
    <link rel="alternate" hreflang="en-gb" href="https://en-gb.example.com/index.html" />
    Musisz też mieć link hreflang na https://en-gb.example.com/index.html, który wskazuję wersję treści de:
    <link rel="alternate" hreflang="de" href="https://de.example.com/index.html" />
  • Nieprawidłowe kody języka: u pewnij się, że wszystkie używane kody języka wskazują na język (w formacie ISO 639-1), a opcjonalnie także region (w formacie ISO 3166-1 alfa-2) alternatywnego adresu URL. Określenie jedynie regionu jest nieprawidłowe.

Debugowanie błędów w tagu hreflang

Do debugowania adnotacji hreflang można wykorzystać różne narzędzia innych firm. Oto kilka najpopularniejszych. Google ich nie obsługuje ani nie sprawdza.