GEO v praxi: Jak jsme v dubnu 2026 optimalizovali Zenitho.ai pro ChatGPT a Perplexity
Za 48 hodin (21.–22. dubna 2026) jsme na vlastním webu zrealizovali kompletní GEO (Generative Engine Optimization): zrychlili First Contentful Paint z 4,3 s na 1,7 s, přidali 17 JSON-LD schema bloků, zaregistrovali web ve čtyřech vyhledávačích, rozšířili robots.txt o AI crawlery a vytvořili llms.txt. Tady je každý krok, co fungovalo, co nás překvapilo, a čísla, která jsme si zkontrolovali.
Zpřesnění rovnou na začátku. Tento článek dokumentuje technický a strukturální základ, který jsme položili za 48 hodin — Core Web Vitals, indexaci, JSON-LD,
robots.txt,llms.txt, IndexNow, middleware. Co ještě neumíme doložit: reálnou frekvenci citací v ChatGPT, Perplexity a Gemini. To měříme v části 2 za 30 dní — AI citace potřebují jiný časový horizont než jednorázový technický sprint. Čtěte tedy tuto první část jako „jak jsme si postavili rampu", ne jako „kolikrát nás AI teď cituje".
Proč tento článek existuje
V dubnu 2026 napsala každá velká česká SEO agentura teoretický průvodce GEO — SEO Consult, MARF, Inpage, SEOkonzult, Symbio, Digichef. Texty jsou dobré, ale skoro všechny končí stejně: „zde je definice, zde je 10 tipů". Co mezi nimi chybí, je konkrétní implementace s daty. Někdo, kdo to zkusil na vlastní kůži a zveřejnil čísla.
Tak jsme se rozhodli, že to uděláme. Za dva dny jsme vzali Zenitho.ai — web, který do té doby prošel jen lehkou SEO hygienou — a protáhli ho celou GEO stack. Tento článek je doslovný deník té práce: co jsme změnili, proč jsme to tak seřadili, co se rozbilo, a jakou hodnotu to má pro vás, pokud chcete totéž na svém webu.
Co je GEO (a proč se liší od klasického SEO)
GEO (Generative Engine Optimization) je optimalizace obsahu a technické vrstvy webu tak, aby váš web citovaly velké jazykové modely — ChatGPT, Perplexity, Google AI Overviews, Gemini, Claude, Microsoft Copilot. Synonyma: AEO (Answer Engine Optimization), LLMO (Large Language Model Optimization), AIO (AI Optimization).
Rozdíl od klasického SEO je v cíli:
- SEO bojuje o pozici na SERPu. Vyhrajete, když jste v první desítce výsledků.
- GEO bojuje o to, abyste byli v odpovědi. Vyhrajete, když AI model převezme informaci z vašeho webu a cituje vás jako zdroj.
Proč to řešit teď: podle dat z konce roku 2025 už přes 40 % dotazů v Google (v USA) končí tzv. „zero-click" — uživatel dostane odpověď v AI Overview a na SERP výsledky nekliká. V ČR je toto číslo nižší, ale trend stejný. Pokud vás AI modely necítují, vaše viditelnost bude v dalších 12 měsících klesat i při stejných klasických SEO pozicích.
Výchozí stav Zenitho.ai (21. dubna 2026, ráno)
Profil webu před zásahem:
- 0 JSON-LD bloků na celém webu
- Žádný soubor
llms.txt robots.txtbez direktiv pro AI crawlerysitemap.xmlbez podstránek/sluzby/*- FCP 4,3 s, LCP „Error" (neměřitelné), Speed Index 8,8 s (PageSpeed mobilní)
- Web neindexovaný v Google Search Console, Bing Webmaster Tools ani Seznam WMT
- Záznam pouze v Google Maps; žádné další katalogy
- Accessibility chyby:
html lang="cz"(neplatný BCP 47 kód), skok v hierarchii nadpisů
Jinými slovy: typický stav webu, kde se o SEO nikdo systematicky nestaral. Dobrá výchozí pozice pro experiment — pokud bychom viděli posun z tohoto stavu, budeme vědět, že intervence fungují.
Strategie: 5 vrstev, v tomto pořadí
Nechtěli jsme dělat náhodné kroky. Rozhodli jsme se jít pěti jasně oddělenými vrstvami, v tomto pořadí:
- Technický základ — Core Web Vitals, čisté URL, správný jazyk
- Klasická indexace — Google, Bing, Seznam
- AI-specifické soubory —
robots.txtdirektivy pro AI boty +llms.txt - Strukturovaná data — JSON-LD schema pro každou stránku
- Externí signály a monitoring — katalogy + detekce crawlerů
Proč tímto pořadím: rychlost a indexace jsou předpoklad. Pokud crawlery timeoutují nebo vás Google vůbec nezná, všechno další je marné. Schema a AI soubory jsou core — bez nich vám AI nepřiřadí strukturu. Katalogy a detekce jsou posilující vrstva — zvyšují signál, ale samy o sobě nestačí.
Implementace, krok za krokem
Krok 0: Technický základ (21. 4. 2026, 16:00–23:43)
Sedm hodin práce, přes 20 commitů. Nejbolestivější vrstva, protože PageSpeed neodpouští.
Před:
| Metrika (mobil) | Před |
|---|---|
| First Contentful Paint | 4,3 s |
| Largest Contentful Paint | Error (NO_LCP) |
| Total Blocking Time | Error (NO_LCP) |
| Speed Index | 8,8 s |
| Cumulative Layout Shift | 0 |
LCP se vůbec nedal změřit. Důvod: animace fade-in na viewport používala opacity: 0, což PageSpeed interpretuje jako „žádný viditelný LCP kandidát". Trik, který to opravil: změna na opacity: 0.01. Z neměřitelného se stalo měřitelné — a to byla jen první z dvaceti podobných optimalizací:
- Inline kritické CSS,
deferGoogle Fonts do po interakci - Self-host Iconify (odstraněno 300 kB externí JS)
- Defer Google Tag Manager do první uživatelské interakce
- Nahrazení eager YouTube embedu click-to-play facade (ušetřeno 7,9 MB render-blocking na
sluzby/web) - WebP varianty všech obrázků portfolia + hero
- Skip 1,5 MB hero videa na mobilu (detekce přes
matchMedia) - Lokalizace paper-texture SVG (místo externího fetch)
Po:
| Metrika (mobil) | Před | Po | Změna |
|---|---|---|---|
| First Contentful Paint | 4,3 s | 1,7 s | −60 % |
| Largest Contentful Paint | Error | 4,2 s | měřitelné |
| Total Blocking Time | Error | 0 ms | v zeleném |
| Speed Index | 8,8 s | 1,8 s | −80 % |
| CLS | 0 | 0,033 | v zeleném |
LCP 4,2 s je stále v červeném — další etapa. Ale tři ze čtyř metrik jsou v zeleném, crawlery už netimeoutují, a Googlebot může projít celý web.
Proč to je důležité pro GEO: AI crawlery přímo neměří rychlost. Ale AI Overviews čerpají z Googlového indexu, který Core Web Vitals váží jako ranking faktor. Pomalý web = nižší pozice v indexu = nižší šance, že vás AI převezme.
Krok 1: Indexace ve vyhledávačích
Podceněná vrstva. Většina GEO průvodců ji přeskočí, přitom je kritická: většina AI modelů (Gemini, AI Overviews, Copilot) čerpá z Googlového nebo Bingového indexu. Pokud v nich nejste, AI vás neuvidí.
Co jsme udělali:
- Clean URLs — přepsali
.htmlpřípony na canonical./portfoliomísto/portfolio.html. Konfigurace ve Vercel rewrites. sitemap.xml— přidány/sluzby/web,/sluzby/kliniky(chyběly)html lang="cs"— opraveno z neplatnéhocz(BCP 47 vyžaduje dvoupísmenný ISO 639-1 kód,czje kód země, ne jazyka)- Canonical + title — vyčištěny across all pages
- Registrace, submit sitemap:
- Google Search Console → submit sitemap, Request indexing pro každou klíčovou stránku
- Bing Webmaster Tools → submit sitemap (Bing se vyplatí i v ČR, kvůli Copilotu)
- Seznam WMT → verifikační soubor nahrán do rootu + meta tag, submit sitemap
Za 24 hodin od Request indexing byly všechny klíčové stránky v Google indexu. Seznam trval 3 dny. Bing 2 dny.
IndexNow — automatizovaný push signál
Manuálně submitovat sitemap v každém WMT po každé změně není udržitelné. Druhý den večer (22. 4., po publikaci tohoto článku) jsme proto přidali IndexNow — otevřený protokol, kde jediný POST na api.indexnow.org je forwardován do Bing, Seznam, Yandex i Naver. Pingnete jednou, všichni zapojení engine to dostanou.
Proč to má smysl pro GEO: běžný crawl Bingbota/SeznamBota objeví novou verzi stránky za dny až týdny. IndexNow je push — říká „podívej se sem znovu, teď". Rychlejší Bing index = rychlejší Copilot, rychlejší Seznam = rychlejší viditelnost v CZ AI-asistentech, které Seznam crawlují.
Implementace: stdlib Python skript (0 závislostí) + GitHub Actions workflow, trigger na každý push do main, který mění HTML nebo sitemap:
on:
push:
branches: [main]
paths: ['**.html', 'sitemap.xml']
workflow_dispatch:
jobs:
ping:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: Wait for Vercel production deploy
run: sleep 90
- name: Ping IndexNow (changed URLs)
run: python3 indexnow.py
Klíčové: sleep 90. Před pingem počkáme, až Vercel rozdeployuje novou verzi na CDN. Kdybychom pingovali okamžitě po mergi, engine by fetchl ještě starou verzi a IndexNow by byl kontraproduktivní. workflow_dispatch navíc umožňuje manuálně pingnout celou sitemap (python3 indexnow.py --all) — typicky po velké revizi nebo nové jazykové mutaci.
Autentizace probíhá přes statický klíč v rootu webu (<key>.txt, obsah = klíč samotný). Engine si jej fetchne, aby ověřil, že doménu vlastníte — standardní ownership proof.
Google IndexNow nepřijímá. Má vlastní Indexing API, ale to je omezené na JobPosting a BroadcastEvent — pro běžné stránky nelze použít. Pro Google proto zůstává klasický submit sitemap + Request indexing v Search Console. Což není problém — Googlebot je tak jako tak nejagresivnější crawler z celé skupiny.
Výsledek: každý merge do main teď automaticky upozorní Bing, Seznam a Yandex. Žádný manuální krok, žádná šance zapomenout — a tento článek, který čtete, byl první URL, kterou workflow v produkci pingnul.
Krok 2: AI-specifické soubory
robots.txt pro AI crawlery
Rozšířili jsme robots.txt o explicitní User-agent direktivy pro hlavní AI crawlery:
GPTBot(OpenAI training)OAI-SearchBot(ChatGPT Search)ChatGPT-User(ChatGPT browsing v odpovědi)PerplexityBotClaudeBot/anthropic-aiGoogle-Extended(Gemini training — oddělený od Googlebot)Applebot-Extended(Apple Intelligence)
Explicitní Allow direktivy AI crawlerům říkají „ano, můžete nás trénovat i citovat". OpenAI a Anthropic veřejně potvrdili, že robots.txt respektují.
llms.txt
llms.txt je neoficiální standard (Mintlify, duben 2025). Cíl: poskytnout LLM modelům strukturovaný textový souhrn webu — jako robots.txt, ale pro obsah. Do našeho jsme dali:
- Krátký přehled firmy (1 odstavec)
- Ceník služeb (24 900 – 64 900 Kč pro web)
- Dvě kontrastní case study s reálnými čísly
- Team bios (4 lidé) s odborností
- Detaily garancí
- Kontakt a datum poslední aktualizace
Důležitý caveat: llms.txt zatím oficiálně nerespektuje žádný velký AI provider. Ne OpenAI, ne Anthropic, ne Google. Perplexity ho prý experimentálně čte, ale nepotvrdili veřejně. Proč to přesto děláme: vydání stojí 15 minut, a když standard dostane trakci, budeme připraveni. Sázka s asymetrickým risk/reward profilem.
Krok 3: Strukturovaná data (17 JSON-LD bloků)
Core GEO práce. Bez schema stroj web čte jako nestrukturovaný text. S JSON-LD („tohle je Organization, tohle je její Service s cenovou nabídkou, tohle je FAQPage s 11 otázkami, tohle jsou Person za firmou") AI rozpoznává entity a vztahy — a ty může citovat.
Co jsme přidali, po stránkách:
| Stránka | Typy schema |
|---|---|
index.html | Organization, WebSite, WebPage, ProfessionalService |
sluzby.html | BreadcrumbList, CollectionPage, ItemList (služby) |
sluzby/web.html | BreadcrumbList, Service, 3× Offer (ceník Starter/Business/Premium) |
sluzby/kliniky.html | BreadcrumbList, Service, FAQPage (11 otázek) |
portfolio.html | BreadcrumbList, CollectionPage, ItemList (6 kasů) |
o-nas.html | BreadcrumbList, AboutPage, 4× Person s knowsAbout |
kontakt.html | BreadcrumbList, ContactPage, ContactPoint, OpeningHoursSpecification |
Celkem 17 bloků, 0 errorů ve validačním Google Rich Results Test. V druhém kole jsme doplnili optional fields: logo, address, image, priceRange (Google je flagnul jako doporučené, ne povinné).
Konkrétní E-E-A-T tip: u AboutPage → Person entries použijte knowsAbout property se seznamem oborových dovedností. To je signál, který Google Knowledge Graph používá pro stanovení autority entity. U nás každá osoba má 3–5 knowsAbout záznamů (např. „konverzní optimalizace", „lead generation B2B", „marketing zdravotnických zařízení").
Krok 4: Edge Middleware pro detekci AI crawlerů
Vercel Web Analytics filtruje boty by design (trekuje lidi přes JS pixel, boty JS nevykonávají). Takže pro monitoring AI crawlerů je nepoužitelný. Řešení: Vercel Edge Middleware, 14 řádků kódu:
export const config = {
matcher: '/((?!assets|api|_vercel).*)'
};
const BOT_RE = /GPTBot|OAI-SearchBot|ChatGPT-User|PerplexityBot|ClaudeBot|anthropic-ai|Google-Extended|Googlebot|Bingbot|SeznamBot|Applebot/i;
export default function middleware(request) {
const ua = request.headers.get('user-agent') || '';
const match = ua.match(BOT_RE);
if (match) {
const path = new URL(request.url).pathname;
console.log(`[bot] ${match[0]} -> ${path}`);
}
}
Middleware běží na každém non-static requestu. Logy vidíte v Vercel Observability → Middleware. Na Hobby plánu jsou agregované (počet invocací, paths, actions), na Pro plánu jsou s textem logů. Za první den jsme viděli 14 middleware invocací — poměr bot/human dohledatelný, ale detailní UA text zůstává za paywallem.
Krok 5: Externí signály (katalogy a platformy)
Entity recognition v AI modelech těží z toho, co o vás říká zbytek internetu. Čím víc nezávislých domén cituje entitu „Zenitho", tím silnější entity signal.
Registrovali jsme:
- firmy.cz — nejdůležitější CZ business katalog. Strukturovaný záznam se službami a kontakty.
- Clutch.co — mezinárodní agenturní adresář. B2B křídlo AI modelů čerpá odtud.
- LinkedIn Company Page — s plnou firemní strukturou, sekcí služeb, team tagged
- Google Business Profile (dříve My Business) — pro lokální signály + Maps
Každá platforma = další authority doména, která potvrzuje „toto je agentura Zenitho, nabízí X, je v Y". AI modely při entity resolution tyto cross-references sbírají.
Výsledky po 48 hodinách
| Oblast | Před (21. 4. ráno) | Po (22. 4. večer) |
|---|---|---|
| FCP (mobil) | 4,3 s | 1,7 s |
| LCP (mobil) | Error (NO_LCP) | 4,2 s |
| Speed Index | 8,8 s | 1,8 s |
| JSON-LD bloky na webu | 0 | 17 |
| Schema errors (Rich Results Test) | — | 0 |
| Indexováno v Google | Ne | Ano (24 h) |
| Indexováno v Bing | Ne | Ano (2 dny) |
| Indexováno v Seznam | Ne | Ano (3 dny) |
AI crawler direktivy v robots.txt | 0 | 8 |
llms.txt | Neexistoval | Vydán, 4,4 kB |
| Registrace v katalozích | 1 (Maps) | 5 |
| Monitoring AI crawlerů | Žádný | Edge Middleware |
Co zatím nemáme změřeno: skutečnou frekvenci citací v ChatGPT/Perplexity/Gemini. To je inherentně těžko měřitelné — nástroje na to (Otterly, Peec AI, AthenaHQ) jsou placené a potřebují 2–4 týdny na trend. Plánujeme reportovat v dalším článku za 30 dní.
Co nás překvapilo
1) Vercel Web Analytics filtruje boty. Mysleli jsme, že zapnutí Analytics nám ukáže AI crawlery. Neukázalo — Analytics trekuje lidi s prohlížečem, boty JS nevykonávají. Řešení: Edge Middleware.
2) llms.txt oficiálně nerespektuje nikdo. OpenAI, Anthropic, Google ho oficiálně neprocházejí. Perplexity prý ano (nepotvrzeno veřejně). Přesto doporučujeme ho udělat — investice minimální, asymetrický upside.
3) JSON-LD sám o sobě nestačí. To je asi nejčastější myšlenková zkratka. Schema stroji řekne strukturu, ale stále čte obsah. Pokud máte schema pro Service a popis služby je šablonovitý („profesionální weby na míru"), AI vás ocituje méně než konkurenta se slabším schema, ale unikátními daty a konkrétními čísly.
4) Český trh zaspává v praxi. Velké CZ agentury napsaly v roce 2026 teoretické průvodce GEO. Ale konkrétní implementaci s čísly nepublikuje skoro nikdo. To je mezera, kterou tento článek zaplňuje — a doufáme, že vás inspiruje ke stejné otevřenosti.
Klíčové poznatky
- Rychlost je předpoklad, ne GEO fíčura. Bez rychlého webu crawlery chybí nebo timeoutují. Ale samotná rychlost vás necituje — obsah ano.
- Indexujte se všude, kde AI čerpá. Google, Bing, Seznam. Bez klasické indexace jste pro 80 % AI systémů neviditelní.
- Schema je must-have, ne stříbrná kulka. 17 JSON-LD bloků samo o sobě AI citace nezvýší. Musíte mít i obsah, který stojí za citaci.
llms.txtje investice do budoucnosti. Dnes ho nikdo oficiálně nerespektuje. Za pár měsíců to může být jinak. 15 minut práce, zanedbatelný risk.- Detekujte crawlery, nedoufejte. Bez vlastních logů nevíte, kdo vás navštěvuje. Edge Middleware za 14 řádků kódu vám dá odpověď.
Checklist: 10 kroků pro malý nebo střední český business
- Prožeňte web přes PageSpeed Insights. Cíl: FCP pod 2 s, LCP pod 2,5 s, CLS pod 0,1.
- Opravte
html lang="cs"(BCP 47) — necz. - Zaveďte clean URLs (bez
.htmlextension). - Zaregistrujte web v Google Search Console. Submit sitemap. Request indexing.
- Zopakujte pro Bing Webmaster Tools a Seznam WMT.
- Doplňte
robots.txtoUser-agent: GPTBot / PerplexityBot / ClaudeBot / Google-ExtendedsAllow: /. - Vytvořte
llms.txtv rootu — stručný textový přehled firmy, cen, lidí, kontaktu. - Přidejte JSON-LD schema: minimálně
Organization,ProfessionalService(spriceRangeaareaServed),FAQPagepokud máte běžné otázky. - Validujte přes Google Rich Results Test a Schema.org Validator. Cíl: 0 errorů.
- Registrujte firmu v firmy.cz, Clutch, LinkedIn Company Page, Google Business Profile.
Pro pokročilé: Edge Middleware pro detekci AI crawlerů (code snippet výše).
Chcete GEO pro svůj web?
Jsme Zenitho — česká agentura, která GEO nejen učí, ale dělá v praxi. Na vlastním webu i pro klienty z oboru soukromých klinik, B2B služeb a lokálních firem.
Poptejte GEO pro svůj webČasto kladené otázky
Musí česká malá firma už teď řešit GEO?
Pokud cílíte na B2B, profesionální služby, nebo zdravotnictví — ano, začněte teď. Podíl uživatelů, kteří v ČR i v roce 2025 začali běžně hledat informace o firmách v ChatGPT a Perplexity, výrazně roste meziročně. U B2C e-commerce je naléhavost menší, ale prvních pět kroků (rychlost, sitemap, JSON-LD, indexace v Googlu, clean URLs) dělejte tak jako tak — vrací se i v klasickém SEO.
Jaký je poměr úsilí mezi klasickým SEO a GEO?
V praxi 80 % práce je „klasické" — rychlost, indexace, kvalita obsahu, schema. Zbývajících 20 % je GEO-specifické: llms.txt, AI crawler direktivy, entity mentions v katalozích. GEO bez solidního klasického SEO nefunguje.
Co kdyby AI systémy llms.txt nikdy nepřijaly?
Investice: ~15 minut. Triviální údržba. I při úplném odmítnutí standardu jste neztratili víc než hodinu práce. Risk prakticky nulový, upside velký — proto doporučujeme.
Kdy uvidíme výsledky?
Klasické SEO (Google ranking): 2–6 týdnů po reindexaci. GEO citace: velmi těžko měřitelné. Doporučujeme vytvořit si tabulku 20 relevantních dotazů (např. „digitální agentura Praha pro kliniky") a jednou měsíčně je testovat v ChatGPT, Perplexity a Gemini. Sledujte, zda se váš web objeví jako citovaný zdroj. Absolutní čísla nenalezte, ale trend po 2–3 měsících uvidíte.
Je nějaký nástroj, který trekuje AI citace?
Ano — Otterly.AI, Peec AI, AthenaHQ. Jsou placené (~50–200 USD/měsíc) a měří, v jakých AI odpovědích se objevuje vaše doména. Pro malou firmu se vyplatí až po 3–6 měsících GEO práce, kdy je co měřit.
Co když na webu nepoužívám Vercel?
Edge Middleware je Vercel-specifická. Ekvivalent na Cloudflare: Workers. Na AWS: Lambda@Edge. Na Netlify: Edge Functions. Koncept je všude stejný — zachytit request, parse User-Agent, logovat bot-matche. Kód bude 14 řádků na každé z těchto platforem.