Většina webů, které pro AI vyhledávače „neexistují", má jeden společný technický problém: obsah se vykresluje až v prohlížeči pomocí JavaScriptu. AI crawlery jako GPTBot (ChatGPT), ClaudeBot nebo PerplexityBot stáhnou jen syrové HTML — JavaScript nespustí. Pokud váš web pošle do prohlížeče prázdnou kostru a obsah doplní skript až potom, AI uvidí prázdnou stránku. Tady je, jak to za pět minut zjistíte a co s tím udělat.
Proč AI crawlery nespouští JavaScript?
AI crawler je program, který stáhne zdrojový kód stránky a předá ho jazykovému modelu jako text. Na rozdíl od prohlížeče nerenderuje DOM — nestáhne JS bundle, nespustí ho, nepočká na dokreslení. Vezme to, co dorazí v prvním HTTP požadavku, a tím to končí.
Důvod je čistě ekonomický. Vyrenderovat jednu stránku přes headless prohlížeč stojí násobně víc paměti, CPU i času než stáhnout statické HTML. Při miliardách stránek měsíčně je rozdíl mezi „přečíst HTML" a „spustit celý prohlížeč" rozdíl mezi udržitelnou a neufinancovatelnou infrastrukturou. Proto GPTBot, ClaudeBot, PerplexityBot i OAI-SearchBot defaultně JavaScript ignorují.
Jedna výjimka stojí za zmínku: Googlebot JavaScript renderuje (ve dvou vlnách — nejdřív HTML, později render). A protože Google AI Overviews čerpá z Googlova indexu, SPA web se v AI Overviews nakonec objevit může — se zpožděním dní až týdnů. Jenže ChatGPT a Perplexity mají vlastní crawlery, které renderování nedělají. Sázet svou AI viditelnost na to, že někdo váš JavaScript spustí, je proto risk, který se nevyplácí.
Jak zjistím, jestli můj web AI vidí?
Nemusíte hádat. AI vidí přesně to, co vidí příkaz curl — syrové HTML před spuštěním skriptů. Tři rychlé testy, každý do minuty:
- Test přes
curl. Stáhněte stránku z příkazové řádky a zkuste v ní najít konkrétní větu, kterou na webu vidíte. - View source (Ctrl+U) vs. Inspect. „Zobrazit zdroj stránky" ukáže původní HTML; „Prozkoumat prvek" ukáže DOM po doběhnutí JS. Pokud se zásadně liší, váš obsah vzniká až skriptem.
- Vypněte JavaScript. V DevTools (Cmd/Ctrl+Shift+P → „Disable JavaScript") a načtěte stránku znovu. To, co zůstane, je přesně to, co uvidí AI.
Test přes curl vypadá takhle:
$ curl -s https://vasweb.cz | grep "Vaše hlavní nadpis nebo služba"
# Když se text vypíše → AI ho vidí. Dobře.
# Když curl nevrátí nic → obsah je až v JS. AI vidí prázdno.
Druhý varovný signál najdete přímo ve zdroji stránky. Pokud View source ukáže skoro prázdné tělo s jediným <div id="root"></div> (nebo id="app") a balíkem <script> tagů, máte čistý client-side rendering — celý web se skládá až v prohlížeči a AI z něj nepřečte ani řádek.
Které weby mají problém? (SPA, React, Vue)
Typický viník je SPA — single-page application: web, který server pošle jako prázdnou skořápku a JavaScript do ní teprve vykreslí obsah. Klasicky vzniká, když se React, Vue nebo Angular nasadí v defaultním „client-side" režimu — Create React App, Vue CLI, starší Angular setupy. Server odešle pár kilobajtů kostry, zbytek dělá prohlížeč.
Pozor ale: problém nedělá framework, ale režim renderování. React i Vue umí běžet server-side a vyrobit plné HTML. Stejně tak je jedno, jak je web napsaný, pokud doplňuje obsah dodatečně přes fetch — texty natahované AJAXem po načtení, „nekonečný scroll", recenze či ceník dotažený až po kliknutí. Všechno tohle AI mine, protože k tomu interakčnímu kroku nikdy nedojde.
Mimo SPA narazíte i na obsah schovaný za JavaScriptem z jiných důvodů: text odhalený až po zavření cookie lišty, popisy v „přečíst více" akordeonech, které se do DOM vkládají skriptem, nebo produkty natahované z externího API. Pokud to není v prvním HTML, pro AI to neexistuje.
Jak web zviditelnit? SSR, prerendering a statické HTML
Cíl je jediný: obsah musí být v HTML dřív, než se spustí jakýkoli skript. Vedou k němu tři cesty, od nejrobustnější po záplatu.
- Statické HTML / SSG (static site generation). Stránky se vygenerují předem do hotového HTML — Astro, Hugo, Eleventy, Next.js v export módu nebo prosté ručně psané HTML. Pro AI ideál: žádné čekání, žádný render, všechno je hned čitelné. Tahle stránka, kterou právě čtete, je statické HTML.
- SSR (server-side rendering). Server vyrenderuje plné HTML při každém požadavku a teprve v prohlížeči ho JS „oživí" (hydratace). Next.js, Nuxt, SvelteKit, Remix. Crawler dostane kompletní obsah, uživatel pak interaktivitu.
- Prerendering pro boty. Když nemůžete přepsat existující SPA, middleware typu Prerender.io detekuje crawlera a podstrčí mu předrenderovaný statický snapshot. Funguje, ale je to záplata navíc k údržbě — ne náhrada za pořádnou architekturu.
Praktické pravidlo, které dávám klientům: otevřete si View source a najděte v něm svůj hlavní nadpis, popis služby a kontakt. Když tam jsou jako text, máte vyhráno. Když ne, žádné množství JSON-LD nebo llms.txt vám nepomůže — AI nemá z čeho citovat.
Webflow, WordPress a Framer — jak jsou na tom?
Dobrá zpráva pro většinu malých firem: mainstreamové no-code platformy renderují server-side a pro AI fungují. „Bez kódu" automaticky neznamená „neviditelný".
- Webflow publikuje hotové statické HTML. Obsah je ve zdroji stránky, AI ho čte bez problému.
- WordPress renderuje HTML na serveru přes PHP — defaultně v pořádku. Riziko vzniká jen u headless WordPressu s JS frontendem nebo u page builderů, které část obsahu skládají až v prohlížeči. Ověřte si to
curltestem. - Framer dnes generuje crawlovatelné HTML (SSR/SSG) pro textový obsah. Těžké interaktivní komponenty mohou být JS-only, ale klíčový obsah stránky se renderuje server-side.
Riziková zóna není „builder vs. kód", ale „server-side vs. client-side". Nejčastěji na to narazím u custom Reactových frontendů postavených bez SSR a u starších webových aplikací, kde se prezentační web slepil ze stejné SPA jako přihlašovací část. Když je obsah jen v JS, neuvidí ho ani Googlebot v rozumném čase, natož ChatGPT.
Checklist: udělejte web viditelný pro AI
Šest kroků od diagnózy po opravu. Začněte zhora — první tři jsou na pět minut a řeknou vám, jestli vůbec máte problém.
- View source. Otevřete „Zobrazit zdroj stránky" a vyhledejte (Ctrl+F) hlavní nadpis a popis služby. Jsou tam jako text?
curltest.curl -s https://vasweb.cz | grep "klíčový text". Prázdný výstup = obsah je až v JS.- Vypněte JavaScript v prohlížeči a načtěte stránku. To, co zbyde, je AI verze vašeho webu.
- Pokud máte SPA, naplánujte přechod na SSR nebo SSG. U existujícího webu, který nejde hned přepsat, nasaďte dočasně prerendering pro boty.
- Ověřte „first paint" obsahu. Nadpisy, texty, kontakt a strukturovaná data musí být v prvním HTML, ne dotažené přes
fetch. - Re-test a recrawl. Po nasazení zopakujte
curltest, v Google Search Console požádejte o nové projití a počítejte s 2–4 týdny, než se to v AI projeví. Jak to změřit, rozebírám v článku jak měřit, jestli vás ChatGPT a Perplexity citují.
A nezapomeňte na robots.txt — i dokonale renderovaný web musí AI crawlery pustit dovnitř. K tomu se hodí explicitní allowlist, který popisuju v článku o llms.txt.
Co dál číst
Tenhle článek řeší jednu konkrétní technickou bariéru. Širší kontext a měření najdete tady: