Agent AI nie wybierze sklepu dlatego, że karta produktu ma efektowną animację. Wybierze ofertę, której…

Czy linki z kratką (#) wpływają na SEO? Fragmenty URL, kotwice i canonicale bez mitów
Adres z kratką potrafi wyglądać podejrzanie. W Search Console, Screaming Frogu, Ahrefsie albo zwykłym raporcie z linkowania pojawia się nagle coś w stylu /poradnik/#faq, /oferta/#kontakt, /blog/#spis-tresci albo jeszcze dziwniejszy potworek: /#:~:text=jakis%20fragment%20tekstu. I wtedy zaczyna się klasyczny audytowy niepokój: czy to osobny URL, duplikat, błąd canonicala, problem z indeksacją, a może coś, co trzeba natychmiast zablokować?
Najkrótsza odpowiedź brzmi: linki z # w adresie URL zwykle nie szkodzą SEO. Nie tworzą klasycznych duplikatów tak jak parametry ?sort=price, ?color=black, identyfikatory sesji czy źle zrobione filtry w sklepie. Ale to nie znaczy, że można je bezmyślnie ignorować. Fragment URL jest technicznie innym mechanizmem niż parametr, przekierowanie czy osobna podstrona. Właśnie przez to bywa źle interpretowany w audytach.
Największy błąd? Traktowanie każdego adresu z kratką jak problemu indeksacyjnego. Drugi największy błąd? Używanie hasha jako protezy normalnej architektury strony. Kotwica w spisie treści jest w porządku. Cała oferta ukryta za /#/oferta w aplikacji bez poprawnych URL-i to już zupełnie inna rozmowa.
Co naprawdę oznacza # w adresie URL i czy Google widzi go jako osobną stronę?
Znak # w adresie URL oznacza fragment URL, nazywany też często kotwicą albo hashem. Jego zadanie jest proste: wskazać konkretny fragment zasobu, najczęściej sekcję na tej samej stronie.
Przykład:
https://example.pl/poradnik-seo/#faq
W tym adresie:
https://example.plto domena,/poradnik-seo/to właściwy adres strony,#faqto fragment URL, który przenosi użytkownika do elementu z identyfikatoremid="faq".
W praktyce wygląda to tak: użytkownik klika link „Przejdź do FAQ”, przeglądarka ładuje stronę /poradnik-seo/, a potem przewija ją do sekcji FAQ. To zachowanie dzieje się po stronie przeglądarki. Fragment po # nie działa jak osobny request do serwera.
To ważne, bo wiele osób porównuje adresy z kratką do parametrów URL. Niesłusznie.
/buty/?sort=price może zwrócić inną wersję listingu.
/buty/?color=black może pokazać przefiltrowany zestaw produktów.
/poradnik/#faq zazwyczaj pokazuje tę samą stronę, tylko od razu przewiniętą do konkretnej sekcji.
Dlatego adres URL z # nie jest osobną podstroną w klasycznym sensie. Jeżeli treść strony istnieje normalnie w HTML-u, a hash tylko przenosi do nagłówka, tabeli, FAQ albo formularza, nie ma tu automatycznie problemu z indeksacją.
Typowe, poprawne zastosowania fragmentów URL to:
- spis treści z kotwicami w długim poradniku,
- link „przejdź do formularza” na landing page’u,
- odnośnik do sekcji FAQ,
- link do konkretnego nagłówka w dokumentacji,
- przyciski typu „zobacz cennik”, „sprawdź warunki”, „przejdź do opinii”.
W takim układzie hash jest narzędziem nawigacyjnym. Nie strategią indeksacji. Nie obejściem braku landing page’a. Nie sposobem na stworzenie dziesięciu podstron z jednej.
Jest jeszcze jeden przypadek, który często wygląda groźniej, niż jest w rzeczywistości: Scroll to Text Fragment. To mechanizm znany z przeglądarek opartych na Chromium, który pozwala linkować nie tylko do elementu z konkretnym id, ale też bezpośrednio do fragmentu tekstu na stronie. Taki adres może wyglądać tak:
https://example.pl/poradnik/#:~:text=jakis%20fragment%20tekstu
Albo dłużej, mniej elegancko i bardziej „technicznie”:
https://example.pl/poradnik/#:~:text=canonical%20bez%20fragmentu
Użytkownik klika taki wynik, przeglądarka przewija stronę do konkretnego zdania i podświetla je na żółto. To może pojawić się po wejściu z wyników Google, gdy wyszukiwarka chce przenieść użytkownika dokładnie do odpowiedzi w tekście, nawet jeśli autor strony nie dodał własnej kotwicy HTML.
I tu ważna rzecz: Scroll to Text Fragment nie wymaga specjalnego wdrożenia SEO po stronie WordPressa, motywu ani kodu strony. Nie trzeba tworzyć przekierowań, dodawać canonicali do takich wersji, blokować ich w robots.txt ani usuwać ich z raportów na siłę. To zachowanie obsługiwane przez przeglądarkę i mechanizmy wyników wyszukiwania. Jeżeli widzisz w raporcie adres z #:~:text=, nie traktuj go jak nowej podstrony do optymalizacji.
Granica jest dość prosta: jeżeli po usunięciu #fragmentu użytkownik nadal widzi tę samą pełną treść strony, wszystko jest normalne. Jeżeli bez hasha znika kluczowa treść, pojawia się inny widok, aplikacja ładuje coś dopiero JavaScriptem albo zmienia się cały kontekst strony, trzeba sprawdzić temat głębiej.
Najbardziej podejrzane są adresy typu:
example.pl/#/ofertaexample.pl/#/kontaktexample.pl/#/produkty/butyexample.pl/app/#/dashboard
To często ślad po aplikacji SPA albo starszym routerze JavaScriptowym. Dla użytkownika może wyglądać jak osobna podstrona. Dla systemów indeksujących i narzędzi SEO taki układ bywa mniej czytelny niż klasyczne adresy:
/oferta//kontakt//produkty/buty/
Priorytet decyzyjny jest więc taki: kotwice do sekcji są OK, Scroll to Text Fragment jest OK, ale ważne widoki, kategorie, usługi i produkty powinny mieć własne, czyste URL-e.
Kotwice, duplicate content i canonical: gdzie kończy się mit, a zaczyna realny problem?
Najczęstsze pytanie brzmi: czy linki z kratką tworzą duplicate content?
W typowej stronie WordPressa — nie. Jeżeli masz artykuł /linkowanie-wewnetrzne/ i linki:
/linkowanie-wewnetrzne/#co-to-jest/linkowanie-wewnetrzne/#przyklady/linkowanie-wewnetrzne/#faq
to nie masz trzech osobnych artykułów. Masz jedną stronę i trzy skróty do jej sekcji. To nie jest ten sam kaliber problemu co indeksowalne filtry, parametry sortowania, paginacja bez logiki albo kilka wersji tej samej kategorii.
Duplicate content pojawia się wtedy, gdy wyszukiwarka może trafić na kilka adresów prowadzących do tej samej albo bardzo podobnej treści jako do osobnych dokumentów. Przykłady realnego ryzyka:
/buty-sportowe//buty-sportowe/?sort=price/buty-sportowe/?utm_source=newsletter/kategoria/buty-sportowe//produkt/buty-x/i/sklep/buty-x/
Przy fragmencie URL mechanika jest inna. Hash wskazuje miejsce w dokumencie. Sam w sobie nie powinien tworzyć nowej wersji treści wymagającej osobnego canonicala.
I tu dochodzimy do drugiego pytania: czy canonical powinien zawierać #fragment?
W praktyce rekomendacja jest prosta: canonical ustawiaj do czystego URL-a strony, bez #fragmentu.
Dla artykułu:
https://example.pl/linki-z-kratka-url-seo-kotwice-fragmenty/
canonical powinien wskazywać:
https://example.pl/linki-z-kratka-url-seo-kotwice-fragmenty/
a nie:
https://example.pl/linki-z-kratka-url-seo-kotwice-fragmenty/#faq
ani:
https://example.pl/linki-z-kratka-url-seo-kotwice-fragmenty/#czy-linki-szkodza-seo
Dlaczego? Bo kanoniczna ma być strona jako dokument, a nie konkretna pozycja przewinięcia w dokumencie. Fragment jest użyteczny dla człowieka, który chce od razu przejść do sekcji. Canonical ma porządkować sygnały indeksacyjne dla całej strony.
W audycie najlepiej sprawdzić trzy rzeczy:
- czy tag canonical na stronie wskazuje czysty adres bez #,
- czy wewnętrzne linki do głównej wersji artykułu prowadzą do czystego URL-a,
- czy linki z hashem są używane tam, gdzie rzeczywiście mają pomóc użytkownikowi przejść do sekcji.
Nie ma sensu „naprawiać” każdego linku w spisie treści tylko dlatego, że zawiera #. To normalny mechanizm. Sens ma za to naprawienie sytuacji, w której większość linków wewnętrznych do ważnego tekstu prowadzi wyłącznie do sekcji, np. /poradnik/#ranking, a prawie nigdzie nie linkujesz do /poradnik/.
To drobny niuans, ale w SEO takie niuanse robią porządek. Link do sekcji jest przydatny kontekstowo. Link do czystego URL-a jest lepszy jako główny sygnał dla strony.
Dobry schemat wygląda tak:
- w menu, breadcrumbach, mapie strony i głównych linkach kontekstowych: czysty URL,
- w spisie treści: linki z # do sekcji,
- w artykule, gdy odsyłasz do konkretnego fragmentu długiego poradnika: link z
#jest dopuszczalny, - w canonicalu: czysty URL bez #,
- w sitemapie XML: czysty URL bez #.
Kiedy hash zaczyna robić bałagan? Najczęściej wtedy, gdy aplikacja ładuje różną treść po zmianie fragmentu. Jeżeli /produkty/#buty, /produkty/#kurtki i /produkty/#plecaki pokazują trzy różne listy produktów, ale nie istnieją normalne adresy /produkty/buty/, /produkty/kurtki/, /produkty/plecaki/, to architektura jest słaba. Zwłaszcza gdy te kategorie mają potencjał SEO.
Jeszcze większy problem dotyczy aplikacji SPA używających Hash Routera, czyli adresów w stylu example.pl/#/oferta. Technicznie wszystko po # jest fragmentem URL, a fragment nie jest wysyłany do serwera. Serwer dostaje żądanie do strony głównej, nie do /oferta/. W efekcie bot indeksujący podczas pierwszego pobrania HTML-a może zobaczyć tę samą, ubogą albo pustą powłokę aplikacji dla wielu „widoków”, które dla użytkownika wyglądają jak osobne podstrony.
To jest sedno problemu, a nie sama kratka. Jeśli treść usługi, kategorii albo produktu pojawia się dopiero po wykonaniu JavaScriptu i zmianie hasha, Google musi najpierw pobrać powłokę, potem wyrenderować JS, potem zrozumieć stan aplikacji. Przy małym blogu WordPressa nie ma tu dramatu. Przy serwisie usługowym, e-commerce albo aplikacji z dużą liczbą podstron to proszenie się o bałagan w indeksacji, opóźnione renderowanie i nieczytelne sygnały architektury.
Poprawnym rozwiązaniem dla nowoczesnych aplikacji jest używanie HTML5 History API, często wdrażanego w frameworkach jako BrowserRouter zamiast Hash Routera. Dzięki temu aplikacja może zmieniać adres bez pełnego przeładowania strony, ale URL pozostaje czysty:
/oferta//kontakt//produkty/buty//cennik/
To są adresy, które serwer, CDN, system SSR, prerendering albo framework aplikacji mogą prawidłowo obsłużyć. Dla SEO oznacza to lepszy punkt startowy: osobna intencja dostaje osobny URL, a nie fragment doklejony do strony głównej.
Drugi przypadek bałaganu to analityka. Jeżeli narzędzie raportuje hashe jako osobne widoki, właściciel strony może zobaczyć kilkanaście wariantów jednego URL-a i zacząć podejmować złe decyzje: „FAQ ma osobny ruch”, „cennik ma spadek”, „sekcja kontakt konwertuje”. Czasem to cenna informacja o kliknięciach w spis treści. Czasem tylko źle ustawione raportowanie, które miesza sekcje z odsłonami stron.
Trzeci przypadek to sytuacja, w której sekcje zastępują osobne podstrony. Jeżeli masz usługę, która zasługuje na własny landing page, nie chowaj jej jako ósmego nagłówka w tekście i nie ratuj sytuacji kotwicą. Kotwica poprawia nawigację. Nie rozwiązuje problemu braku dedykowanego URL-a pod konkretną intencję.
Decyzja graniczna jest taka: jeśli dana sekcja ma własną frazę, własną intencję, własne argumenty sprzedażowe i można ją rozbudować bez lania wody, powinna dostać osobny adres. Jeśli jest tylko częścią większego wyjaśnienia, zostaje jako sekcja z kotwicą.
Jak poprawnie używać linków z # w WordPressie, spisie treści i linkowaniu wewnętrznym?
W WordPressie kotwice HTML są szczególnie częste, bo wiele motywów i wtyczek automatycznie generuje spis treści. Robią to Rank Math, Yoast w blokach FAQ, Easy Table of Contents, LuckyWP Table of Contents i podobne rozwiązania. Sama obecność linków z kratką nie jest problemem. Problemem jest chaos w identyfikatorach, duplikaty id, źle opisane anchory i traktowanie spisu treści jak substytutu architektury.
Poprawny przykład wygląda tak:
<h2 id="czy-linki-z-kratka-szkodza-seo">Czy linki z kratką szkodzą SEO?</h2>
<a href="#czy-linki-z-kratka-szkodza-seo">Przejdź do sekcji</a>
To jest zwykły, czytelny link do konkretnego nagłówka. Użytkownik wie, dokąd przechodzi. Przeglądarka wie, który element ma pokazać. Narzędzia SEO nie muszą zgadywać, czy #section-1, #elementor-action-482 albo #tab-3 oznacza coś ważnego.
Najlepsze praktyki są proste, ale warto trzymać się ich konsekwentnie:
- używaj opisowych identyfikatorów sekcji, np.
#canonical-bez-fragmentu, a nie#abc123, - nie powielaj tego samego
idkilka razy na jednej stronie, - nie zmieniaj identyfikatorów bez potrzeby, jeśli ktoś linkuje do konkretnych sekcji,
- w spisie treści stosuj zwykłe linki
<a href="#sekcja">, - nie ukrywaj kluczowej treści tak, żeby pojawiała się dopiero po zmianie hasha,
- nie dodawaj
#do canonicala, - nie dodawaj URL-i z
#do sitemap XML, - ważne tematy linkuj również czystym URL-em.
Jest też argument, który często umyka w technicznych rozmowach: dobrze wdrożone kotwice mogą pomóc Google lepiej zrozumieć strukturę długiego tekstu. Jeśli nagłówki mają sensowne nazwy, identyfikatory są stabilne, a spis treści linkuje do konkretnych sekcji, wynik w wyszukiwarce może zyskać dodatkowe odnośniki do fragmentów strony. Takie linki bywają opisywane jako jump links, sitelinks albo linki „przejdź do”. Nie są gwarantowane, ale przy długich poradnikach i dobrze opisanych sekcjach Google ma z czego je zbudować.
Praktyczny zysk? Wynik może zająć więcej miejsca w SERP-ie i dać użytkownikowi szybszą ścieżkę do konkretnej odpowiedzi, np. „Sprawdź cennik”, „FAQ”, „Canonical bez #”, „Problemy z Hash Routerem”. To nie jest magiczny wzrost pozycji, tylko lepsze opakowanie wyniku. A lepsze opakowanie potrafi podnieść CTR, szczególnie gdy konkurencja ma zwykły, płaski snippet bez dodatkowych skrótów.
W praktycznym audycie zaczynałbym od canonicala i architektury, nie od kosmetyki spisu treści. Kolejność jest taka:
- Sprawdź canonical
Wejdź w źródło strony albo użyj Screaming Froga. Canonical powinien wskazywać finalny, indeksowalny adres bez fragmentu. Jeżeli widzisz#w canonicalu, popraw to. - Sprawdź, czy ważne treści mają własne URL-e
Jeżeli sekcja „Pozycjonowanie sklepów internetowych” ma potencjał na osobny landing, nie trzymaj jej wyłącznie pod/oferta/#sklepy. Zrób/pozycjonowanie-sklepow-internetowych/. - Sprawdź linkowanie wewnętrzne
Linki do sekcji są dobre w kontekście. Ale dla wzmacniania konkretnej podstrony używaj głównie czystego adresu. Anchor „linki z kratką a canonical” może prowadzić do artykułu, a nie zawsze do jego sekcji. - Sprawdź analitykę
Jeżeli narzędzie raportuje hashe jako osobne ścieżki, ustal, czy to rzeczywiście pomaga. Dla długiego poradnika może być przydatne mierzenie kliknięć w spis treści, ale mieszanie sekcji z odsłonami stron potrafi popsuć analizę. - Sprawdź JavaScript
Jeśli strona zmienia główną treść po kliknięciu linku z#, upewnij się, że ta treść jest dostępna bez kombinowania. Szczególnie w SPA, konfiguratorach, zakładkach, filtrach i sekcjach ładowanych dynamicznie.
Dobrze zrobiony spis treści z kotwicami pomaga głównie użytkownikowi. Skraca drogę do odpowiedzi, pozwala przeskanować długi tekst i poprawia orientację w artykule. To nie jest magiczny dopalacz pozycji. Nie ma sensu obiecywać, że samo dodanie kotwic podniesie ranking. Może natomiast poprawić zachowanie użytkownika na stronie, ułatwić linkowanie do konkretnych fragmentów i zwiększyć szansę na bardziej użyteczny snippet w Google.
W tekstach poradnikowych warto stosować kotwice przy sekcjach takich jak:
- definicje,
- checklisty,
- FAQ,
- porównania,
- instrukcje krok po kroku,
- przykłady kodu,
- tabele z decyzjami,
- fragmenty, do których często odsyła support lub handlowiec.
W linkowaniu wewnętrznym trzeba zachować rozsądek. Jeżeli z artykułu o canonicalach linkujesz do tekstu o hashach, anchor linki z kratką a canonical jest dobry. Jeżeli odsyłasz dokładnie do części FAQ, możesz użyć linku z #faq. Ale jeśli każdy link w serwisie prowadzi do innej sekcji tego samego artykułu, raport linkowania zaczyna wyglądać bardziej skomplikowanie niż sama struktura strony.
Dla toNIEmarketing.pl ten temat pasuje szczególnie dobrze, bo domyka klaster wokół technicznego SEO, canonicali, kanibalizacji, parametrów URL i linkowania wewnętrznego. Naturalne miejsca na linki wewnętrzne to:
- artykuł o canonical/301/noindex — anchor: linki z kratką a canonical,
- artykuł o Internal Link Juicer — anchor: kotwice w linkowaniu wewnętrznym,
- artykuł o silosach i mapowaniu słów — anchor: kiedy sekcja powinna być osobnym URL-em,
- artykuł o parametrach, filtrach i kanibalizacji — anchor: fragment URL a parametr URL.
Największy priorytet ma link z tekstu o canonicalach i duplikacji. Tam użytkownik już myśli o wersjach URL-i, więc pytanie o # pojawia się naturalnie. Link z artykułu o Internal Link Juicer jest pomocniczy, ale też dobry, bo wiele automatycznych systemów linkowania potrafi mieszać anchory, sekcje i adresy docelowe. Linki z tekstów o silosach oraz parametrach domykają temat architektury.
Jeśli trzeba podjąć jedną decyzję po lekturze, brzmi ona tak: nie usuwaj kotwic ze spisu treści, tylko sprawdź, czy canonical, sitemap, linkowanie główne i ważne podstrony opierają się na czystych URL-ach. To usuwa realne ryzyko, zamiast walczyć z normalnym mechanizmem przeglądarki.
FAQ: linki z # w adresie URL a SEO
Screaming Frog pokazuje setki adresów z #. Co robić?
Najpierw sprawdź, czy to zwykłe kotwice ze spisu treści. Jeśli tak, nie naprawiaj ich hurtowo — sprawdź canonical, sitemapę i linkowanie do czystych URL-i.
W raporcie widzę adresy z #:~:text=. Czy to błąd?
Nie. To Scroll to Text Fragment, czyli link do konkretnego fragmentu tekstu. Nie wymaga przekierowań, canonicali ani blokowania.
Czy canonical może wskazywać adres z #?
Nie rób tego. Canonical powinien prowadzić do czystego adresu strony, bez fragmentu.
Czy linki z # tworzą duplicate content?
Zwykle nie. Duplikaty robią częściej parametry, filtry, warianty kategorii i powielone adresy, nie zwykłe kotwice do sekcji.
Czy URL-e z # dodawać do sitemap XML?
Nie. Sitemap powinna zawierać kanoniczne, indeksowalne adresy bez fragmentów.
Czy spis treści z kotwicami pomaga SEO?
Pomaga pośrednio: poprawia nawigację, czytelność i może ułatwić Google wygenerowanie linków do sekcji w wyniku wyszukiwania.
Kiedy sekcja z kotwicą powinna dostać osobny URL?
Gdy ma własną intencję wyszukiwania, własne frazy i da się z niej zrobić pełny landing bez sztucznego rozciągania tekstu.
Czy adres /#/oferta jest problemem?
Może być. Jeśli to ważna podstrona w aplikacji SPA, lepszym rozwiązaniem jest czysty adres /oferta/ obsługiwany przez routing oparty o History API.
Czy trzeba wyłączać spis treści w WordPressie przez linki z #?
Nie. Lepiej zadbać o opisowe id, unikalne nagłówki i poprawny canonical.
Od czego zacząć poprawki na stronie?
Od canonicala, sitemap XML i sprawdzenia, czy ważne usługi lub kategorie mają własne czyste URL-e. Dopiero potem poprawiaj kosmetykę kotwic.
Comments (0)