Boti a fasetové vyhledávání v PrestaShopu: 100 % CPU a výpadky

SEO a výkon · 6 min čtení · Aktualizováno 21/09/2026

Boti a fasetové vyhledávání v PrestaShopu: 100 % CPU a výpadky

Sobota odpoledne. Přijde e-mail od hostingu s varováním, že váš účet je už hodiny na 100 % CPU. Otevřete statistiky a čekáte příval zákazníků, a najdete opak: čtyřicet tisíc zobrazení stránek a nula objednávek.

Není to útok, rozbitý modul ani váš e-shop, který dělá něco divného. Někdo začal procházet úplně všechny filtry ve vašem katalogu, jeden po druhém.

Co se doopravdy děje?

Váš e-shop má fasetové vyhledávání: velikost, barva, značka, cena, dostupnost a navrch řazení. Díky tomu se v něm pohodlně hledá.

Problém je, že každá kombinace těch filtrů je jiná webová adresa. Velikost M v modré od jedné značky seřazená podle ceny je jedna. Velikost M v modré od té značky seřazená od nejnovějších je další. A tak dál přes všechny možné kombinace: ve středně velkém e-shopu jich jsou stovky tisíc, ve velkém miliony.

Roboti sociálních sítí a služeb umělé inteligence – Facebooku, TikToku, půl tuctu firem, o kterých jste nikdy neslyšeli – usoudili, že je potřebují vidět všechny. A říkají si o všechny, najednou, bez přestávky.

Žádná z těch adres není stránka, kterou máte uloženou: každá je nové hledání ve vaší databázi.

Modul, který za tím stojí: Fasetové vyhledávání v PrestaShopu

Filtry vašeho e-shopu vykresluje jeden konkrétní modul, Fasetové vyhledávání (ps_facetedsearch), který je součástí PrestaShopu od verze 1.7 a nahradil starou Layered navigation. Pokud máte na stránkách kategorií filtry, máte ho zapnutý.

V logu se pozná snadno: každá kombinace cestuje v parametru q adresy a vypadá takhle.

/12-tshirts?q=Size-M/Colour-Blue/Brand-Adidas

Pokud váš přístupový log ukazuje tisíce řádků s ?q=, všechny různé a jeden za druhým, víte, co vám žere stroj.

A proč je to tak drahé? Když takový požadavek přijde, modul nehledá jen produkty, které odpovídají filtru: zároveň přepočítává počítadla všech ostatních filtrů – to „Modrá (12)“, „Zelená (5)“ vedle každého zaškrtávacího políčka – a spouští k tomu několik počítacích dotazů do svých indexových tabulek. Vynásobte to velkým katalogem a tisíci požadavků za minutu.

Dvě páky, které jsou přímo v modulu a na které skoro nikdo nesahá, v Moduly → Správce modulů → Fasetová navigace:

  • Vypněte počet produktů vedle každého filtru. Je to nejdražší část každého požadavku a ve většině e-shopů ta, která nikomu nechybí.
  • Projděte šablony filtrů pro jednotlivé kategorie. Každý filtr, který necháte, násobí možné kombinace. Osm filtrů v kategorii není osm adres: jsou to tisíce.

Ani jedna páka problém sama nevyřeší, ale obě sníží cenu každého požadavku dřív, než sáhnete na cokoli jiného.

Proč to tolik bolí?

Filtrované hledání je jedna z nejdražších věcí, které e-shop dělá: musí projít celý katalog, porovnat vlastnosti, spočítat, kolik produktů zbývá pod každým filtrem, a seřadit výsledek. Zákazník jich za celou návštěvu udělá tři čtyři. Robot tři čtyři za sekundu.

A tady je ta část, která všechny zaskočí: mezipaměť vás nezachrání. Mezipaměť pomáhá, když hodně návštěvníků chce totéž. Tady se nic neopakuje: každá kombinace je jedinečná, takže všechny jsou „první návštěva“ a všechny jdou až do databáze.

Výsledek je vždycky stejný. Požadavky se hromadí, serveru dojde místo a e-shop přestane odpovídat – robotovi i zákazníkovi, který se chystal zaplatit. Pokud to přijde uprostřed kampaně, zaplatili jste reklamu, která vede na web, který se neotevře.

Jak poznat, jestli jde o váš případ?

Čtyři znamení, a když platí kterákoli dvě zároveň, je to skoro jisté:

  • Vysoká zátěž bez prodejů. Obrovská zobrazení, žádné košíky. Návštěvy a objednávky k sobě nesedí, ani zdaleka.
  • Hosting vás varuje, že spotřebováváte příliš, nebo vám na chvíli pozastaví účet „kvůli ochraně ostatních zákazníků“.
  • Padá v podivných hodinách: v noci, v neděli, v náhodných vlnách bez obchodního vzorce.
  • Přístupový log ukazuje tisíce adres s parametry filtrů za sebou, všechny různé, vyžádané během pár sekund.

Pokud je při tom pomalá i administrace, máte potvrzení: nejde o veřejnou část, stroj je zahlcený. Psali jsme o tom v článku kdy je pomalost e-shopem a kdy serverem.

Co vám poradí a proč to nestačí?

Tenhle problém přitahuje spoustu oblíbených řešení, která v praxi nevydrží:

  1. „Zablokujte je v robots.txt.“ Ten soubor je zdvořilá prosba, ne dveře. Roboti, kteří ho respektují, nejsou váš problém; ti, kdo vás shazují, ho nečtou. A když to přeženete, poslechne Google a vy jste se vymazali z výsledků.
  2. „Zablokujte Facebook a TikTok podle jména.“ Funguje to týden. Změní identitu, přijdou z tisíců různých adres a každý měsíc se objeví tři noví. Je to seznam, který nikdy nedoudržujete.
  3. „Stačí je označit jako noindex.“ Stránka se značkou noindex vás pořád stojí: robot si o ni musí říct, aby tu značku vůbec přečetl. Pomáhá to vyhledávači, ne vašemu CPU.
  4. „Pořiďte si větší server.“ Platit dvakrát tolik za to, abyste robotovi zadarmo servírovali katalog, je špatný obchod: další špička bude větší, protože čím lépe odpovídáte, tím rychleji se ptají.
  5. „Vypněte fasetové vyhledávání.“ Vyřeší to zátěž a rozbije e-shop: filtry jsou to, čím lidé najdou, co si koupí. Druhý den to uvidíte na konverzích.
  6. „Dejte před to CDN a máte hotovo.“ CDN zrychluje to, co se opakuje. Tady se nic neopakuje: každá kombinace je jedinečná a do vaší databáze dorazí tak jako tak.
  7. „Zapněte režim pod útokem.“ Buď to ztížíte svým zákazníkům i Googlu, nebo roboti dál projdou. Přežijete s tím odpoledne, ale žít se tak nedá.

Všechna mají stejnou vadu: léčí příznak, tedy provoz, místo příčiny, totiž že je váš e-shop ochotný vyrobit miliony různých stránek pro každého, kdo si o ně řekne.

Kde je skutečné řešení?

To, co opravdu vydrží, se staví ve třech vrstvách a žádná z nich neznamená vypnout filtry:

  • Rozhodnout, které kombinace existují. Ze všech, které by váš e-shop dokázal vytvořit, dává zákazníkovi nebo Googlu smysl jen hrstka. Ostatní nepotřebují vlastní adresu, a když ji ztratí, hřiště se zmenší z milionů na pár tisíc.
  • Nepustit drahé věci až dolů. Požadavky, které jsou šum, dostanou odpověď dřív, než se dotknou databáze, a platí limit, kolik hledání za minutu smí jeden zdroj spustit. Zákazník jich udělá tři; kdo jich udělá tři sta, zákazník není, ať si říká jakkoli.
  • Oddělit ty, kdo soupeří o zdroje. Procházení roboty by nikdy nemělo bojovat o stejné CPU jako něčí pokladna. Když je to postavené správně, robot počkat může; zákazník ne.

Díky tomu zátěž obvykle hned první den prudce klesne a e-shop přestane padat, aniž by zákazníci přišli o jediný filtr a aniž byste na Googlu ztratili pozice. Spíš naopak: jakmile přestanete plýtvat časem Googlu na čtyři sta tisíc opakovaných stránek, začne se dívat na ty, na kterých vám záleží – přesně o tom jsme psali v článku kde začít, když se nezobrazujete.

Pokud s tím bojujete už měsíce

Je to zákeřný problém, protože nikdy neukáže tvář: není žádná chyba, na kterou se podívat, jen e-shop, který některé dny funguje a jiné ne, a hosting, který vám říká, že je to vaše vina.

To vše – rozhodnout, které kombinace existují, odpovídat před databází a držet roboty dál od pokladny – obsahuje modul Ochrana proti botům pro PrestaShop: nainstalujete ho a chrání od první minuty, aniž by zákazníci přišli o jediný filtr, ověřený Google pustí dovnitř a druhý den vám jeho panel ukáže, kolik požadavků zůstalo za dveřmi a kdo je posílal. Jak se nastavují limity na adresu a na síť, aniž byste zablokovali Google, popisujeme v článku omezení počtu požadavků na IP v PrestaShopu.

A pokud si nejste jistí, že jde o váš případ, pošlete nám přístupový log ze špatného dne přes kontaktní formulář: zdarma vám řekneme, kolik z těch požadavků jsou lidé a kolik šum.

Moduly zmíněné v tomto článku

Číst dál

Ochrana proti botům pro PrestaShop: štít fasetového vyhledávání a limit požadavků Ochrana proti botům pro PrestaShop: štít fasetového vyhledávání a limit požadavků 149,99 $ Zobrazit

Řekněte nám, co vaše firma potřebuje

Modul, aplikace, server, který vám dělá potíže, nebo něco naléhavého. Odpovíme do 24 hodin s pevnou nabídkou, cenou a termínem.