
Filtry w sklepie internetowym a SEO - które indeksować, a które blokować (noindex, canonical, robots.txt)
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
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 sklepu | Czy filtry to problem | Co zrobić |
|---|---|---|
| Filtry działają bez zmiany adresu albo tylko po # w adresie | Nie dla crawlowania (Google ignoruje część po #) | Nic, ale wybrane filtry z popytem dodaj jako osobne strony |
| Filtry zmieniają adres, ale nie są linkami w HTML | Mały - Google trafia na nie rzadko | Sprawdź w Search Console, czy takie adresy nie trafiają do indeksu |
| Filtry są linkami a href w liście produktów | Duży przy setkach wartości | Reguły: które linkować i indeksować, resztę zablokować |
| W Search Console tysiące adresów z parametrami w raporcie Strony | Tak, już jest problem | Najpierw noindex, potem blokada (kolejność niżej) |
| Sklep do kilkuset produktów, kilka filtrów | Zwykle nie | Wystarczy 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).
| Metoda | Ogranicza crawlowanie | Usuwa z indeksu | Skleja sygnały z kategorią | Kiedy używać |
|---|---|---|---|---|
| Disallow w robots.txt | Tak, od razu | Nie - zablokowany adres może zostać w indeksie bez treści | Nie | Filtry bez popytu, sortowanie, liczba produktów na stronie |
| Meta robots noindex | Nie (z czasem trochę) | Tak, po ponownym pobraniu strony | Nie | Sprzątanie filtrów, które już są w indeksie |
| rel="canonical" do kategorii | Z czasem trochę, według Google mniej skutecznie niż robots.txt | Zwykle tak, ale to sygnał, a nie polecenie | Tak | Filtry bardzo podobne do kategorii (np. sortowanie, drobne cechy) |
| rel="nofollow" na linkach do filtrów | Słabo - działa tylko na wszystkich linkach do adresu | Nie | Nie | Raczej nie, Google uznaje to za mniej skuteczne |
| Filtry po # w adresie | Tak - Google ignoruje część po # | Nie dotyczy | Nie dotyczy | Sklepy na JavaScripcie, filtry bez potrzeby indeksacji |
| Filtr bez linku a href (przycisk, formularz) | Tak, w praktyce | Nie dotyczy | Nie dotyczy | Domyślny sposób dla filtrów bez popytu |
| Stały, przyjazny adres z linkiem i canonicalem do siebie | Nie - robot ma tu wchodzić | Nie - strona ma być w indeksie | Nie dotyczy | Filtry 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 filtra | Przykład | Zwykle | Dlaczego |
|---|---|---|---|
| Marka w kategorii | buty trekkingowe salomon | Indeksować | Duży popyt, stabilna lista produktów |
| Cecha z popytem | żwirek bentonitowy, buty gore-tex | Indeksować | Ludzie wpisują tę cechę razem z kategorią |
| Płeć, typ, przeznaczenie | buty trekkingowe damskie | Lepiej jako podkategoria | To osobna intencja i stały asortyment |
| Kolor | czarne buty trekkingowe | Tylko kolory z popytem | Większość kolorów nie ma wyszukiwań |
| Rozmiar | buty trekkingowe 38 | Nie indeksować | Dostępność zmienia się codziennie |
| Cena, promocja, dostępność | do 300 zł, w promocji | Nie indeksować | Lista zmienia się z dnia na dzień |
| Dwa filtry naraz | salomon + gore-tex + czarne | Tylko wybrane pary z popytem | Kombinacje mnożą adresy najszybciej |
| Sortowanie i liczba produktów na stronie | sort=price, limit=96 | Zawsze 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.
| Sklep | Adres filtra | Linki a href do filtrów | Obsługa adresu filtra | Wniosek |
|---|---|---|---|---|
| eobuwie.pl | ścieżka, np. /marka:salomon | tak, wybrane | index, canonical do siebie; pusty filtr zwraca 404 | Wzorcowo |
| zooplus.pl | ścieżka, np. /bentonitowy | tak | index, canonical do siebie; 109-167 produktów | Wzorcowo: cecha z popytem jako podkategoria |
| modivo.pl | ścieżka, np. /marka:reebok | tak | index, canonical do siebie, także dla marek z 2-6 produktami | Indeksowane cienkie strony |
| morele.net | ścieżka z przecinkami: ,,,,,496,,,0,,,,/1/ | tak | część filtrów index, inne noindex, follow | Selektywnie; przecinki jako separator |
| smyk.com | parametr ?plec=Dziewczynka | nie | noindex, bez canonicala | Poprawnie |
| sportano.pl | parametry ?nowosc=1&wyprzedaze=1 | tak, kilka | noindex, nofollow, bez canonicala | Poprawnie |
| bee.pl | parametr params[tg]=38 | nie | noindex, nofollow i canonical do kategorii | Dwa sprzeczne sygnały |
| swiatksiazki.pl | parametr ?customFilters=... | nie | index, canonical do kategorii | Tylko canonical |
| melisa.pl | parametr ?marka=... | nie | index, canonical do kategorii; cena i sortowanie zablokowane w robots.txt | Tylko canonical dla marek |
| taniaksiazka.pl | parametr params[tg]=10 | nie | noindex, nofollow, canonical do kategorii i blokada w robots.txt | Google nie zobaczy noindex ani canonicala |
| kontri.pl (IdoSell) | parametr ?filter_sizes=... | nie | index, canonical do kategorii i blokada *?filter_* w robots.txt | Google 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.
| Platforma | Jak wyglądają adresy filtrów | Domyślne robots.txt | Co zrobić |
|---|---|---|---|
| Shopify | kolekcje 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 robota | Indeksowane filtry z popytem jako osobne kolekcje; pojedyncze filtry sprawdzić w Search Console |
| WooCommerce | parametry ?filter_kolor=czarny, wtyczki filtrów z własnymi parametrami | WordPress domyślnie blokuje tylko /wp-admin/ | Dopisać reguły dla parametrów filtrów i sortowania (orderby); indeksowane filtry jako kategorie lub tagi |
| PrestaShop | moduł nawigacji fasetowej, parametr ?q=Kolor-Czarny | Generator robots.txt blokuje ?q= i &q= oraz order= i n= | Filtry z popytem jako osobne kategorie lub moduł stron docelowych z przyjaznymi adresami |
| IdoSell | parametry ?filter_...= | W sprawdzonym sklepie blokada *?filter_* | Nie łączyć blokady z canonicalem; strony docelowe dla filtrów z popytem |
| Next.js i sklepy headless | dowolne - decydujesz sam | brak 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żenie | Sklep A: 500 produktów | Sklep B: 20 000 produktów |
|---|---|---|
| Kategorie | 40 | 600 |
| Wartości filtrów w kategorii (średnio) | 60 | 400 |
| Pojedyncze filtry (kategorie × wartości) | 2 400 | 240 000 |
| Kombinacje dwóch filtrów w jednej kategorii | do 1 770 | do 79 800 |
| Indeksowane filtry z popytem (cel) | 20-40 | 300-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.
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.
# 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.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.Usuń linki a href do filtrów bez popytu z list produktów.
- 3.Poczekaj, aż liczba tych adresów w raporcie Strony w Search Console wyraźnie spadnie.
- 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.
/// RELATED_SERVICES
Potrzebujesz wdrożenia tych koncepcji? Zobacz usługi powiązane z tym tematem.
/// ŹRÓDŁA
- 01Google Search Central - Managing crawling of faceted navigation URLs
- 02Google Search Central Blog - Crawling December: Faceted navigation (17.12.2024)
- 03Google Search Central - How to specify a canonical URL
- 04Google Search Central - Introduction to robots.txt
- 05Google Search Central - Help Google understand your ecommerce site structure
- 06PrestaShop - generator robots.txt (classes/Tools.php)
- 07Shopify Help Center - Editing robots.txt.liquid
- 08Google Search Console Help - Page indexing report
/// RELATED_RECORDS
Słowa kluczowe dla sklepu internetowego - jak przypisać frazy do kategorii, filtrów i produktów
Jak dobrać słowa kluczowe do sklepu internetowego i przypisać je do kategorii, filtrów, kart produktów i poradników: reguła mapowania z progami, mapa fraz z 1 109 podpowiedzi Google i liczb produktów w prawdziwym sklepie, Search Console, Planer, Senuto i Ahrefs z cenami, szablon arkusza i skrypt do wykrywania kanibalizacji.
Strategia SEO dla sklepu internetowego - plan na 3, 6 i 12 miesięcy
Jak ułożyć strategię SEO sklepu internetowego według przychodu: diagnoza w jeden dzień z Search Console, macierz priorytetów, roadmapa na 3, 6 i 12 miesięcy z KPI, koszt SEO wobec Google Ads przy dwóch skalach, audyt danych produktowych 26 polskich sklepów i skrypt do szybkich zysków.
Widoczność produktów na Allegro i Amazonie - jak przygotować oferty pod wyszukiwarki i asystentów AI
Asystent AI Allegro działa dla wszystkich od 7 maja 2026, z Rufusa na Amazonie skorzystało w 2025 roku ponad 300 mln klientów, a Amazon blokuje boty ChatGPT. Jak działa trafność na Allegro, jak przygotować oferty pod asystentów AI, dlaczego warto łączyć marketplace z własnym sklepem i jak utrzymać jedno źródło danych produktowych.
Signal received?
Przerwij
Ciszę
Zainicjuj protokół. Nawiąż połączenie. Zbudujmy coś głośnego.
