{"id":230,"date":"2026-07-02T13:46:48","date_gmt":"2026-07-02T11:46:48","guid":{"rendered":"https:\/\/projektwordpress.pl\/index.php\/2026\/07\/02\/hreflang-w-wordpress-i-woocommerce-jak-uniknac-duplikacji-jezykowych\/"},"modified":"2026-07-02T13:46:48","modified_gmt":"2026-07-02T11:46:48","slug":"hreflang-w-wordpress-i-woocommerce-jak-uniknac-duplikacji-jezykowych","status":"publish","type":"post","link":"https:\/\/projektwordpress.pl\/index.php\/2026\/07\/02\/hreflang-w-wordpress-i-woocommerce-jak-uniknac-duplikacji-jezykowych\/","title":{"rendered":"Hreflang w WordPress i WooCommerce jak unikn\u0105\u0107 duplikacji j\u0119zykowych"},"content":{"rendered":"<p>Masz sklep w dw\u00f3ch j\u0119zykach, a Google pokazuje w wynikach nie ten adres co trzeba. Zamiast polskiej karty produktu widzisz angielsk\u0105 albo odwrotnie. \u0179r\u00f3d\u0142em zamieszania zwykle nie jest brak s\u0142\u00f3w kluczowych, tylko brak porz\u0105dku technicznego. Hreflang ma pom\u00f3c wyszukiwarce zrozumie\u0107, kt\u00f3ra wersja strony jest dla jakiego j\u0119zyka i regionu. Dzia\u0142a dobrze dopiero wtedy, gdy spina si\u0119 z kanonicznymi, mapami witryny, struktur\u0105 adres\u00f3w i sensown\u0105 architektur\u0105 WordPressa oraz WooCommerce.<\/p>\n<h2>Dlaczego na stronie pojawia si\u0119 duplikacja j\u0119zykowa<\/h2>\n<p>Duplikacja j\u0119zykowa to sytuacja, w kt\u00f3rej dwie wersje tej sameej tre\u015bci konkuruj\u0105 w indeksie. Najcz\u0119\u015bciej dzieje si\u0119 tak, gdy wersje j\u0119zykowe nie s\u0105 jasno po\u0142\u0105czone, gdy kanoniczne wskazuj\u0105 na z\u0142y adres albo gdy wtyczka tworzy dodatkowe wersje pod parametrami i filtrami. Skutek to rozmycie sygna\u0142\u00f3w, przypadkowe wyniki w SERP i marnowanie bud\u017cetu crawlowania.<\/p>\n<h2>Struktura adres\u00f3w wersji j\u0119zykowych<\/h2>\n<p>Najpro\u015bciej i najczytelniej jest u\u017cywa\u0107 katalog\u00f3w j\u0119zykowych, na przyk\u0142ad domena pl i domena pl en. Subdomeny i osobne domeny krajowe te\u017c maj\u0105 sens, ale wymagaj\u0105 wi\u0119cej pracy i sp\u00f3jnej administracji. Wa\u017cne, aby struktura by\u0142a konsekwentna dla ca\u0142ej witryny.<\/p>\n<p>Nie mieszaj j\u0119zyka z krajem bez planu. Je\u015bli celujesz w Polsk\u0119 i Wielk\u0105 Brytani\u0119, rozwa\u017c osobne wersje j\u0119zyk kraj i pami\u0119taj, \u017ce kod hreflang \u0142\u0105czy j\u0119zyk z regionem, na przyk\u0142ad en GB. Wybierz schemat raz i trzymaj si\u0119 go wsz\u0119dzie od stron g\u0142\u00f3wnych po karty produkt\u00f3w.<\/p>\n<h2>Jak dzia\u0142a hreflang w praktyce<\/h2>\n<p>Hreflang to zestaw odniesie\u0144 mi\u0119dzy odpowiednikami tej samej strony w r\u00f3\u017cnych j\u0119zykach i regionach. Ka\u017cda wersja powinna wskazywa\u0107 sam\u0105 siebie oraz wszystkie pozosta\u0142e wersje. Je\u015bli wersje nie odsy\u0142aj\u0105 do siebie wzajemnie, Google mo\u017ce uzna\u0107 mapowanie za niepe\u0142ne i zignorowa\u0107 wskaz\u00f3wki.<\/p>\n<p>Hreflang dzia\u0142a na poziomie konkretnego adresu. Polska karta produktu musi wskazywa\u0107 angielsk\u0105 kart\u0119 produktu, a nie angielsk\u0105 stron\u0119 g\u0142\u00f3wn\u0105. To samo dotyczy kategorii, wpis\u00f3w i stron informacyjnych. Jedno niedopasowanie potrafi wywo\u0142a\u0107 kaskad\u0119 nie\u015bcis\u0142o\u015bci w ca\u0142ej sekcji.<\/p>\n<p>Istnieje te\u017c wariant x default, kt\u00f3rego mo\u017cna u\u017cy\u0107 jako wersji domy\u015blnej w sytuacji, gdy nie da si\u0119 jasno okre\u015bli\u0107 j\u0119zyka odwiedzaj\u0105cego. Nie zast\u0119puje on wersji j\u0119zykowych i nie s\u0142u\u017cy do przekierowa\u0144. To tylko dodatkowa wskaz\u00f3wka dla Google.<\/p>\n<h2>Hreflang i link kanoniczny<\/h2>\n<p>Je\u015bli kanoniczny prowadzi do innej wersji j\u0119zykowej, hreflang traci sens. Polska strona powinna mie\u0107 kanoniczny do siebie, angielska do siebie i tak dalej. Kanoniczny do zbiorczej wersji w jednym j\u0119zyku spowoduje, \u017ce pozosta\u0142e warianty zostan\u0105 zepchni\u0119te na margines lub zignorowane.<\/p>\n<p>Uwa\u017caj te\u017c na strony z parametrami i filtrowaniem. Je\u015bli kanoniczny wskazuje na stron\u0119 bez parametr\u00f3w, nie dodawaj do takiej strony hreflang dla wszystkich mo\u017cliwych kombinacji. Najpierw zdecyduj, kt\u00f3re adresy maj\u0105 by\u0107 indeksowane, a dopiero potem buduj relacje j\u0119zykowe mi\u0119dzy ich odpowiednikami.<\/p>\n<h2>Typowe b\u0142\u0119dy w WordPress przy wersjach j\u0119zykowych<\/h2>\n<p>Podw\u00f3jne \u017ar\u00f3d\u0142o hreflang to klasyk. Wtyczka do j\u0119zyk\u00f3w generuje tagi, a wtyczka SEO dorzuca swoje. W efekcie w kodzie s\u0105 dwa zestawy, cz\u0119sto niesp\u00f3jne. Rozwi\u0105zanie jest proste wybierz jedno narz\u0119dzie do generowania hreflang i wy\u0142\u0105cz drugie.<\/p>\n<p>Inny b\u0142\u0105d to mieszanie adres\u00f3w w menu i linkach wewn\u0119trznych. Gdy polskie kategorie czasem linkuj\u0105 do angielskich produkt\u00f3w, robot przestaje ufa\u0107 strukturze i w indeksie pojawiaj\u0105 si\u0119 miksy j\u0119zykowe. Warto przej\u015b\u0107 po kluczowych szablonach i upewni\u0107 si\u0119, \u017ce generuj\u0105 linki zawsze w odpowiednim j\u0119zyku.<\/p>\n<p>Problemy wywo\u0142uj\u0105 te\u017c tre\u015bci nieprzet\u0142umaczone lub zduplikowane opisy. Je\u015bli kilka wersji j\u0119zykowych ma w praktyce identyczny content, Google widzi to jako bli\u017aniacze strony. Czasem lepiej ukry\u0107 nieprzet\u0142umaczone strony z indeksu, ni\u017c wystawia\u0107 puste duplikaty.<\/p>\n<h2>WooCommerce produkty kategorie i filtrowanie<\/h2>\n<p>W sklepach kluczem jest poprawne mapowanie produkt\u00f3w mi\u0119dzy j\u0119zykami. Najlepiej, gdy wtyczka wieloj\u0119zyczna \u0142\u0105czy warianty po sta\u0142ym identyfikatorze, na przyk\u0142ad po SKU. Dzi\u0119ki temu polski produkt A i angielski produkt A s\u0105 dla hreflang oczywistymi odpowiednikami.<\/p>\n<p>Filtrowanie po atrybutach potrafi tworzy\u0107 setki adres\u00f3w w ka\u017cdej wersji j\u0119zykowej. Je\u015bli nie planujesz ich indeksowa\u0107, nie pr\u00f3buj dorabia\u0107 do nich hreflang. Oczy\u015b\u0107 indeks do sensownych stron kategorie, wa\u017cne paginacje, wybrane kombinacje i tylko te strony \u0142\u0105cz mi\u0119dzy j\u0119zykami.<\/p>\n<p>Uwa\u017caj na produkty niedost\u0119pne. Je\u015bli w jednym j\u0119zyku produkt jest 404 lub noindex, a w drugim jest dost\u0119pny, para hreflang rozpada si\u0119. Lepiej pokaza\u0107 wersj\u0119 archiwaln\u0105 z informacj\u0105 o niedost\u0119pno\u015bci i linkiem do zamiennika ni\u017c zostawia\u0107 dziury w mapowaniu.<\/p>\n<h2>Wtyczki wieloj\u0119zyczne i konfiguracja hreflang<\/h2>\n<p>WPML, Polylang i TranslatePress potrafi\u0105 generowa\u0107 hreflang automatycznie, ale ka\u017cdy robi to troch\u0119 inaczej. Sprawd\u017a, czy wszystkie istotne typy tre\u015bci s\u0105 w\u0142\u0105czone w t\u0142umaczeniach oraz czy adresy maj\u0105 sp\u00f3jne slugi. Czasem wystarczy jedna niespi\u0119ta kategoria, aby posypa\u0142y si\u0119 relacje.<\/p>\n<p>Je\u015bli u\u017cywasz Yoast SEO, Rank Math lub innej wtyczki SEO, upewnij si\u0119, \u017ce tylko jedno narz\u0119dzie wypisuje tagi hreflang. Dublowanie metadanych, a do tego rozjazd w kanonicznych, to prosta droga do chaosu i utraty zaufania algorytmu.<\/p>\n<p>Zobacz wi\u0119cej darmowej wiedzy na <a href=\"https:\/\/projektwordpress.pl\/\">ProjektWordPress.pl<\/a><\/p>\n<h2>Hreflang w mapach witryny<\/h2>\n<p>Alternatywy j\u0119zykowe mo\u017cna dorzuci\u0107 tak\u017ce w mapach witryny XML. To cz\u0119sto najpewniejszy spos\u00f3b na masowe przekazanie relacji, zw\u0142aszcza w du\u017cych sklepach. Warunek mapy musz\u0105 by\u0107 kompletne, aktualne i dost\u0119pne z poprawnych adres\u00f3w po jednym zestawie na wersj\u0119 j\u0119zykow\u0105 albo pe\u0142ny zestaw z alternatywami w jednej mapie, zale\u017cnie od wtyczki.<\/p>\n<h2>Sprawdzanie poprawno\u015bci w Google Search Console<\/h2>\n<p>Nie ma ju\u017c raportu do geotargetowania, wi\u0119c weryfikacja to dzi\u015b g\u0142\u00f3wnie inspekcja adres\u00f3w oraz analiza map witryny. Sprawd\u017a, czy Google wybiera jako kanoniczn\u0105 t\u0119 sam\u0105 wersj\u0119, kt\u00f3r\u0105 deklarujesz, oraz czy widzi wszystkie alternatywy. Je\u015bli narz\u0119dzie wskazuje inn\u0105 stron\u0119 jako kanoniczn\u0105, najpierw napraw kanoniczne, dopiero potem wracaj do hreflang.<\/p>\n<p>W du\u017cych serwisach przydaje si\u0119 pr\u00f3bkowanie. We\u017a po kilka adres\u00f3w z kluczowych sekcji strona g\u0142\u00f3wna, kategorie, produkty i potwierd\u017a poprawno\u015b\u0107. Zwracaj uwag\u0119 na statusy odpowiedzi, indeksacj\u0119 i sp\u00f3jno\u015b\u0107 adres\u00f3w mi\u0119dzy wersjami.<\/p>\n<h2>J\u0119zyk a waluta i lokalizacja<\/h2>\n<p>Hreflang rozr\u00f3\u017cnia j\u0119zyk i region, ale nie walut\u0119. Je\u015bli r\u00f3\u017cnica mi\u0119dzy wersjami to tylko cena i symbol waluty, bez zmian w tre\u015bci, nie ma sensu tworzy\u0107 osobnych wariant\u00f3w j\u0119zyk kraj. Problemy zaczynaj\u0105 si\u0119 przy automatycznych przekierowaniach po IP kt\u00f3re potrafi\u0105 blokowa\u0107 roboty i wywo\u0142ywa\u0107 mieszanie sygna\u0142\u00f3w, dlatego zawsze zostawiaj mo\u017cliwo\u015b\u0107 prze\u0142\u0105czenia j\u0119zyka bez si\u0142owych przekierowa\u0144.<\/p>\n<h2>Zmiany j\u0119zykowe migracje i przekierowania<\/h2>\n<p>Przy migracji struktury na przyk\u0142ad z subdomen na katalogi najpierw przygotuj przekierowania sta\u0142e jeden do jednego, a potem zaktualizuj mapy witryny i hreflang. Gdy Google widzi stabilne przekierowania, szybciej rozumie now\u0105 logik\u0119 serwisu.<\/p>\n<p>Unikaj chwilowej mieszanki starych i nowych odniesie\u0144. Je\u015bli cz\u0119\u015b\u0107 stron ma ju\u017c nowy schemat, a cz\u0119\u015b\u0107 wci\u0105\u017c wskazuje stare odpowiedniki, algorytm mo\u017ce wybra\u0107 losowe kanoniczne. Lepiej wdro\u017cy\u0107 zmiany partiami z pe\u0142nym domkni\u0119ciem sekcji.<\/p>\n<p>Po wdro\u017ceniu monitoruj indeksacj\u0119 i logi serwera. Wzrost b\u0142\u0119d\u00f3w 404, wielokrotne przekierowania i nag\u0142e spadki liczby zaindeksowanych wersji j\u0119zykowych to sygna\u0142y, \u017ce kt\u00f3ry\u015b etap nie zagra\u0142 i trzeba poprawi\u0107 mapowanie.<\/p>\n<h2>Plan uporz\u0105dkowania hreflang<\/h2>\n<p>Zacznij od inwentaryzacji adres\u00f3w kt\u00f3re maj\u0105 by\u0107 indeksowane. Dla ka\u017cdej wa\u017cnej strony ustal komplet odpowiednik\u00f3w w pozosta\u0142ych j\u0119zykach i regionach. Ujednoli\u0107 kanoniczne tak, aby wskazywa\u0142y na siebie w ramach danego j\u0119zyka, a nie na inny wariant.<\/p>\n<p>Nast\u0119pnie wybierz jedno \u017ar\u00f3d\u0142o generowania hreflang wtyczka j\u0119zykowa albo SEO i skonfiguruj mapy witryny tak, by zawiera\u0142y alternatywy j\u0119zykowe. Przejd\u017a po kluczowych szablonach i sprawd\u017a, czy linkowanie wewn\u0119trzne nie miesza wersji, zw\u0142aszcza w menu, breadcrumbach i sekcjach polecanych produkt\u00f3w.<\/p>\n<p>Na ko\u0144cu przetestuj reprezentatywne adresy i zostaw czas na przeliczenie indeksu. Gdy wszystko jest sp\u00f3jne, wizyty z w\u0142a\u015bciwych rynk\u00f3w zaczn\u0105 cz\u0119\u015bciej trafia\u0107 na odpowiednie wersje stron, a bot zu\u017cywa mniej zasob\u00f3w na b\u0142\u0105dzenie mi\u0119dzy duplikatami.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Masz sklep w dw\u00f3ch j\u0119zykach, a Google pokazuje w wynikach nie ten adres co trzeba. Zamiast polskiej karty produktu widzisz angielsk\u0105 albo odwrotnie. \u0179r\u00f3d\u0142em&hellip;<\/p>\n","protected":false},"author":1,"featured_media":231,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-230","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-optymalizacja-seo"],"_links":{"self":[{"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/posts\/230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/comments?post=230"}],"version-history":[{"count":0,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/posts\/230\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/media\/231"}],"wp:attachment":[{"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/media?parent=230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/categories?post=230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projektwordpress.pl\/index.php\/wp-json\/wp\/v2\/tags?post=230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}