Indexace velkých webů: pasti robotů a problémy s kanonizací

Proč se velké weby indexují obtížně: souboj mezi crawl budgetem a entropií URL

Čím větší web, tím vyšší pravděpodobnost, že se z něj stane labyrint pro roboty. Přichází tlak na crawl budget, exploduje počet variant URL, vznikají crawl traps (pasti) a při špatné kanonikalizaci se rozleze tzv. canonical peklo – nekonzistentní signály, které způsobí rozpad autority a roztříštěnou indexaci. Cílem technického SEO je snížit entropii URL, stabilizovat signály a nasměrovat crawlovací roboty k hodnotným dokumentům co nejefektivněji.

Anatomie crawl budgetu: kapacita, priorita a odpad

  • Kapacita: kolik URL je robot schopen denně procházet vzhledem k výkonu serveru a historii odezv.
  • Priorita: které URL robot chce navštívit na základě interních odkazů, sitemap, externích odkazů a historické hodnoty.
  • Odpad: vše, co vyčerpává rozpočet bez přínosu – duplicity, filtry, nekonečné kalendáře, session parametry, stránky s nízkou konverzní hodnotou.

Optimalizace velkého webu je kombinací omezování generování URL, správné signalizace (robots, meta, canonical, hreflang) a výkonu (rychlé 200, správné 304, cache).

Crawl traps: typologie a jejich neutralizace

  • Fasetové filtry: nekonečné kombinace parametrů (?barva=modra&velikost=44&sort=cena_desc). Řešení: allowlist parametrů, interní odkazy pouze na povolené kombinace, ostatní noindex, follow a bez odkazů v HTML; generovat přehledové landing pouze pro komerčně hodnotné fasety.
  • Kalendáře a nekonečné stránkování: URL tvořené daty (/2025/10/21/) nebo „Další“ bez konce. Řešení: limit stránkování (např. do 20), archivní seznamy seskupit po měsících, noindex pro hluboké stránky.
  • Session a tracking parametry: ?utm=, ?gclid=, ?sessionid=. Řešení: stripping parametrů na serveru, canonical na čistou URL, nepoužívat tyto URL v interním linkování ani v sitemapách.
  • Sort/Order permutace: ?sort=, ?order=. Řešení: jediná „default“ verze indexovatelná, ostatní noindex, follow.
  • Infinite scroll: generuje požadavky bez pevné URL struktury. Řešení: progresivní degradace – paralelní stránkované URL (?page=2) a interní odkazy na ně.
  • Duplicitní path aliasy: /produkt/kolobezka a /sk/produkt/kolobezka/. Řešení: striktně vynutit jediný kanonický path (301 + canonical).

Canonical peklo: když signály hovoří proti sobě

„Canonical“ je doporučení, nikoliv příkaz. Při konfliktech vyhledávače většinou důvěřují internímu linkování, hreflang párům a konzistenci. Mezi nejčastější chyby patří:

  • Kanonika na neindexovatelnou URL: <link rel="canonical" href=".../a">, ale /anoindex nebo 3xx/4xx. Výsledek: ignorování nebo výběr jiné kanoniky.
  • Paginated → page 1 canonical: každá stránka stránkování ukazuje na ?page=1, takže obsah z ?page=2..n mizí z indexu. Řešení: stránkované stránky mají self-canonical, nebo jsou noindex a agregované landingy zachycují long-tail.
  • Konflikt hreflang a canonical: hreflang odkazuje mezi jazyky, ale canonical ukazuje na jiný jazyk nebo jiný path. Řešení: hreflang páry musí směřovat na kanonické URL odpovídající verze.
  • Cross-domain canonical bez vlastnictví: news syndikát dává canonical na partnera, ale interní odkazy vedou na vlastní kopii. Výsledek: fragmentace autority.
  • Řetězení a smyčky: A canonical → B, B canonical → C, nebo A ↔ B. Řešení: přímé self-canonical, žádné řetězce ani cykly.
  • Nekonzistentní normalizace: www vs. non-www, http vs. https, trailing /, velká písmena v path. Řešení: 301 vynucení, jednotná kanonika, interní odkazy pouze v jednom tvaru.

Pravidla normalizace URL pro velké weby

  1. Protokol: vždy https, vynucené 301 + HSTS.
  2. Host: jeden hlavní host (např. www), ostatní 301.
  3. Path: trailing slash dle konvence (konzistentně), malá písmena, diakritika normalizovaná, žádné duplicitní lomítka.
  4. Parametry: pevný allowlist; pořadí parametrů standardizované; nepotřebné stripping.
  5. Self-canonical: každá indexovatelná URL deklaruje sebe sama, výjimky pouze tam, kde skutečně existuje nadřazená verze.

Řízení pomocí robots: robots.txt, meta robots a HTTP hlavičky

  • robots.txt: blokování crawl traps, ale ne indexování již objevených URL. Vhodné pro masově generované patterny (/vyhledavani*, /*?sort=).
  • Meta robots: noindex, follow pro sekundární varianty (třídění, hluboké stránky stránkování, nízkohodnotné filtry).
  • X-Robots-Tag: na úrovni hlaviček pro binární soubory, exporty, feedy (noindex).
  • Disallow ≠ Noindex: zablokované URL může zůstat v indexu jako „odkazovaná“. Pro jistotu používejte noindex, pokud chcete vyloučit z indexu.

Výkon a cache: zrychlení crawl-u bez ztráty obsahu

  • Stabilní 200 s TTFB < 200 ms na klíčových šablonách (listy, detail). Rychlé odpovědi zvyšují „crawl rate limit“.
  • HTTP 304 s ETag/Last-Modified pro statické i HTML, aby se šetřilo při re-crawlování.
  • Správné 4xx/5xx: 410 pro trvalé smazání, 404 pro neexistující; 503 + Retry-After při údržbě, jinak riskujete snížení crawl rate.
  • CDN a edge caching: konzistentní cache politika, ale pozor na varianty podle query parametrů.

Sitemap pro obří weby: segmentace a zdravé signály

  • Index sitemáp a tematická segmentace (produkty, články, lokality, jazykové verze).
  • max 50k URL / 50 MB na jednu sitemapu; rotace a regenerace pouze při změnách.
  • <lastmod> pouze když skutečně došlo k relevantní změně obsahu, ne při cenové mikroaktualizaci.
  • Jen kanonické, indexovatelné URL; žádné noindex, žádné 3xx/4xx/5xx.

JavaScript a renderování: parity a hydratační pasti

  • SSR/SSG pro kritické šablony, aby obsah a odkazy byly již v prvotním HTML.
  • Odkazy v HTML: interní odkazy musí být v DOM bez potřeby interakce; nevažte navigaci pouze na onclick.
  • Lazy content: při lazy načítání zajistěte odkrytí i pro crawler (noscript fallback, prerender pro důležité boxy).
  • Facety a JS: filtrační UI generuje URL s povolenými parametry; nezatahujte crawler do nekonečných kombinací.

Stránkování, archívy a sběr long-tailu

  • Self-canonical na stránkovaných stránkách a silné interní odkazy na obsahové „huby“ místo indexace hlubokých stránek.
  • Alternativa k rel=prev/next: jasné interní odkazy (první / poslední / konkrétní stránka), přehledové landingy s konsolidovaným obsahem.
  • Noindex pro hluboké stránky (>5), pokud nepřinášejí unikátní poptávku, ale ponechte follow pro přenos autority.

Hreflang ve velkém: symetrie a kanonika

  • Symetrické páry: každý jazyk odkazuje na ostatní a sám na sebe (x-default pro globální verzi).
  • Konzistence s canonical: hreflang vždy na kanonické URL odpovídajícího jazyka.
  • Rozdělení sitemáp: hreflang anotace v sitemapách škálují lépe než v HTML při velkých objemech.

Logy serveru: nejpřesnější barometr crawl zdraví

  • Podíl 200 vs. non-200 pro Googlebot/Bingbot – cílem je minimalizovat 5xx a 404.
  • Top waste patterns: regulární výrazy identifikující nejčastější zbytečné path/parametry.
  • Re-crawl frekvence: důležité URL by měly být re-crawlované v horizontu dnů, ne měsíců.

Diagnostika canonical pekla: checklist

  1. Je na stránce self-canonical a cíl vrací 200/indexovatelný stav?
  2. Neexistují řetězce nebo smyčky v kanonikách?
  3. Interní odkazy směřují na stejný tvar URL jako canonical?
  4. Hreflang a canonical ukazují na tu samou verzi v rámci jazyka?
  5. Parametrické a třídící stránky mají noindex, follow a nejsou v sitemapách?
  6. Paginated stránky: self-canonical, nebo záměrné noindex s obsahovou alternativou?

Implementační vzory pro CMS a edge logiku

  • URL normalizer middleware: přepíše velká písmena, odstraní duplicitní lomítka, seřadí parametry, 301 na kanonický host/protokol.
  • Param allowlist: server povolí indexovatelné kombinace, ostatní vrací noindex a omezené interní odkazy.
  • Content API s „indexable“ flagem: šablony renderují meta tagy a canonical dle stavu dokumentu.
  • Sitemap builder: generuje jen 200/indexovatelné/self-canonical URL s reálným lastmod.

Politika produktových a listovacích stránek

  • Detail produktu: jediná kanonická URL; varianty (barva/velikost) jako atributy na stránce nebo povolené fasety, nikoliv jako samostatné indexovatelné URL, pokud nemají vlastní poptávku.
  • Kategorie: default bez parametrů indexovatelný; kombinované fasety pouze ty, které přinášejí poptávku a mají unikátní obsah (H1, úvod, FAQ, interní odkazy).

Škálování validace: automatické testy

  • Test 3xx/4xx/5xx v sitemapách: build fail, pokud se objeví.
  • Canonical-self test: pokud je canonical jiný než self a není v allowlistu, build fail.
  • Hreflang-symetrie: audit při deployi.
  • Parametrické odkazy v HTML: linter zachytí neautorizované parametry v interních odkazech.

Rozhodovací matice: indexovat, noindexovat, disallowovat nebo 301?

Situace Doporučená akce Poznámka
Duplicita path (www/non-www, http/https) 301 + self-canonical Interní odkazy vždy na cílový kanonický host/protokol.
Sort/Order parametry noindex, follow + self-canonical Neuvádět v sitemapách, nepropagovat interními odkazy.
Nežádoucí faseta noindex, follow nebo Disallow Disallow šetří crawl, ale neodstraní z indexu již známé URL.
Trvale smazaný obsah 410 Rychlejší odindexování než 404.
Přesunutý obsah 301 Zachování signálu a odkazové hodnoty.
Dočasně nedostupné 503 + Retry-After Chrání crawl budget během výpadku.

Měření úspěchu: KPI technické indexace

  • Coverage zdraví: poměr Valid (Indexed) vs. Excluded a Error.
  • Share of Crawl to Canonicals: procent