Proč odmítáme psát AI citace do archivovaných vláken
Většina nástrojů na viditelnost vám napíše redditový komentář do vlákna, které je půl roku jen ke čtení. My klasifikujeme dřív, než něco vygenerujeme. Tady je ten rámec — ne kód.
Petr Vlček
Nástroje na viditelnost v generativních enginech mají jeden lákavý způsob, jak selhat: AI cituje redditové vlákno u dotazu, kde vaše značka chybí, nástroj tu mezeru vidí, nástroj vlákno předhodí LLM a požádá o komentář. Draft vyleze na druhém konci. Uživatel ho vloží. Příspěvek je do 90 sekund smazaný, protože vlákno je půl roku staré a Reddit ho dávno automaticky archivoval.
Tohle není okrajový případ. Na reprezentativním produkčním datasetu (jeden platící zákazník, několik týdnů citací napříč ChatGPT, Perplexity a Google AI Mode) jsme zjistili, že zhruba každá pátá citovaná URL je nedosažitelná pro jakýkoli komentář, pitch nebo PR — archivovaný Reddit, uzamčený Hacker News, zaniklé domény, Twitter a YouTube jen pro přihlášené, plus hrstka webů s kanonickými znalostmi, které prostě nemají místo, kam se dá komentovat.
Psát draft do kteréhokoli z těchhle je selhání důvěry v celou kategorii nástrojů: nástroj si účtuje za draft, který neobstojí.
Správnou odpovědí není „drafty většinou fungují, se zbytkem si nějak poraďte“. Správnou odpovědí je klasifikátor, který běží před jakýmkoli voláním LLM a odmítne utratit token za uzavřené místo. Tento článek je rámec za tímhle klasifikátorem — designová rozhodnutí, kompromisy a příběhy z ladění bugů. Ne kód; kód je ta snadná část, jakmile výše v pipeline uděláte správná rozhodnutí.
Rámec publikujeme, protože kompromisy jsou zajímavější než implementace a protože každý nástroj na viditelnost, který jsme proauditovali, pořád posílá drafty do uzavřených míst. Tenhle výchozí stav kategorie si zaslouží změnu.
Methodology & sources
Editorial review for factual claims (as of 2026-05-02).
- Všechna čísla pocházejí z jednoho produkčního datasetu. Statistiky zobecňujte jako vzory, ne jako benchmarky pro jakýkoli jiný nástroj.
- Tento článek popisuje konceptuální rámec. Záměrně to není návod na stavbu. Konkrétní prahy, seznamy hostnamů a detekční regexy žijí v naší codebase a tady je nereprodukujeme — jsou výsledkem empirické práce, která se bez zopakování té práce nezobecňuje.
- „Stavy“ píšeme
Live,Limited,Frozen,Manual, aby seděly na odznaky v UI dashboardu.
Tvar problému
- Jediné binární „akceschopné / neakceschopné“ míjí ty nejužitečnější stavy. Potřebujeme čtyři.
- Stavy musí být odvozené z už extrahovaných signálů — další round-tripy zabíjejí ROI.
- Strategie náhrady pro uzavřená místa je samostatná tabulka pravidel, ne součást klasifikátoru.
Proč se to vyplatí
- Zhruba každá pátá citovaná URL skončí ve stavu uzavřeného místa na typickém datasetu tarifu Pro. Ty LLM úplně přeskočí.
- Větší úspora nejsou peníze; je to důvěra v UI. Draft, který nemůžete použít, učí uživatele, že nástroj je nespolehlivý.
Jak tohle zapadá do širší disciplíny GEO
Pokud si teprve ladíte definice, začněte s naším primerem Co je GEO?. Akční vrstva popsaná tady je chybějící polovina každého nástroje na viditelnost, který jsme proauditovali — tu mezeru jsme zmapovali v 22 nástrojů na AI viditelnost, od 25 do 699 dolarů měsíčně. Pro širší obraz napříč enginy (jak ChatGPT, Perplexity, Google AI Mode a další povrchují citace jinak) si přečtěte AI viditelnost není jeden kanál. A oznámení Googlu ze 6. května 2026, které dostalo redditová vlákna přímo do AI Mode, rozebíráme v Reddit je teď uvnitř Google AI Mode — relevantní, protože polovina draftovatelných citací, kterých se náš klasifikátor dotýká, žije na Redditu.
Čtyři stavy (a proč tři nestačily)
První verze téhle myšlenky měla tři stavy: Ready, Limited, Frozen. Vydali jsme to a týden to běželo. Okamžitě vyplavaly dva vzorce:
- Odpovědi na Twitteru / X a komentáře na YouTube pořád padaly do
Limited, protože místo bylo technicky otevřené. Uživatel klikl na akční kartu, dostal zprávu „tady draft napsat nemůžeme, ale běžte odpovědět ručně“ a položil tu samozřejmou otázku: proč tohle není jiný stav než „starý listicle, nízký výnos“? - Staré listicles a staré podcastové feedy pořád padaly do
Frozen, pokud jsme byli přísní na zastaralost, nebo doLimited, pokud jsme nebyli. Ani jedno nesedělo. Autor 14 měsíců starého listiclu může odpovědět na pitch na pokračování — to není slepá ulička. Komentář na YouTube, který za uživatele nemůžeme zveřejnit, slepá ulička JE pro naši automatizaci, i když je políčko na komentář otevřené.
Třetí stav sléval dva opravdu odlišné problémy:
- Místo je degradované (starý článek, vlákno s nízkou návštěvností, komentáře u zpráv zavřené, ale autor dosažitelný). Akce je pořád možná, někdy užitečná, jen s nižším výnosem.
- Místo vyžaduje přihlášenou identitu, kterou nemůžeme řídit (Twitter, YouTube). Akce je možná pro uživatele, nemožná pro nás k automatizaci.
Rozdělili jsme je. Model se čtyřmi stavy:
| Stav | Význam | Co generujeme |
|---|---|---|
Live | Otevřené místo + čerstvé | Kompletní draft na vyžádání |
Limited | Otevřené, ale degradované | Draft se žlutým varováním |
Frozen | Žádné místo (uzamčené / archivované / zaniklé / informační reference) | Žádný draft. Karta se strategií náhrady. |
Manual | Otevřené místo, vyžaduje přihlášení | Žádný draft. Odkaz na předání s nápovědou. |
Oddělení Manual od Limited udělalo UX poctivé. Limited redditové vlákno uživateli řekne „odpovězte do 48 h, míň očí to uvidí“. Manual twitterový zdroj mu řekne „otevřete to, tady draft napsat neumíme, tady je, jak vypadá dobrý tón“. Různé akce, různý text, různá očekávání výsledku.
Tohle je ten rámec. Zbytek článku jsou kompromisy, které jsme udělali, když jsme ho ladili na reálné typy zdrojů.
Co klasifikátor skutečně konzumuje
Klasifikátor je jediná čistá funkce. Jejími vstupy jsou signály, které už extrahoval předchozí krok v pipeline — výsledek fetche, parsovaná metadata, hostname, data, typ zdroje. Jejím výstupem je stav plus jednořádkový důvod v prosté češtině, který dashboard ukáže v tooltipu:
type ActionabilityStatus = 'ready' | 'limited' | 'frozen' | 'out_of_scope'
interface ClassifyArgs {
// Already-extracted signals; the classifier never fetches.
sourceType: CitationSourceType
hostname: string
fetchOk: boolean
fetchStatus: number | null
publishedAt: string | null
// Per-platform parsed flags, when available.
redditFlags?: { archived: boolean; locked: boolean; removed: boolean }
}
interface ActionabilityResult {
status: ActionabilityStatus
reason: string | null
}
Signatura za nás dělá marketing: uvnitř žádný fetch, žádné LLM, žádné vzdálené volání. Čistá data dovnitř, strukturované rozhodnutí ven. Funkce je malá, vyčerpávajícím způsobem otestovaná unit testy a regrese je změna jednoho testu plus jednoho řádku.
Co článek neobsahuje — a co tu reprodukovat nebudeme — jsou konkrétní prahy, blocklisty hostů, regex vzory, interakce mezi JSON příznaky specifickými pro jednotlivé platformy a pořadí, ve kterém pravidla spouštějí. To je ta část, která zabrala čas. Inženýrské týmy, které chtějí vydat něco podobného, na tom budou líp, když si to napíšou od nuly proti svému vlastnímu datasetu; kopírovat ten náš by zreplikovalo naše bugy a minulo empirické úpravy, které jsme za měsíce provozu udělali.
Kategorie rozhodnutí, která klasifikátor musí činit
Co dokážeme užitečně popsat, je tvar rozhodovacího prostoru. Existuje šest kategorií vstupu, které klasifikátor skládá do čtyř výstupních stavů. Každá kategorie je svůj vlastní malý logický problém.
Tvrdé HTTP signály
Některé HTTP statusy jsou jednoznačné a měly by zkratovat rozhodnutí ještě před jakoukoli logikou specifickou pro platformu. Stránka, která už neexistuje, není degradované místo; je to jiný problém a těží z jiné strategie náhrady („AI enginy přeindexovávají každých pár týdnů; tahle citace vyprchá sama od sebe“). Jiné 4xx statusy jsou nejednoznačnější, protože stránka se může v reálném prohlížeči načíst v pořádku, i když je náš crawler zablokovaný — ty se naklánějí spíš k Limited než Frozen, aby si to uživatel mohl ručně ověřit.
Strukturované příznaky specifické pro platformu
U malého počtu platforem zdroj sám publikuje svou akceschopnost. Veřejná metadata Redditu vystavují příznaky pro stavy archivováno, uzamčeno a odstraněno. Hacker News dokumentuje ve svém FAQ okno automatického zamčení. Repozitáře GitHubu vystavují přes API boolean archived. Když takové příznaky existují, jsou autoritativní — hádat akceschopnost z věku, když vám platforma říká, že je vlákno zavřené, je inženýrská neplecha.
Neintuitivní ponaučení tady bylo, že platformy publikují víc signálů pro tentýž výsledek a měli byste je ORovat, ne jeden vybrat. Reddit hlásí odstraněný obsah v několika různých polích podle toho, který aktér ho odstranil (moderátor, auto-moderátor, původní autor, automoderator z pravidla subredditu). Brát kterékoli jedno jako kanonické znamená, že vám většina odstranění unikne. Brát kterékoli z nich jako pravdu vám dá čistý signál.
Blocklisty hostnamů pro weby s kanonickými znalostmi
Malá sada hostnamů je AI enginy citovaná proto, že obsah je kanonický, ne proto, že vydavatel přijímá příspěvky. Wikipedia, MDN, IETF datatracker, editoři RFC, W3C a pár podobných webů sem patří. Není tam políčko na komentář; není tam cesta pro redakční pitch; některé mají explicitní politiky střetu zájmů, které dělají z editace ze strany značky reputační zátěž. Tyhle klasifikujeme jako Frozen a strategii náhrady směrujeme na „postavte kanonický zdroj na vlastní doméně“.
Seznam je krátký, ručně kurátorovaný a roste pomalu. Odmítli jsme návrhy rozšířit ho o heuristiky založené na pravidlech („jakýkoli web, jehož hostname začíná na docs.“). Cena jednoho falešně pozitivního — říct zákazníkovi, že jeho značka nemůže pitchovat reálného vydavatele — je mnohem vyšší než cena toho, že nám pár webů unikne a propadnou do výchozího stavu.
Degradace na základě věku
U typů zdrojů, kde zastaralost snižuje výnos, aniž by místo zavírala (staré listicles, novinové články po okně na komentáře, podcastové feedy bez nedávné epizody), aplikujeme prahy věku specifické pro platformu. Prahy vzešly z empirického pozorování, ne z jediného průzkumu, a byly dvakrát upraveny podle dat od zákazníků. Přesná čísla v tomhle článku nejsou, protože nejsou tím ponaučením — mít různá okna pro různé typy zdrojů je to ponaučení, a napoprvé jsme to pokazili třikrát, než nám došlo, že zprávy, podcasty a listicles mají opravdu různou trvanlivost.
Co funguje, je publikovat pravidlo a práh interně, aby si to zákazníci, kteří nesouhlasí, mohli přečíst a říct nám proč. Co nefunguje, je brát zastaralost jako jediný globální útes.
Místa mimo rozsah
Twitter / X a YouTube jsou otevřená místa, která vyžadují přihlášenou identitu, jakou naše automatizace nemá. Napsat text, který nemůžeme odeslat, učí uživatele, že výstupy jsou nespolehlivé; místo toho povrchujeme URL a krátkou nápovědu k tónu a směrujeme uživatele, ať to udělá ručně. Tohle je ten případ, který si vysloužil čtvrtý stav.
Výchozí akceschopné
Cokoli, co se nezhoduje s výše uvedeným, defaultuje na Live. Generická fórová vlákna, repozitáře GitHubu, jejichž příznak archived jsme nekontrolovali, typy zdrojů, které jsme ještě nespecializovali. Výchozí stav musí být benevolentní — cena falešného Frozen (žádný draft pro otevřené místo) je produkt zabíjející, zatímco cena falešného Live (draft, který je slušně odmítnut) je napravitelná.
Okrajové případy, které nás kously
Samotný klasifikátor je malý. Rozjezdová dráha, která k němu vede, ne. Tři z bugů, které jsme v produkci zaplatili:
Platforma hlásila tentýž výsledek přes několik různých polí
První verze naší detekce odstranění na Redditu používala jediné pole. Minuli jsme zhruba třetinu odstraněných vláken, protože platforma plní různá pole podle toho, který aktér obsah odstranil. Oprava byla číst čtyři signály a ORovat je — a přidat regresní test pro každý ze čtyř případů, aby příští refaktor nemohl jeden tiše rozbít.
Ponaučení se zobecňuje: když platforma vystavuje strukturovaná metadata, nevybírejte to nejhezčeji vypadající pole. Podívejte se na každé pole, které by mohlo indikovat stav, na kterém vám záleží, a kterékoli z nich berte jako pravdu.
Citované PDF rozbilo naši pipeline pro insert do databáze
Jako citace vyplavalo PDF. Náš enricher ho fetchnul, dekódoval bajty jako UTF-8 s benevolentním ošetřením chyb a výsledný textový úryvek obsahoval null byte — které Postgres sloupce text odmítají, s chybovou hláškou, která nezmiňuje PDF, null byte ani pole, které selhalo. Insert tiše selhal proti naší retry smyčce obohacování a zdroj zůstal dva týdny neklasifikovaný, zatímco jsme příčinu honili napříč chybovými reporty.
Opravou je deterministický sanitizér na hranici persistence: strippovat řídicí znaky, které databáze odmítají, v každém textovém poli, před insertem. Klasifikátor sám nikdy nevyprodukuje nepřátelské bajty, ale dědí záruku sanitizace výše v pipeline — a test, který tu záruku ověřuje.
Bot wall vrátila 200 OK s validním HTML
Jedna z platforem, které crawlujeme, servíruje malou HTML stránku ze své anti-bot infrastruktury, když fetch server-na-server trefí region nebo fingerprint, kterému nedůvěřuje. Stránka je dobře formované HTML, vrací HTTP 200, má reálný element <title>. Náš klasifikátor neměl žádné pravidlo pro „200 OK s tělem bot wall“, takže stránka byla brána jako úspěšný fetch, spustil se extraktor titulku a hrstka řádků zdroje skončila v produkci s titulkem stránky bot wall jako titulkem článku. Drafty vygenerované pro tyhle zdroje citovaly vlákno, které LLM nikdy nečetlo.
Opravou je detektor s obranou do hloubky na vrstvě fetche, který rozpozná běžné vzory interstitial stránek a sníží výsledek fetche na not ok. Klasifikátor vidí selhání fetche a vrátí správný stav. Kde je to možné, používáme strukturovanou API cestu platformy, ale detektor bot wall je záchranná síť pro hosty, kteří nově začnou servírovat výzvy.
Vzorec napříč všemi třemi: klasifikátor nebyl ten bug. Bug byl výše v pipeline. Úkolem klasifikátoru je odmítnout operovat na vstupech, kterým nemůže věřit, a vyjádřit to odmítnutí jako strukturovaný stav, který zbytek pipeline umí přečíst.
Co záměrně zatím neřešíme
Tři kategorie, kterých se klasifikátor ve v1 nedotýká, s inženýrským zdůvodněním:
Příznaky archived přes API pro platformy repozitářů. GitHub vystavuje boolean archived. Volat API na každou citovanou URL repozitáře při každém běhu cronu neospravedlňuje míra, jakou v našem datasetu repozitáře přecházejí do archivu. Roadmapa: přidat, až podíl překročí smysluplný práh.
Detekce paywallu na novinových článcích. Kompozit zhruba šesti heuristik by nám mohl dát signál paywall vs. otevřené. Dnes to přeskakujeme a spoléháme na to, že člověk čtoucí draft si všimne, že je zdroj za paywallem, ještě než osloví. Přijímáme určitou míru falešně akceschopných výměnou za to, že neudržujeme křehký detektor.
Fórová API specifická pro platformu. Některé fórové platformy vystavují veřejné API; většina ne. Mohli bychom speciálně ošetřit ty, co ho mají, a získat pár procent. Dokud se fórová vlákna nestanou smysluplným podílem citační plochy, nestojí to za náklady na údržbu.
Vzorec napříč těmito: pravidlo stojí za vydání, když se vyplatí u aspoň 1 % citovaných URL v produkci. Specifičnost je levná; režie z málokdy spouštěného pravidla je trvalá.
Dopad na náklady
Model, který používáme pro akční drafty, je v nejlevnějším tarifu — zlomky centu za draft. Levné, ale levné vynásobené každou citovanou URL není zadarmo. Na hypotetickém běhu s tisícem URL je pětina těch URL, které se k modelu nikdy nedostanou, malá úspora v dolarech.
Reálná úspora má tvar produktu. Pětina plochy UI není vygenerovaný draft, který musí uživatel vyhodnotit, nezvládne použít a ztratí kvůli tomu důvěru. Nejlevnější akční draft je ten, který nevygenerujete.
Co to otevírá
Výstup klasifikátoru je dost strukturovaný na to, aby ho zbytek produktu četl bez analýzy případů. Generátor doporučení se u uzavřených stavů předčasně ukončí ještě před jakýmkoli voláním LLM. Dashboard vykresluje čtyři stavy jako čtyřbarevné odznaky přímo ze sloupce. Modul strategie náhrady — samostatná tabulka pravidel — vezme řádek zdroje a vyprodukuje URL na jedno kliknutí tam, kde to jde.
Celá architektura je měsíce stabilní bez přepisů. Očekáváme, že tohle bude ta část produktu, kterou vydáváme nejčastěji, aniž bychom měnili jakékoli UI — pokaždé, když zákazník nahlásí špatně zařazený zdroj, oprava je jeden nový test plus změna jednoho řádku pravidla.
Pokud stavíte nástroje na viditelnost, doporučujeme napsat si vlastní verzi proti vlastnímu datasetu. Kategorie bugů, která vzniká přeskočením téhle vrstvy (psaní do archivovaných vláken, generování komentářů odvozených z PDF, braní kanonických referencí jako míst na komentáře), je dost velká na to, aby se ten pravidlový engine vyplatil, i kdybyste pravidla nikdy nepublikovali.
Závěr
Klasifikátor je ta nudná část. Běží v milisekundách, na signálech už extrahovaných předchozím krokem v pipeline, a odmítá utratit token za uzavřené místo. Je to zároveň ta část produktu, o které čekáme, že bude stárnout nejlíp — architektura je měsíce stabilní a pravidla specifická pro platformy rostou pomalu.
Pokud vyhodnocujete nástroje na AI viditelnost, otázka, která kategorii odděluje, není „kolik enginů sledujete“ — skoro každý sleduje stejných pět. Otázka zní „co váš nástroj udělá, když AI cituje zdroj, se kterým nemůžete nic udělat?“. Většina nástrojů na to nemá odpověď. My ano.
Sources and official documentation
- Hacker News — FAQ on auto-locked threads: news.ycombinator.com/newsfaq.html
- Wikipedia — Conflict-of-interest editing policy: en.wikipedia.org/wiki/Wikipedia:Conflict_of_interest
- Reddit — Help: archived posts: support.reddithelp.com/hc/articles/360038586312
- PostgreSQL docs — Character data types and null bytes: postgresql.org/docs/current/datatype-character.html
Chcete vědět, jak vás AI popisuje?
Udělám vám ruční audit viditelnosti v ChatGPT, Perplexity a Google AI Mode.
Domluvit 15minutový hovorDalší články
- Tohle není SaaS předplatné. Je to pracovní vztah.Většina nástrojů na AI viditelnost stojí 200 $/měs a na živého člověka se nikdy nedostanete. U GEO Tracker AI dostane každý platící zákazník přímo zakladatele — výsledky prověřené ručně, plán postavený s vámi, ne s chatbotem.
- 8 GEO mýtů, které Google právě vyvrátil — co data v roce 2026 skutečně ukazujíKvětnový průvodce Googlu o AI optimalizaci (2026) vyvrátil 8 GEO taktik. Každou jsme porovnali s daty od Ahrefs, Tinuiti, 5W Research, OtterlyAI a Muck Rack — tady je, co doopravdy zvyšuje citace v AI.
- 22 nástrojů na AI viditelnost, od 25 do 699 dolarů měsíčně. Ani jeden vám neřekne, co udělat dál.Prošli jsme 22 nástrojů na GEO a AI viditelnost — Profound, Peec, Otterly, AthenaHQ, Ahrefs Brand Radar, HubSpot AEO a další. Každý z nich vám ukáže čísla. Ani jeden nenapíše komentář na Reddit, pitch novináři nebo e-mail, který byste reálně poslali. Uvnitř: kompletní srovnávací matice, 12 doslovných citací uživatelů z Redditu a návrh akční vrstvy, kterou zatím nikdo nepostavil.