Filtry w sklepie internetowym a SEO - które indeksować, a które blokować (noindex, canonical, robots.txt)
POWRÓT_DO_BLOGA
AI & SEO 15 min

Filtry w sklepie internetowym a SEO - które indeksować, a które blokować (noindex, canonical, robots.txt)

Paweł Wiszniewski
Paweł Wiszniewski
Specjalista SEO & GEO · AI Engineer

Filtry w sklepie internetowym to pytanie o dwie rzeczy naraz: które kombinacje mają być stronami w Google, a których robot ma w ogóle nie odwiedzać. Reguła decyzyjna: filtr, który ma popyt (jest w podpowiedziach Google albo ma co najmniej ok. 50 wyszukiwań miesięcznie) i co najmniej ok. 10 produktów, dostaje stały, przyjazny adres z linkiem w HTML, własnym tytułem i canonicalem do siebie. Cała reszta (kolejne kombinacje, rozmiar, cena, sortowanie, liczba produktów na stronie) nie powinna być linkami w HTML, a jeśli generuje adresy, blokujesz je w robots.txt. Noindex i canonical stosuj do sprzątania adresów, które już są w indeksie. Nigdy nie łącz ich z blokadą w robots.txt, bo Google nie zobaczy wtedy ani jednego, ani drugiego.

Które filtry w sklepie internetowym indeksować, a które blokować: reguła z progami, noindex vs canonical vs robots.txt vs nofollow w jednej tabeli, sprawdzenie filtrów w 11 polskich sklepach, ustawienia Shopify, WooCommerce, PrestaShop i IdoSell, liczba adresów przy dwóch skalach, robots.txt, skrypt i dwie pułapki.

/// WPIS W SKRÓCIE

Filtry w sklepie a SEO - co indeksować, co blokować

W tym wpisie pokazuję, co robi z robotem każda metoda (robots.txt, noindex, canonical, nofollow, adresy z #, filtry bez linków), wyniki mojego sprawdzenia filtrów w 11 polskich sklepach, jak filtry obsługują domyślnie Shopify, WooCommerce, PrestaShop i IdoSell, ile adresów generują filtry przy dwóch skalach sklepu, skrypt do sprawdzenia obsługi filtrów i dwie pułapki, które znalazłem w dużych sklepach.

Czy filtry w ogóle mogą zaszkodzić SEO - pierwsza decyzja

Mogą, ale nie zawsze trzeba coś robić. Google pisze wprost, że nawigacja fasetowa to „zdecydowanie najczęstsze źródło problemów z nadmiernym crawlowaniem”, które zgłaszają właściciele stron. Każda kombinacja filtrów to nowy adres, więc przy kilkuset wartościach filtrów liczba możliwych adresów idzie w dziesiątki tysięcy.

Sytuacja sklepuCzy filtry to problemCo zrobić
Filtry działają bez zmiany adresu albo tylko po # w adresieNie dla crawlowania (Google ignoruje część po #)Nic, ale wybrane filtry z popytem dodaj jako osobne strony
Filtry zmieniają adres, ale nie są linkami w HTMLMały - Google trafia na nie rzadkoSprawdź w Search Console, czy takie adresy nie trafiają do indeksu
Filtry są linkami a href w liście produktówDuży przy setkach wartościReguły: które linkować i indeksować, resztę zablokować
W Search Console tysiące adresów z parametrami w raporcie StronyTak, już jest problemNajpierw noindex, potem blokada (kolejność niżej)
Sklep do kilkuset produktów, kilka filtrówZwykle nieWystarczy porządek z sortowaniem i liczbą produktów na stronie

Robots.txt, noindex, canonical, nofollow - co działa na crawlowanie, a co na indeksację

To najważniejsza tabela wpisu. Większość błędów przy filtrach bierze się z pomylenia dwóch rzeczy: blokowania crawlowania (robot nie pobiera adresu) i blokowania indeksacji (adres nie trafia do wyników).

MetodaOgranicza crawlowanieUsuwa z indeksuSkleja sygnały z kategoriąKiedy używać
Disallow w robots.txtTak, od razuNie - zablokowany adres może zostać w indeksie bez treściNieFiltry bez popytu, sortowanie, liczba produktów na stronie
Meta robots noindexNie (z czasem trochę)Tak, po ponownym pobraniu stronyNieSprzątanie filtrów, które już są w indeksie
rel="canonical" do kategoriiZ czasem trochę, według Google mniej skutecznie niż robots.txtZwykle tak, ale to sygnał, a nie polecenieTakFiltry bardzo podobne do kategorii (np. sortowanie, drobne cechy)
rel="nofollow" na linkach do filtrówSłabo - działa tylko na wszystkich linkach do adresuNieNieRaczej nie, Google uznaje to za mniej skuteczne
Filtry po # w adresieTak - Google ignoruje część po #Nie dotyczyNie dotyczySklepy na JavaScripcie, filtry bez potrzeby indeksacji
Filtr bez linku a href (przycisk, formularz)Tak, w praktyceNie dotyczyNie dotyczyDomyślny sposób dla filtrów bez popytu
Stały, przyjazny adres z linkiem i canonicalem do siebieNie - robot ma tu wchodzićNie - strona ma być w indeksieNie dotyczyFiltry z popytem i co najmniej ok. 10 produktami

Trzy zasady Google, które warto znać: robots.txt nie służy do kanonikalizacji (zablokowany adres może zostać w indeksie), noindex nie służy do wyboru wersji kanonicznej w obrębie jednej strony, a canonical jest silnym sygnałem, ale potrzebuje czasu. Jeśli indeksujesz filtry, Google zaleca standardowy separator & w parametrach, stałą kolejność filtrów w ścieżce i status 404 dla kombinacji bez produktów.

Które filtry indeksować - reguła i przykłady

Filtr staje się stroną docelową, gdy spełnia trzy warunki naraz: ma popyt, ma co najmniej ok. 10 produktów i odpowiada na inną intencję niż kategoria nadrzędna. Jak zbierać popyt i przypisywać frazy do filtrów, pokazałem we wpisie o słowach kluczowych dla sklepu internetowego.

Typ filtraPrzykładZwykleDlaczego
Marka w kategoriibuty trekkingowe salomonIndeksowaćDuży popyt, stabilna lista produktów
Cecha z popytemżwirek bentonitowy, buty gore-texIndeksowaćLudzie wpisują tę cechę razem z kategorią
Płeć, typ, przeznaczeniebuty trekkingowe damskieLepiej jako podkategoriaTo osobna intencja i stały asortyment
Kolorczarne buty trekkingoweTylko kolory z popytemWiększość kolorów nie ma wyszukiwań
Rozmiarbuty trekkingowe 38Nie indeksowaćDostępność zmienia się codziennie
Cena, promocja, dostępnośćdo 300 zł, w promocjiNie indeksowaćLista zmienia się z dnia na dzień
Dwa filtry narazsalomon + gore-tex + czarneTylko wybrane pary z popytemKombinacje mnożą adresy najszybciej
Sortowanie i liczba produktów na stroniesort=price, limit=96Zawsze blokowaćTa sama lista w innej kolejności

Jak 11 polskich sklepów obsługuje filtry - moje sprawdzenie

Jak sprawdzałem: 15 października 2026 skrypt w przeglądarce Chromium otwierał po jednej kategorii w 17 polskich sklepach, liczył kontrolki filtrów i linki a href do filtrów, a potem klikał filtry (jeden, potem drugi), żeby zobaczyć, jaki adres powstaje. Dla każdego adresu filtra sprawdzał status HTTP, meta robots, canonical i to, czy robots.txt blokuje go dla Googlebota. W 11 sklepach udało się ustalić obsługę filtrów. W pozostałych 6 filtry nie zmieniały adresu po kliknięciu albo skrypt nie zdołał ich kliknąć, więc ich nie oceniam.

SklepAdres filtraLinki a href do filtrówObsługa adresu filtraWniosek
eobuwie.plścieżka, np. /marka:salomontak, wybraneindex, canonical do siebie; pusty filtr zwraca 404Wzorcowo
zooplus.plścieżka, np. /bentonitowytakindex, canonical do siebie; 109-167 produktówWzorcowo: cecha z popytem jako podkategoria
modivo.plścieżka, np. /marka:reeboktakindex, canonical do siebie, także dla marek z 2-6 produktamiIndeksowane cienkie strony
morele.netścieżka z przecinkami: ,,,,,496,,,0,,,,/1/takczęść filtrów index, inne noindex, followSelektywnie; przecinki jako separator
smyk.comparametr ?plec=Dziewczynkanienoindex, bez canonicalaPoprawnie
sportano.plparametry ?nowosc=1&wyprzedaze=1tak, kilkanoindex, nofollow, bez canonicalaPoprawnie
bee.plparametr params[tg]=38nienoindex, nofollow i canonical do kategoriiDwa sprzeczne sygnały
swiatksiazki.plparametr ?customFilters=...nieindex, canonical do kategoriiTylko canonical
melisa.plparametr ?marka=...nieindex, canonical do kategorii; cena i sortowanie zablokowane w robots.txtTylko canonical dla marek
taniaksiazka.plparametr params[tg]=10nienoindex, nofollow, canonical do kategorii i blokada w robots.txtGoogle nie zobaczy noindex ani canonicala
kontri.pl (IdoSell)parametr ?filter_sizes=...nieindex, canonical do kategorii i blokada *?filter_* w robots.txtGoogle nie zobaczy canonicala

Co z tego wynika:

  • Najczęstsza metoda to canonical do kategorii (5 z 11 sklepów), a 4 sklepy dają filtrom noindex. 4 sklepy indeksują filtry jako strony z własnym adresem w ścieżce, z czego jeden także te z kilkoma produktami.
  • 6 z 11 sklepów nie linkuje filtrów przez a href, więc ich adresy powstają dopiero po kliknięciu. To skutecznie ogranicza crawlowanie bez żadnych reguł.
  • 2 sklepy łączą noindex lub canonical z blokadą w robots.txt. To pułapka opisana niżej.
  • Liczba wartości filtrów robi wrażenie. Na stronie kategorii tabletów w morele.net naliczyłem 459 kontrolek filtrów, w kategorii spodni w smyk.com 282. Przy 459 wartościach same kombinacje dwóch filtrów to do ok. 105 tys. adresów - dlatego indeksowanie wszystkiego nie wchodzi w grę.

Filtry na Shopify, WooCommerce, PrestaShop i IdoSell - ustawienia domyślne

Platforma decyduje, z jakiego punktu startujesz. Domyślne reguły sprawdziłem w plikach robots.txt sklepów i w kodzie źródłowym PrestaShop.

PlatformaJak wyglądają adresy filtrówDomyślne robots.txtCo zrobić
Shopifykolekcje i tagi (/collections/buty/czarne), filtry ?filter.v.option...=Blokuje sortowanie (sort_by), kombinacje tagów ze znakiem + i dwa lub więcej filtrów naraz; pojedynczy filtr jest dostępny dla robotaIndeksowane filtry z popytem jako osobne kolekcje; pojedyncze filtry sprawdzić w Search Console
WooCommerceparametry ?filter_kolor=czarny, wtyczki filtrów z własnymi parametramiWordPress domyślnie blokuje tylko /wp-admin/Dopisać reguły dla parametrów filtrów i sortowania (orderby); indeksowane filtry jako kategorie lub tagi
PrestaShopmoduł nawigacji fasetowej, parametr ?q=Kolor-CzarnyGenerator robots.txt blokuje ?q= i &q= oraz order= i n=Filtry z popytem jako osobne kategorie lub moduł stron docelowych z przyjaznymi adresami
IdoSellparametry ?filter_...=W sprawdzonym sklepie blokada *?filter_*Nie łączyć blokady z canonicalem; strony docelowe dla filtrów z popytem
Next.js i sklepy headlessdowolne - decydujesz sambrak domyślnych regułWybrane filtry w ścieżce w stałej kolejności, renderowane na serwerze, 404 dla pustych kombinacji, reszta bez linków a href

Najczęstszy problem z platformami: domyślna blokada działa, więc nikt nie tworzy stron dla filtrów z popytem. W PrestaShop i w sklepie na IdoSell z mojego sprawdzenia wszystkie filtry są zablokowane, więc fraza „buty trekkingowe salomon” nie ma szansy trafić na stronę filtra - trzeba ją obsłużyć osobną kategorią albo stroną docelową. Takie strony dla filtrów z popytem wdrażam w szablonach sklepów w ramach pozycjonowania sklepów internetowych.

Ile adresów generują filtry - dwie skale

Szacunek przy założeniu, że filtry generują adresy i są linkami. Liczba kombinacji dwóch filtrów to n × (n - 1) / 2, gdzie n to liczba wartości filtrów w kategorii.

ZałożenieSklep A: 500 produktówSklep B: 20 000 produktów
Kategorie40600
Wartości filtrów w kategorii (średnio)60400
Pojedyncze filtry (kategorie × wartości)2 400240 000
Kombinacje dwóch filtrów w jednej kategoriido 1 770do 79 800
Indeksowane filtry z popytem (cel)20-40300-1 500
Wdrożenie reguł (szacunek z moich wycen, X 2026)8-16 godz.40-80 godz.

Wniosek: w małym sklepie problem często sam się nie pojawia, ale warto od początku zablokować sortowanie i dodać kilkadziesiąt stron filtrów z popytem. W dużym sklepie bez reguł robot może mieć do pobrania setki tysięcy adresów filtrów na kilka tysięcy produktów, a nowe produkty czekają dłużej na zaindeksowanie - o tym, jak Google przydziela zasoby, piszę we wpisie o crawl budgecie.

Przykładowy robots.txt dla filtrów

Reguły dla typowego sklepu z filtrami w parametrach. Nazwy parametrów zmień na swoje i przed wdrożeniem sprawdź je w raporcie robots.txt w Search Console.

robots.txt
User-agent: *# sortowanie i liczba produktów na stronieDisallow: /*?*sort=Disallow: /*?*orderby=Disallow: /*?*limit=# filtry w parametrach (indeksowane filtry mają własne adresy w ścieżce)Disallow: /*?*filter_Disallow: /*?*cena_od=Disallow: /*?*cena_do=# wyniki wyszukiwarki wewnętrznejDisallow: /szukajSitemap: https://twojsklep.pl/sitemap.xml

Te reguły dodaj dopiero po tym, jak filtry z parametrami wypadną z indeksu (patrz pułapka niżej). Strony filtrów z popytem mają adresy w ścieżce, np. /buty-trekkingowe/marka-salomon, więc reguły ich nie blokują.

Skrypt: sprawdź, jak sklep obsługuje adresy filtrów

Skrypt pobiera listę adresów filtrów (np. z crawla, logów albo raportu Strony w Search Console) i dla każdego sprawdza status HTTP, meta robots, nagłówek X-Robots-Tag, canonical oraz blokadę w robots.txt. Na końcu wypisuje adresy ze sprzecznymi sygnałami.

sprawdz_filtry.py
# pip install requestsimport csv, re, sysfrom urllib.parse import urlparse, urljoinfrom urllib import robotparserimport requestsUA = "Mozilla/5.0 (compatible; filter-audit)"urls = [u.strip() for u in open(sys.argv[1]) if u.strip()]host = urlparse(urls[0]).scheme + "://" + urlparse(urls[0]).netlocrp = robotparser.RobotFileParser(host + "/robots.txt"); rp.read()def check(url):    r = requests.get(url, headers={"User-Agent": UA}, timeout=20, allow_redirects=False)    html = r.text if "html" in r.headers.get("content-type", "") else ""    meta = re.search(r'<meta[^>]+name=["\']robots["\'][^>]*content=["\']([^"\']+)', html, re.I)    canon = re.search(r'<link[^>]+rel=["\']canonical["\'][^>]*href=["\']([^"\']+)', html, re.I)    robots = ((meta.group(1) if meta else "") + " " + r.headers.get("x-robots-tag", "")).lower()    canonical = urljoin(url, canon.group(1)) if canon else ""    return {"url": url, "status": r.status_code, "robots_txt_blocked": not rp.can_fetch("Googlebot", url),            "noindex": "noindex" in robots, "canonical": canonical,            "canonical_self": canonical.rstrip("/") == url.rstrip("/")}rows = [check(u) for u in urls]with open("filtry.csv", "w", newline="") as f:    w = csv.DictWriter(f, fieldnames=rows[0].keys()); w.writeheader(); w.writerows(rows)for r in rows:    if r["robots_txt_blocked"] and (r["noindex"] or (r["canonical"] and not r["canonical_self"])):        print("SPRZECZNE: blokada w robots.txt ukrywa noindex/canonical:", r["url"])    elif r["noindex"] and r["canonical"] and not r["canonical_self"]:        print("SPRZECZNE: noindex i canonical do innej strony:", r["url"])    elif r["status"] == 200 and not r["noindex"] and r["canonical_self"]:        print("INDEKSOWANY filtr - sprawdź popyt i liczbę produktów:", r["url"])

Uwaga: robotparser z biblioteki standardowej Pythona nie obsługuje w pełni symboli * i $ w regułach robots.txt tak jak Google. Przy regułach z gwiazdkami sprawdź wynik w raporcie robots.txt w Search Console albo użyj parsera zgodnego z Google.

Pułapka 1: blokada w robots.txt ukrywa noindex i canonical

Najczęstszy błąd, który znalazłem: sklep daje filtrom noindex albo canonical do kategorii i jednocześnie blokuje je w robots.txt. Tak było w taniaksiazka.pl (noindex, nofollow, canonical i reguła Disallow: /*?params*=*) i w kontri.pl (canonical i reguła Disallow: *?filter_*). Google nie pobiera zablokowanego adresu, więc nie widzi ani noindex, ani canonicala. Adresy, które trafiły do indeksu wcześniej, mogą w nim zostać jako „Zaindeksowana, ale zablokowana przez plik robots.txt”, bez treści i bez przekazania sygnałów do kategorii.

Prawidłowa kolejność przy sprzątaniu:

  1. 1.Zostaw adresy filtrów dostępne dla robota i dodaj im noindex (dla filtrów bez wartości) albo canonical do kategorii (dla filtrów prawie identycznych z kategorią). Nie używaj obu naraz - Google nie zaleca noindex do wyboru wersji kanonicznej.
  2. 2.Usuń linki a href do filtrów bez popytu z list produktów.
  3. 3.Poczekaj, aż liczba tych adresów w raporcie Strony w Search Console wyraźnie spadnie.
  4. 4.Dopiero potem dodaj blokadę w robots.txt, jeśli filtry nadal zużywają crawl.

Pułapka 2: indeksowane filtry z kilkoma produktami

Druga skrajność: sklep indeksuje każdy filtr marki, bo ma do tego mechanizm. W modivo.pl strony filtrów marki w kategorii legginsów miały index i canonical do siebie również wtedy, gdy zawierały 2, 4 albo 6 produktów. Takich stron są tysiące, każda z prawie pustą listą, a po wyprzedaniu kilku modeli robią się puste. Rozwiązanie: próg liczby produktów w szablonie. Poniżej progu filtr dostaje noindex i znika z linków, powyżej wraca do indeksu. Pusty filtr zwraca 404, tak jak robi to eobuwie.pl i jak zaleca Google.

Czego nie robić

  • Nie blokuj w robots.txt adresów, którym właśnie dałeś noindex albo canonical.
  • Nie dawaj jednej stronie jednocześnie noindex i canonicala do kategorii.
  • Nie indeksuj wszystkich kombinacji filtrów - tylko te z popytem i z co najmniej ok. 10 produktami.
  • Nie linkuj przez a href każdej wartości filtra na liście produktów.
  • Nie zostawiaj indeksowanego sortowania i liczby produktów na stronie.
  • Nie przekierowuj pustych kombinacji filtrów na stronę błędu - zwróć 404 pod tym samym adresem.
  • Nie licz na nofollow - działa tylko, gdy ma go każdy link do adresu, także z zewnątrz.

FAQ

Kolejność wszystkich prac w sklepie opisuję w strategii SEO dla sklepu internetowego. Jeśli chcesz, żebym przejrzał filtry w Twoim sklepie i wdrożył reguły w szablonach, zobacz pozycjonowanie sklepów internetowych.

/// AUTHOR
Paweł Wiszniewski – AI & Web Engineer

Paweł Wiszniewski

SEO & GEO Specialist & AI Engineer

Specjalista SEO/GEO (10 lat) i AI engineer (3 lata). Buduję widoczność w wyszukiwarkach, systemy AI i automatyzacje, które redukują koszty i zwiększają efektywność operacyjną firm.

Signal received?

Przerwij
Ciszę

Zainicjuj protokół. Nawiąż połączenie. Zbudujmy coś głośnego.

> OCZEKIWANIE_NA_SYGNAŁ...