Masz sklep albo blog na WordPressie w kilku językach i widzisz, że wersje zaczynają ze sobą konkurować. Raz wygrywa polska, raz angielska, a wyszukiwarka nie wie, którą pokazać komu. Do tego dochodzi pytanie, czy modele AI w ogóle rozumieją, że to ta sama treść w innym języku.
Ten poradnik jest dla osób, które znają podstawy SEO, ale nie muszą kodować. Przejdziemy krok po kroku przez hreflang, canonical i x-default w WordPressie, a na końcu pokażemy, jak ułożyć warstwę, którą czytają modele AI. Bez obietnic gwarantowanych cytowań, bo takich nikt nie może dać.
TL;DR Canonical i hreflang to sygnały, nie dyrektywy. Google zwykle traktuje je jako wskazówkę, nie rozkaz. Każda wersja językowa potrzebuje self-referencing canonical i self-referencing hreflang. x-default działa jako fallback dla języków, których nie obsługujesz osobno. Duplikacja szkodzi SEO i GEO jednocześnie, bo rozmywa jedną encję na kilka adresów. JSON-LD z
inLanguageiareaServedto warstwa, której hreflang nie zastąpi. Baza wiedzy na subdomenie pozwala dodać treści dla AI bez duplikowania bloga.
Hreflang i canonical w WordPressie — co robią, a czego nie zrobią
Zacznijmy od fundamentu, bo bez niego dalsze kroki nie mają sensu.
Hreflang wskazuje wersje językowe i regionalne tej samej treści. Mówi wyszukiwarce: ta strona po polsku, tamta po angielsku, a jeszcze inna po niemiecku dla Austrii. Używa kodów języka z ISO 639-1 (np. pl, en, de) i opcjonalnie kodu regionu z ISO 3166-1 (np. de-AT).
Canonical wskazuje preferowaną wersję treści. Gdy masz kilka adresów z tym samym lub bardzo podobnym tekstem, canonical mówi, który ma być traktowany jako główny.
Oba tagi to sygnały, nie dyrektywy. Google sam to podkreśla: oznaczenie canonical jest wskazówką, a nie bezwzględnym poleceniem. Jeśli hreflang i canonical się kłócą, wyszukiwarka zwykle zaufa canonical. I odwrotnie: hreflang nie zastąpi canonical, a canonical nie zastąpi hreflang. To dwie różne prace.
| Kryterium | Hreflang | Canonical |
|---|---|---|
| Cel | Wskazać wersje językowe i regionalne | Wskazać preferowaną wersję treści |
| Zasięg | Grupa powiązanych stron w różnych językach | Jedna strona lub grupa duplikatów |
| Gdzie w kodzie | <link rel="alternate" hreflang="..."> w <head> lub w sitemap |
<link rel="canonical" href="..."> w <head> |
| Co przy błędzie | Adnotacja bywa ignorowana, wersje konkurują | Wyszukiwarka może wybrać inny adres niż chcesz |
| Self-referencing | Wymagany | Wymagany |
Na co uważać: brak zwrotnego linku to najczęstszy błąd. Jeśli strona polska wskazuje angielską, ale angielska nie wskazuje polskiej, adnotacja jest ignorowana. Każda wersja musi linkować do wszystkich pozostałych i do siebie.
Czy AI czyta hreflang? Uczciwa odpowiedź: nie ma twardych danych, że modele językowe interpretują ten tag bezpośrednio. Najbezpieczniejsze założenie jest takie, że opierają się na treści stron i sygnałach, które zbierają wyszukiwarki. Dlatego hreflang porządkuje fundament, ale sam nie wystarczy — warto zadbać też o widoczność marki w AI Search.
Warunki wejściowe — kiedy ten poradnik zadziała, a kiedy nie
Ten poradnik ma sens, gdy prowadzisz WordPressa lub WooCommerce z co najmniej dwiema wersjami językowymi. Zadziała też, jeśli dopiero planujesz drugi język i chcesz uniknąć bałaganu od startu.
Czego potrzebujesz:
- dostępu do panelu WordPressa i do plików motywu lub wtyczki do snippetów,
- wtyczki wielojęzycznej albo ręcznej konfiguracji szablonów,
- kopii zapasowej i najlepiej środowiska staging,
- listy adresów URL dla każdego języka,
- dostępu do Google Search Console.
Kiedy metoda nie jest właściwa? Gdy masz tylko jedną wersję językową, hreflang jest zbędny. Gdy treści są celowo różne na każdym rynku, a nie są tłumaczeniami, nie łącz ich jako wersje tej samej strony. Gdy nie masz kontroli nad szablonem ani możliwości wdrożenia zmian, najpierw odzyskaj tę kontrolę.
Czy potrzebujesz wtyczki? Nie musisz. Wtyczka wielojęzyczna zwykle generuje tagi automatycznie, ale przy nietypowych typach treści i tak trzeba je dopiąć ręcznie. Bez kodu da się to zrobić, jeśli wtyczka dobrze obsługuje hreflang i canonical. W trudniejszych przypadkach przyda się krótki snippet.
Krok po kroku: hreflang i canonical w WordPressie
Krok 1 — Inwentaryzacja wersji językowych i URL-i
Zbierz w jednym arkuszu adresy dla stron, wpisów, typów treści (CPT), taksonomii, archiwów i paginacji. Sprawdź, czy każde tłumaczenie ma osobny adres URL. Jeśli wersje różnią się tylko parametrem w adresie, to sygnał ostrzegawczy.
Jak sprawdzić, że jest dobrze: dla każdej treści masz komplet adresów w każdym języku i żaden się nie powtarza.
Krok 2 — Ustaw self-referencing canonical na każdej wersji
Każda wersja językowa wskazuje samą siebie jako canonical. Nie kieruj wszystkich wersji na jeden język, bo wtedy pozostałe wypadają z indeksu. Wyjątek to prawdziwe duplikaty w tym samym języku, np. ten sam produkt pod dwoma adresami.
Jak sprawdzić, że jest dobrze: w źródle strony polskiej widzisz canonical do polskiej wersji, a w angielskiej do angielskiej.
Krok 3 — Dodaj hreflang z linkami zwrotnymi
W <head> każdej wersji umieść zestaw tagów alternate dla wszystkich języków, w tym dla siebie. Kolejność nie ma znaczenia, kompletność ma.
Jak sprawdzić, że jest dobrze: każda wersja zawiera dokładnie ten sam zestaw języków, tylko z innym adresem self-referencing.
Krok 4 — Ustaw x-default
x-default to fallback dla użytkowników, których język nie pasuje do żadnej wersji. Najlepiej wskazać nim stronę selektora języka albo wersję globalną. Nie kieruj x-default na losowy język, bo to wprowadza zamieszanie.
Jak sprawdzić, że jest dobrze: tag hreflang="x-default" istnieje i prowadzi do sensownej strony dla nowego użytkownika.
Krok 5 — Obsłuż CPT, taksonomie, paginację i archiwa
To miejsca, które wtyczki często pomijają. Produkty, kategorie, tagi, strony archiwów i kolejne strony paginacji też mogą mieć wersje językowe. Paginacja wymaga szczególnej uwagi: self-referencing canonical na każdej stronie listy, bez kierowania wszystkich na pierwszą stronę.
Jak sprawdzić, że jest dobrze: losowo wybierz kilka produktów, kategorii i drugą stronę listy w każdym języku i sprawdź, czy tagi są kompletne.
Krok 6 — Dodaj JSON-LD z inLanguage i areaServed
Hreflang mówi wyszukiwarce o wersjach językowych. Modele AI potrzebują kontekstu encji. Tu wchodzi JSON-LD: inLanguage dla każdej wersji i areaServed dla rynków, na które celujesz. Utrzymuj spójny @id dla tej samej encji, żeby nie rozbić jej na kilka bytów.
Jak sprawdzić, że jest dobrze: walidator danych strukturalnych nie zgłasza błędów, a inLanguage zgadza się z językiem strony.
Krok 7 — Sprawdź dostęp botów AI i sitemap
Upewnij się, że wersje językowe są osiągalne dla botów. Rozdziel boty treningowe od wyszukiwarkowych i agentowych, bo blokada jednych nie oznacza blokady drugich. W sitemapie możesz użyć xhtml:link, żeby zebrać adnotacje hreflang w jednym miejscu. Szybki test to sprawdzenie odpowiedzi serwera dla wybranego adresu.
Jak sprawdzić, że jest dobrze: boty wyszukiwarkowe i agentowe dostają odpowiedź 200, a sitemap zawiera wpisy dla wszystkich języków.
Punkty kontrolne — jak sprawdzić, że jest dobrze
Przejdź tę listę przed publikacją:
- self-referencing canonical obecny na każdej wersji,
- self-referencing hreflang obecny na każdej wersji,
- linki zwrotne kompletne w całej grupie językowej,
- brak konfliktu między canonical a hreflang,
- x-default ustawiony i prowadzi do sensownej strony,
- kody ISO poprawne (język z ISO 639-1, region z ISO 3166-1),
- sitemap zawiera
xhtml:linkdla wersji językowych, - brak przypadkowego noindex na wersjach językowych.
Typowe objawy błędów, które warto rozpoznać:
- strona wypada z wyników dla jednego języka, choć treść istnieje,
- wersje językowe konkurują o te same frazy,
- adnotacje są ignorowane, bo brakuje zwrotnego linku,
- wyszukiwarka pokazuje inną wersję, niż wskazuje canonical.
Czym walidować? Sprawdź źródło strony, użyj walidatora danych strukturalnych i przejrzyj raport indeksacji w Google Search Console. Pamiętaj, że raport International Targeting został zdeprecjonowany w 2024 roku, ale samo wsparcie dla hreflang nadal działa.
Najczęstsze błędy i jak je naprawić
Brak zwrotnych linków. Objaw: adnotacje nie działają, wersje konkurują. Naprawa: dodaj komplet tagów alternate na każdej wersji, w tym self-referencing.
Pominięty self-referencing. Objaw: wyszukiwarka nie widzi spójnej grupy. Naprawa: każda wersja musi wskazywać samą siebie w canonical i hreflang.
Konflikt canonical z hreflang. Objaw: canonical prowadzi do innego języka niż hreflang. Naprawa: canonical zawsze do wersji tego samego języka.
Błędne kody ISO. Objaw: tag jest ignorowany. Naprawa: używaj pl, en, de-AT, a nie nazw krajów czy języka pisanego słownie.
Brak x-default lub x-default na złej stronie. Objaw: nowi użytkownicy trafiają na przypadkową wersję. Naprawa: ustaw x-default na selektor języka lub wersję globalną.
Pominięte CPT, taksonomie i paginacja. Objaw: część sklepu nie ma wersji językowych. Naprawa: rozszerz konfigurację na wszystkie typy treści i strony list.
Przypadkowy noindex po migracji. Objaw: wersja znika z indeksu. Naprawa: sprawdź ustawienia wtyczki SEO i szablonów, usuń noindex z wersji, które mają być widoczne.
Blokada botów AI w robots.txt lub WAF. Objaw: modele nie widzą treści. Naprawa: rozdziel klasy botów i odblokuj te wyszukiwarkowe oraz agentowe.
Skala problemu jest większa, niż się wydaje. Badanie 20 000 domen pokazało, że 75% wielojęzycznych stron miało co najmniej jeden błąd hreflang, 58% konflikty w kodzie, a 37% błędne linki. Dobra wiadomość: naprawa działa. W jednym z case studies poprawna implementacja hreflang podniosła indeksację o 7% w dwa tygodnie.
Baza wiedzy na subdomenie — warstwa bez duplikacji dla AI
Masz już porządek w wersjach językowych. Teraz pytanie, jak dać modelom AI materiał, którego nie da im sam blog.
Najprostsza droga to baza wiedzy na subdomenie, np. knowledge.twojadomena.pl. Semly.ai prowadzi taką bazę z automatycznym llms.txt, JSON-LD, sitemap i wersjami w Markdown. To osobna przestrzeń, więc nie miesza się z indeksem bloga.
Kluczowa zasada: artykuły w bazie wiedzy powinny być unikalne. Nie kopiuj tekstów 1:1 z bloga, bo to prosta droga do duplicate content. Napisz je inaczej, z innym kątem i innym poziomem szczegółu. Baza wiedzy może też automatycznie linkować wewnętrznie do stron docelowych, kategorii, produktów i usług, bez przebudowy bloga.
Integracja z WordPressem i WooCommerce działa przez hasło aplikacji lub klucz API, bez wtyczek i bez kodu. Wdrożenie zajmuje kilka minut.
Uczciwe ramy: llms.txt nie gwarantuje cytowań. Badania z 2025 i 2026 roku pokazują, że większość plików llms.txt nie ma żadnych żądań, a tylko niewielka część ruchu pochodzi od botów AI. Nie ma też potwierdzonej korelacji między tym plikiem a cytowaniami. Traktuj go jako uzupełnienie, nie jako skrót do widoczności. GEO rozszerza SEO, nie zastępuje go.
Co dalej — kolejne kroki i warianty
Po wdrożeniu warto mierzyć efekty. Semly.ai monitoruje widoczność w ChatGPT, Gemini, Claude, Google AI i Grok, z raportami co 24 godziny. Dzięki temu widzisz, czy modele w ogóle wspominają Twoją markę i w jakim kontekście.
Realistyczne ramy czasowe: pierwsze sygnały po około 30 dniach, pełny obraz po 90. To korelacja, nie gwarancja.
Kiedy wybrać ręczną konfigurację, a kiedy wtyczkę? Ręczna daje pełną kontrolę i sprawdza się przy nietypowych typach treści. Wtyczka jest szybsza, ale mniej dokładna przy CPT, taksonomiach i paginacji. Najczęściej najlepszy jest mix: wtyczka jako baza, ręczne dopięcie tam, gdzie zawodzi.
Kiedy sięgnąć po bazę wiedzy Semly? Gdy masz już uporządkowane wersje językowe i chcesz dodać warstwę treści dla modeli AI bez ryzyka duplikacji. To naturalny kolejny krok po canonical i hreflang — sprawdź też, jak wybrać narzędzie GEO dla e-commerce.
FAQ
Czy hreflang zastępuje canonical? Nie. Hreflang wskazuje wersje językowe, canonical wskazuje preferowaną wersję treści. Potrzebujesz obu.
Czy AI czyta hreflang? Nie ma twardych danych, że modele interpretują ten tag bezpośrednio. Bezpieczniej zakładać, że opierają się na treści stron i sygnałach wyszukiwarek.
Czy potrzebuję llms.txt? Nie jest obowiązkowy i nie gwarantuje cytowań. Może pomóc uporządkować treści dla botów, ale bez niego też da się działać.
Czy x-default jest obowiązkowy? Nie jest wymagany, ale bardzo pomaga. Ustawia fallback dla języków, których nie obsługujesz osobno.
Czy wtyczka wystarczy? Zwykle jako baza tak, ale przy CPT, taksonomiach i paginacji często trzeba dopiąć tagi ręcznie.