ACC-03
Hlavní obsah vyžaduje JavaScript
Co kontrola měří
Každou vzorkovanou stránku stahujeme dvakrát. Poprvé jako obyčejný HTTP požadavek, ze kterého se text vytáhne přímo z doručeného HTML, přesně tak, jak ho vidí robot, který nespouští JavaScript. Podruhé ve skutečném prohlížeči (Playwright), který skripty vykoná a nechá stránku doběhnout. Pak se porovná počet slov obou verzí.
Nález vznikne, když je rozdíl větší než 40 % slov vykreslené verze. Práh není naše odhadnutá hodnota schovaná v kódu: je v config/ pod rule_ jako cheerio_ a pochází ze zadání produktu. Vzorec je |slova po JS − slova bez JS| / slova po JS.
Co kontrola nedělá:
- Neběží na všech stránkách. Prohlížečem se vzorkuje jen část webu. Je to nejdražší krok celého auditu. Stránky mimo vzorek se neposuzují vůbec, takže absence nálezu neznamená, že je web v pořádku celý.
- Neříká, co přesně chybí. Měří jen objem textu, ne jeho obsah. Stránka, které chybí 39 % textu, nález nedostane, i když v těch 39 % byla celá cena produktu.
- Nepozná opačný případ. Když JavaScript naopak text odebírá (cookie lišta ve statickém HTML, kterou skript nahradí obsahem), rozdíl vyjde stejně velký; kontrola počítá absolutní hodnotu, ne směr.
- Neměří rychlost ani chyby skriptů. Stránka, která se v prohlížeči vykreslí správně, ale za osm vteřin, je pro
ACC-03v pořádku. - Nehodnotí, jestli je stránka „důležitá“. Nález na stránce se zásadami ochrany osobních údajů má stejnou váhu jako na produktu.
Nález je na úrovni stránky, takže se v reportu objeví jednou za každou zasaženou stránku, seskupený pod jedním kódem. Závažnost je kritická.
Jak silný důkaz za tím stojí
Existuje měření s popsanou metodikou, které efekt skutečně naměřilo. Není to záruka výsledku, ale je to víc než odborný odhad.
Za touhle kontrolou stojí měření, ne domněnka. Vercel analyzoval logy na okraji sítě pro tři weby s odlišnými frameworky (mimo jiné nextjs.org) a sledoval, co skutečně dělají AI crawleři, když stránku stáhnou.
Výsledek: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Bytespider ani Meta-.js si stáhnou, ale nevyhodnotí je. Co není v doručeném HTML, pro ně neexistuje.
Dvě výjimky, které je fér uvést: Gemini a Applebot renderují. Kdo cílí výhradně na ně, má situaci jinou. Většina ostatních ne.
A jedno přiznání k síle důkazu: je to jediný nezávislý zdroj s popsanou metodikou, který se nám podařilo dohledat. Druhý jsme nenašli. Data jsou z prosince 2024, takže od té doby se chování mohlo změnit. Nikdo z provozovatelů to ale nedeklaruje ani jedním směrem. Proto třída „doložený efekt“, ne „nutná podmínka“: měření existuje a je věrohodné, ale nestojí za ním vlastní dokumentace provozovatele tak jako u ACC-01 nebo ACC-07.
Praktický důsledek je přitom tvrdý: pokud se váš hlavní obsah generuje až v prohlížeči, není to otázka horšího pořadí. Ten obsah prostě není k dispozici modelu, který na váš web přišel.
Jak to opravit
Nejdřív si ověřte, co robot doopravdy dostane. Nepotřebujete k tomu nástroj, stačí příkazová řádka a porovnání s tím, co vidíte v prohlížeči:
curl -s https://vase-domena/stranka | wc -wKdyž vyjde pár desítek slov a stránka jich přitom v prohlížeči má tisíce, máte odpověď. Ve zdrojovém kódu stránky (Ctrl+U, ne inspektor; ten ukazuje stav PO vykonání skriptů) pak uvidíte, jestli tam text je, nebo jen prázdný <div id="root">.
Oprava má tři úrovně podle toho, kolik práce si můžete dovolit:
- Statické generování (SSG): obsah, který se nemění při každém načtení (články, dokumentace, popisy produktů), vygenerujte při buildu do HTML. Nejlevnější na provoz a robot dostane všechno.
- Renderování na serveru (SSR): stránky, které závisí na požadavku, vykreslete na serveru a pošlete hotové HTML. V Next.js, Nuxtu i SvelteKitu je to výchozí režim; problém obvykle vzniká až tím, že se komponenta označí jako klientská.
- Částečné řešení: když plošná změna nepřipadá v úvahu, aplikujte SSR alespoň na stránky s obsahovou hodnotou. Landing page bez SSR vás nestojí nic, prázdná stránka produktu ano.
Tři chyby, na které se v praxi naráží:
- „Máme SSR“ ještě neznamená, že SSR má i tahle stránka. V moderních frameworcích se režim volí per komponenta a jedna klientská komponenta obalující obsah stačí, aby z HTML zmizel.
- Obsah načítaný až po interakci (rozbalovací sekce, „načíst více“, karty s taby) v HTML být musí, i když je vizuálně skrytý. Skrýt ho CSS je v pořádku, dogenerovat ho skriptem ne.
- Prerendering pro roboty podle User-Agenta je slepá ulička. Servírovat robotům jinou verzi než lidem je riskantní a řeší to jen ty roboty, které pojmenujete. Vyřešte rendering pro všechny, ne pro seznam.
Co o tom říká report
Popis nálezu
Text získaný staticky (Cheerio render) se od textu po vykonání JavaScriptu (Playwright render) liší o více než 40 % slov. Hlavní obsah stránky se tedy generuje až v prohlížeči a AI crawleři, kteří JavaScript nevykonávají (většina z nich ne), ho nevidí.
Doporučení
Zajistěte server-side rendering (SSR) nebo statické generování hlavního obsahu (např. Next.js SSR/SSG místo čistě klientského renderu), aby byl text přítomný přímo v HTML odpovědi. Pokud SSR není možné plošně, aplikujte ho alespoň na stránky s obsahovou hodnotou (články, produkty), ne jen na landing page.
Zdroje
- Vercel: The rise of the AI crawler (analýza edge logů) (ověřeno 2026-08-19)
- Google Search Central: AI features and your website (ověřeno 2026-08-19)
Text ověřen 2026-09-12