[{"data":1,"prerenderedAt":875},["ShallowReactive",2],{"blog-generative-engine-optimization-audit-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":23,"sources":30,"cover":55,"og":56,"expertise":57,"locales":58,"lang":60,"title":62,"description":63,"coverAlt":64,"metaTitle":65,"takeaways":66,"faq":72,"toc":88,"blocks":116,"others":671},"generative-engine-optimization-audit","2026-09-28",12,"web",[9,10,11,12],"GEO","AI search","Structured data","nginx",[14,15,16,17,18,19,20,21,22],"generative engine optimization","GEO audit","GEO checklist","AI search optimization","AI Overviews optimization","ChatGPT search citations","llms.txt describedby","AI crawler logs nginx","Bing AI Performance report",[24,27],{"name":25,"url":26},"Generative engine optimization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGenerative_engine_optimization",{"name":28,"url":29},"Search engine optimization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSearch_engine_optimization",[31,34,37,40,43,46,49,52],{"title":32,"url":33},"Aggarwal et al.: GEO: Generative Engine Optimization (KDD 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.09735",{"title":35,"url":36},"Martinez: Optimizing Visibility in Generative Engines, a critical survey of GEO 2023–2026 (July 2026)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2607.14035",{"title":38,"url":39},"Tian et al.: Diagnosing and Repairing Citation Failures in Generative Engine Optimization (March 2026)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.09296",{"title":41,"url":42},"Google Search Central: AI features and your website","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fai-features",{"title":44,"url":45},"Google Search Central: Build and submit a sitemap","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fsitemaps\u002Fbuild-sitemap",{"title":47,"url":48},"OpenAI: Overview of OpenAI crawlers","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fbots",{"title":50,"url":51},"Bing Webmaster Blog: Introducing AI Performance in Bing Webmaster Tools (10 February 2026)","https:\u002F\u002Fblogs.bing.com\u002Fwebmaster\u002FFebruary-2026\u002FIntroducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview",{"title":53,"url":54},"llmstxt.org: Changes from v1 to v2","https:\u002F\u002Fllmstxt.org\u002Fchanges.html","\u002Fimages\u002Fblog\u002Fgenerative-engine-optimization-audit\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgenerative-engine-optimization-audit\u002Fog.jpg","ai-engineer",[59,60,61],"en","de","hu","Generative Engine Optimization in der Praxis: ein vollständiges GEO-Audit meiner eigenen Site","Was Generative Engine Optimization ist, was die Forschung wirklich stützt, und das GEO-Audit dieser Site: 12 Prüfungen, 7 Fixes, samt Code.","Eine fünfstufige Pipeline von Crawlen über Indexieren, Abrufen und Zitieren bis Messen, die zeigt, wo eine Seite aus einer KI-Antwort herausfallen kann.","Generative Engine Optimization Audit · Balázs Csorba",[67,68,69,70,71],"Generative Engine Optimization (GEO) heißt, Seiten so zu gestalten, dass KI-Antwortmaschinen sie leicht abrufen, zitieren und als Quelle nennen; der Begriff stammt aus einem Paper von Aggarwal et al. aus 2023, vorgestellt auf der KDD 2024.","In diesem Paper steigerten Zitate, Statistiken und genannte Quellen die Sichtbarkeit einer Seite in generierten Antworten um bis zu 40 %, während Keyword-Stuffing schlechter abschnitt als gar keine Optimierung.","Eine Übersichtsarbeit über 45 GEO-Studien vom Juli 2026 fand, dass diese Gewinne nur für Seiten gelten, die bereits abgerufen werden; keine Technik zeigte einen stabilen Effekt darauf, überhaupt gefunden zu werden.","Laut Google brauchen AI Overviews und AI Mode keine speziellen Dateien oder Schemas: Eine Seite muss indexiert sein und als Snippet erscheinen dürfen, die SEO-Grundlagen sind also die Eintrittskarte.","Mein Audit der 105 Seiten dieser Site lief über 12 Prüfungen und brachte 7 Fixes, vor allem Discovery-Links, ehrliche Datumsangaben und eine Möglichkeit, KI-Crawler-Traffic zu sehen; der Code dazu steht unten.",[73,76,79,82,85],{"q":74,"a":75},"Was ist Generative Engine Optimization (GEO)?","Generative Engine Optimization ist die Praxis, Inhalte so zu gestalten, dass KI-Antwortmaschinen wie Google AI Overviews und AI Mode, die ChatGPT-Suche, Perplexity und Copilot sie leicht abrufen, zitieren und als Quelle nennen. Der Begriff stammt aus einem Paper von Aggarwal et al., zuerst im November 2023 veröffentlicht und auf der KDD 2024 vorgestellt. Es zeigte, dass Zitate, Statistiken und genannte Quellen die Sichtbarkeit einer Seite in generierten Antworten um bis zu 40 % steigern können.",{"q":77,"a":78},"Ist GEO etwas anderes als SEO?","Es baut auf SEO auf, statt es zu ersetzen. SEO zielt auf eine hohe Position in einer Liste von Links; GEO zielt darauf, eine der wenigen Quellen zu sein, aus denen eine Antwort gebaut wird, die Einheit ist also die zitierfähige Passage statt der Seite. Für die KI-Funktionen von Google gelten dieselben Eintrittsbedingungen wie für die Suche: Die Seite muss indexiert sein und als Snippet erscheinen dürfen.",{"q":80,"a":81},"Hilft llms.txt bei Generative Engine Optimization?","Nicht als Ranking-Signal. Google sagt, dass für AI Overviews und AI Mode keine KI-Textdateien oder spezielles Markup nötig sind, und Log-Studien zeigen, dass die meisten llms.txt-Dateien nie abgerufen werden. llms.txt und Markdown-Kopien helfen Agenten, die Seiten direkt abrufen, und das ist ein eigenes Publikum; auf einer statischen Site kosten sie wenig.",{"q":83,"a":84},"Welche inhaltlichen Änderungen bringen mehr KI-Zitate?","Am besten belegt sind konkrete, überprüfbare Aussagen: Statistiken, Zitate und Links auf glaubwürdige Quellen, in einem Text, der klar zur gestellten Frage passt. Keyword-Stuffing schnitt in der Originalstudie schlechter ab als gar keine Optimierung. Eine Übersichtsarbeit über 45 Studien aus 2026 warnt, dass diese Gewinne für bereits abgerufene Seiten gelten und generische Umschreibregeln schlecht übertragbar sind, also miss auf deinen eigenen Seiten.",{"q":86,"a":87},"Wie messe ich GEO-Ergebnisse?","Kombiniere drei Quellen. Der AI-Performance-Bericht in den Bing Webmaster Tools zeigt Zitate in Copilot und in den KI-Antworten von Bing pro Seite, samt den Grounding-Queries dahinter. Server-Logs zeigen, welche Seiten KI-Crawler abrufen. Referral-Traffic von chatgpt.com, perplexity.ai und ähnlichen Sites taucht in der Analyse auf. Generierte Antworten schwanken zwischen Durchläufen, also wiederhole dieselben Prompts über die Zeit, statt einer einzelnen Antwort zu trauen.",[89,92,95,98,101,104,107,110,113],{"id":90,"title":91},"what-is-geo","Was ist Generative Engine Optimization?",{"id":93,"title":94},"what-the-research-shows","Was zeigt die Forschung wirklich?",{"id":96,"title":97},"what-platforms-say","Was sagen Google, OpenAI und Microsoft?",{"id":99,"title":100},"audit-method","Wie ich das Audit durchgeführt habe",{"id":102,"title":103},"audit-findings","Was hat das Audit gefunden?",{"id":105,"title":106},"fixes","Die Fixes, Schritt für Schritt",{"id":108,"title":109},"what-i-did-not-do","Was ich bewusst nicht gemacht habe",{"id":111,"title":112},"checklist","Checkliste für ein GEO-Audit",{"id":114,"title":115},"sources","Quellen",[117,130,133,136,143,152,189,192,193,200,224,231,238,245,246,249,294,303,304,315,327,329,332,333,440,443,444,448,462,464,486,488,491,497,515,518,528,530,533,536,538,541,543,546,547,574,575,628,644,645],{"type":118,"content":119},"paragraph",[120,124,125,129],{"tag":121,"children":122},"strong",[123],"Generative Engine Optimization (GEO)"," ist die Praxis, Inhalte so zu gestalten, dass KI-Antwortmaschinen wie Google AI Overviews und AI Mode, die ChatGPT-Suche, Perplexity und Copilot sie leicht finden, abrufen, zitieren und als Quelle nennen. Wo SEO auf eine Position in einer Liste von Links optimiert, optimiert GEO darauf, eine der wenigen Quellen zu sein, aus denen eine Antwort gebaut wird. Der Begriff stammt aus einem ",{"tag":126,"href":33,"children":127},"a",[128],"Forschungspaper von 2023",", das auf der KDD 2024 vorgestellt wurde.",{"type":118,"content":131},[132],"Dieser Beitrag hat zwei Hälften: was die Belege stützen, und das ist weniger, als die meisten GEO-Ratgeber behaupten, und ein vollständiges GEO-Audit dieser Site, eines statischen Nuxt-Builds mit 105 Seiten in drei Sprachen. Das Audit lief über 12 Prüfungen und brachte 7 Fixes; der Code zu jedem steht unten, und die Checkliste am Ende ist die, die ich auf jeder Site laufen lassen würde.",{"type":134,"level":135,"id":90,"text":91},"heading",2,{"type":118,"content":137},[138,139,142],"Eine generative Suchmaschine sortiert keine zehn Links. Sie entscheidet, ob eine Frage überhaupt eine Websuche braucht, schickt eine oder mehrere Anfragen los (Google nennt das ",{"tag":121,"children":140},[141],"Query Fan-out","), holt Kandidatenseiten aus einem Index, wählt Passagen für den Kontext des Modells aus, schreibt die Antwort und nennt einige ihrer Quellen. An jedem dieser Schritte kann eine Seite herausfallen, und jeder Schritt hat andere Hebel.",{"type":144,"attrs":145,"inner":149,"caption":150},"diagram",{"viewBox":146,"role":147,"aria-labelledby":148},"0 0 720 320","img","geo1-t geo1-d","\u003Ctitle id=\"geo1-t\">Wo eine Seite aus einer KI-Antwort herausfallen kann\u003C\u002Ftitle>\u003Cdesc id=\"geo1-d\">Fünf Schritte von links nach rechts: Crawlen, Indexieren, Abrufen, Zitieren, Messen. Unter jedem Schritt steht, was ein Site-Betreiber steuert: robots.txt und KI-User-Agents beim Crawlen; Indexierbarkeit und Snippet-Berechtigung beim Indexieren; Text zum Thema und eine Markdown-Kopie beim Abrufen; Fakten, Quellen und klare Aussagen beim Zitieren; KI-Zitatberichte und Agent-Logs beim Messen. Der typische Fehler je Schritt: blockiert, kein Snippet, nicht relevant, vager Text, unsichtbar. Klassisches SEO deckt Crawlen bis Abrufen ab, GEO reicht vom Abrufen bis zum Messen.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">Vom Crawlen zum Zitat\u003C\u002Ftext>\u003Crect x=\"20\" y=\"44\" width=\"120\" height=\"60\" rx=\"8\" class=\"d-sky\" \u002F>\u003Ctext x=\"80\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">Crawlen\u003C\u002Ftext>\u003Cpath d=\"M142 74H154\" class=\"d-line\" \u002F>\u003Cpath d=\"M154 70L159 74L154 78Z\" class=\"d-head\" \u002F>\u003Ctext x=\"80\" y=\"160\" text-anchor=\"middle\" class=\"d-small\">robots.txt\u003C\u002Ftext>\u003Ctext x=\"80\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">KI-User-Agents\u003C\u002Ftext>\u003Ctext x=\"80\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">blockiert\u003C\u002Ftext>\u003Crect x=\"160\" y=\"44\" width=\"120\" height=\"60\" rx=\"8\" class=\"d-sky\" \u002F>\u003Ctext x=\"220\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">Indexieren\u003C\u002Ftext>\u003Cpath d=\"M282 74H294\" class=\"d-line\" \u002F>\u003Cpath d=\"M294 70L299 74L294 78Z\" class=\"d-head\" \u002F>\u003Ctext x=\"220\" y=\"160\" text-anchor=\"middle\" class=\"d-small\">indexierbar\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">max-snippet\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">kein Snippet\u003C\u002Ftext>\u003Crect x=\"300\" y=\"44\" width=\"120\" height=\"60\" rx=\"8\" class=\"d-sky\" \u002F>\u003Ctext x=\"360\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">Abrufen\u003C\u002Ftext>\u003Cpath d=\"M422 74H434\" class=\"d-line\" \u002F>\u003Cpath d=\"M434 70L439 74L434 78Z\" class=\"d-head\" \u002F>\u003Ctext x=\"360\" y=\"160\" text-anchor=\"middle\" class=\"d-small\">Text zum Thema\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">Markdown-Kopie\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">nicht relevant\u003C\u002Ftext>\u003Crect x=\"440\" y=\"44\" width=\"120\" height=\"60\" rx=\"8\" class=\"d-accent\" \u002F>\u003Ctext x=\"500\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">Zitieren\u003C\u002Ftext>\u003Cpath d=\"M562 74H574\" class=\"d-line\" \u002F>\u003Cpath d=\"M574 70L579 74L574 78Z\" class=\"d-head\" \u002F>\u003Ctext x=\"500\" y=\"160\" text-anchor=\"middle\" class=\"d-small\">Fakten, Quellen\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">klare Aussagen\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">vager Text\u003C\u002Ftext>\u003Crect x=\"580\" y=\"44\" width=\"120\" height=\"60\" rx=\"8\" class=\"d-mint\" \u002F>\u003Ctext x=\"640\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">Messen\u003C\u002Ftext>\u003Ctext x=\"640\" y=\"160\" text-anchor=\"middle\" class=\"d-small\">KI-Zitate\u003C\u002Ftext>\u003Ctext x=\"640\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">Agent-Logs\u003C\u002Ftext>\u003Ctext x=\"640\" y=\"262\" text-anchor=\"middle\" class=\"d-small\">unsichtbar\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"134\" class=\"d-label\">WAS DU STEUERST\u003C\u002Ftext>\u003Cpath d=\"M20 206H700\" class=\"d-line d-dash\" \u002F>\u003Ctext x=\"20\" y=\"236\" class=\"d-label\">TYPISCHER FEHLER\u003C\u002Ftext>\u003Cpath d=\"M20 284H420\" class=\"d-line-accent\" \u002F>\u003Ctext x=\"220\" y=\"306\" text-anchor=\"middle\" class=\"d-label\">SEO\u003C\u002Ftext>\u003Cpath d=\"M300 292H700\" class=\"d-line-accent d-dash\" \u002F>\u003Ctext x=\"560\" y=\"306\" text-anchor=\"middle\" class=\"d-label\">GEO\u003C\u002Ftext>",[151],"Fünf Stellen, an denen eine Seite aus einer KI-generierten Antwort herausfallen kann. Unter jedem Schritt: was ein Site-Betreiber steuert, und der typische Fehler. Klassisches SEO deckt Crawlen, Indexieren und Abrufen ab; GEO ergänzt, was passiert, sobald eine Seite abgerufen ist: ob sie zitiert wird und ob man das sehen kann.",{"type":153,"head":154,"rows":160},"table",[155,157,159],[156],"",[158],"SEO",[9],[161,168,175,182],[162,164,166],[163],"Ziel",[165],"Eine hohe Position in einer Liste von Links",[167],"Eine der wenigen Quellen sein, aus denen eine Antwort gebaut wird",[169,171,173],[170],"Einheit",[172],"Die Seite",[174],"Die Passage oder Tatsache, die zitiert wird",[176,178,180],[177],"Erfolgsmaß",[179],"Position, Klicks",[181],"Zitate, Erwähnungen, Referral-Besuche",[183,185,187],[184],"Gemessen mit",[186],"Search Console, Analytics",[188],"Bing AI Performance, Server-Logs, wiederholte Prompts",{"type":118,"content":190},[191],"GEO ersetzt SEO nicht. Für die KI-Funktionen von Google setzt es darauf auf: Eine Seite, die nicht indexiert ist, kann nicht zitiert werden.",{"type":134,"level":135,"id":93,"text":94},{"type":118,"content":194},[195,196,199],"Das Gründungspaper ist ",{"tag":126,"href":33,"children":197},[198],"GEO: Generative Engine Optimization"," von Pranjal Aggarwal und Kollegen aus Princeton und weiteren Instituten, zuerst im November 2023 veröffentlicht und für die KDD 2024 angenommen. Sie bauten GEO-bench, einen Benchmark aus 10.000 Anfragen, schrieben Quellseiten mit neun verschiedenen Methoden um und maßen, wie sichtbar jede Quelle in der generierten Antwort wurde.",{"type":201,"ordered":202,"items":203},"list",false,[204,209,214,219],[205,208],{"tag":121,"children":206},[207],"Zitate, Statistiken und genannte Quellen wirken."," Die besten Methoden lagen beim positionsgewichteten Wortanteil 41 % und bei einem subjektiven Eindruckswert 28 % über der nicht optimierten Basis; die Schlagzeilenzahl lautet „bis zu 40 %“.",[210,213],{"tag":121,"children":211},[212],"Keyword-Stuffing wirkt nicht."," Mehr Suchbegriffe einzubauen, der klassische SEO-Griff, lag unter der Basis.",[215,218],{"tag":121,"children":216},[217],"Schlechter platzierte Seiten gewinnen am meisten."," Quellenangaben steigerten die Sichtbarkeit von Seiten auf Platz fünf der Suchergebnisse um 115,1 %, während Seiten auf Platz eins im Schnitt 30,3 % verloren.",[220,223],{"tag":121,"children":221},[222],"Es trug auch auf einer echten Maschine."," Auf Perplexity.ai steigerten dieselben Methoden die Sichtbarkeit um bis zu 37 %.",{"type":118,"content":225},[226,227,230],"Dann kamen die Einschränkungen. Olivier Martinez argumentiert in seiner ",{"tag":126,"href":36,"children":228},[229],"kritischen Übersicht über 45 GEO-Studien"," (Juli 2026), dass GEO keine einzelne Ranking-Aufgabe ist, sondern eine verrauschte Pipeline, und dass die Gewinne des Gründungspapers in dessen Versuchsaufbau gelten, aber voraussetzen, dass eine Quelle bereits in einem festen Kontext liegt. In den untersuchten Arbeiten waren thematische Relevanz und die Position im Kontext die am besten reproduzierbaren Hebel. Generische Umschreibheuristiken ließen sich schlecht übertragen, auf Zitate zielende Umschreibungen konnten sogar das Abrufen verschlechtern, und keine Technik zeigte einen stabilen, langfristigen, plattformübergreifenden Effekt darauf, überhaupt gefunden zu werden.",{"type":118,"content":232},[233,234,237],"Ein ",{"tag":126,"href":39,"children":235},[236],"Paper von Tian und Kollegen vom März 2026"," zeigt von der anderen Seite in dieselbe Richtung. Statt auf jede Seite dieselbe Umschreibung anzuwenden, diagnostiziert ihr System AgentGEO, warum ein bestimmtes Dokument nicht zitiert wird, und repariert genau das. Es steigerte die Zitierrate relativ um über 40 %, bei rund 5 % geändertem Inhalt, und die Autoren fanden, dass generische Optimierung Long-Tail-Inhalten schaden kann.",{"type":239,"variant":240,"title":241,"body":242},"callout","note","Wie ich die Belege lese",[243],[244],"Zwei Dinge sind gut belegt. Erstens muss eine Seite abrufbar sein: crawlbar, indexiert, für Snippets zugelassen und klar beim Thema. Zweitens wird konkreter, überprüfbarer Text mit Quellen häufiger verwendet als vager, sobald die Seite abgerufen ist. Alles darüber hinaus ist eine Hypothese, bis du es auf deinen eigenen Seiten misst.",{"type":134,"level":135,"id":96,"text":97},{"type":118,"content":247},[248],"Die Dokumentation der Plattformen selbst ist kurz und stimmig.",{"type":201,"ordered":202,"items":250},[251,276,285],[252,255,256,259,260,264,265,264,268,271,272,275],{"tag":121,"children":253},[254],"Google"," sagt, es gibt ",{"tag":126,"href":42,"children":257},[258],"keine zusätzlichen Anforderungen"," für AI Overviews oder AI Mode: Eine Seite muss indexiert sein und mit Snippet angezeigt werden dürfen. Du brauchst keine neuen maschinenlesbaren Dateien, keine KI-Textdateien und kein spezielles schema.org-Markup; strukturierte Daten müssen zum sichtbaren Text passen; und ",{"tag":261,"children":262},"code",[263],"nosnippet",", ",{"tag":261,"children":266},[267],"data-nosnippet",{"tag":261,"children":269},[270],"max-snippet"," und ",{"tag":261,"children":273},[274],"noindex"," steuern, was gezeigt wird. Beide Funktionen können Query Fan-out nutzen, und ihr Traffic zählt in der Search Console zum Suchtyp „Web“.",[277,280,281,284],{"tag":121,"children":278},[279],"OpenAI"," nutzt ",{"tag":126,"href":48,"children":282},[283],"OAI-SearchBot"," für die ChatGPT-Suche und GPTBot fürs Training, und beide Einstellungen sind unabhängig. Sites, die OAI-SearchBot sperren, erscheinen nicht in Antworten der ChatGPT-Suche, abgesehen von Navigationslinks, und eine Änderung an der robots.txt braucht rund 24 Stunden.",[286,289,290,293],{"tag":121,"children":287},[288],"Microsoft"," hat am 10. Februar 2026 ",{"tag":126,"href":51,"children":291},[292],"AI Performance"," als Public Preview in die Bing Webmaster Tools eingebaut. Der Bericht zeigt die Zitate in Copilot und in den KI-Antworten von Bing, die durchschnittliche Zahl zitierter Seiten, die Grounding-Queries, mit denen die KI Inhalte abgerufen hat, und Zitate pro URL.",{"type":118,"content":295},[296,297,302],"Bemerkenswert ist, was Google weglässt: llms.txt und Markdown-Kopien braucht man nicht, um in seinen KI-Funktionen zu erscheinen. Sie bedienen Agenten, die Seiten direkt abrufen, und das ist ein anderes Publikum; mein Beitrag zu ",{"tag":298,"to":299,"children":300},"link","\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation",[301],"llms.txt versus Markdown Content Negotiation"," hat die Log-Daten dazu. Auf einer statischen Site kosten sie wenig, also behalte ich sie, zähle sie aber nicht als Ranking-Hebel.",{"type":134,"level":135,"id":99,"text":100},{"type":118,"content":305},[306,307,310,311,314],"Ich habe das Audit auf dem Produktions-Build laufen lassen, nicht auf dem Quellcode: ",{"tag":261,"children":308},[309],"nuxt generate"," schreibt 105 statische HTML-Seiten (35 Seiten auf Englisch, Deutsch und Ungarisch), und ein Post-Build-Schritt schreibt eine Markdown-Kopie jeder Seite plus ",{"tag":261,"children":312},[313],"\u002Fllms.txt",". Zwei kleine Node-Skripte gingen dann durch die Ausgabe.",{"type":201,"ordered":202,"items":316},[317,322],[318,321],{"tag":121,"children":319},[320],"Technisches Audit"," über jede generierte HTML-Datei: Titel und Beschreibung, Canonical und hreflang, Robots-Direktiven, Markdown- und llms.txt-Links, der JSON-LD-Graph (Knotentypen und Datumsangaben), ein h1 pro Seite und ob die Markdown-Kopie existiert.",[323,326],{"tag":121,"children":324},[325],"Inhaltliches Audit"," über die 24 englischen Beiträge in der Blog-Datenbank: Definiert der erste Satz das Thema, wie viele Quellen und Inline-Zitate, wie viele Zahlen, gibt es Key Takeaways und ein FAQ, und wie viele h2-Überschriften sind Fragen.",{"type":261,"code":328},"\u002F\u002F GEO audit over the generated site (excerpt): one pass over every HTML file\nfor (const file of htmlFiles) {\n  const html = readFileSync(file, 'utf8')\n  if (!\u002Ftype=\"text\\\u002Fmarkdown\"\u002F.test(html)) add('no rel=alternate text\u002Fmarkdown', page)\n  if (!\u002Frel=\"describedby\"\u002F.test(html)) add('no rel=describedby llms.txt', page)\n  const robots = html.match(\u002F\u003Cmeta name=\"robots\" content=\"([^\"]*)\"\u002F)?.[1] ?? ''\n  if (!robots.includes('max-snippet')) add('robots without max-snippet', page)\n  for (const node of jsonLdGraph(html))\n    if (\u002FWebPage|CollectionPage|ProfilePage\u002F.test(node['@type']) && !node.dateModified) add('page node without a date', page)\n}",{"type":118,"content":330},[331],"Die Prüfungen folgen der Pipeline im Diagramm: Zugang, Auffindbarkeit, Verständnis, Inhalt und Messung. Die Ergebnisse unten stehen in derselben Reihenfolge.",{"type":134,"level":135,"id":102,"text":103},{"type":153,"head":334,"rows":341},[335,337,339],[336],"Prüfung",[338],"Vorher",[340],"Nachher",[342,349,359,365,376,390,396,403,410,420,427,433],[343,345,347],[344],"KI-Crawler erlaubt",[346],"Bestanden: robots.txt erlaubt allen den Zugriff und nennt 16 KI-User-Agents; TDMRep erlaubt Text- und Data-Mining",[348],"Unverändert",[350,352,354],[351],"Snippet-Berechtigung",[353],"Indexierbar, aber 33 von 105 Seiten setzten keine max-snippet-Direktive",[355,358],{"tag":261,"children":356},[357],"max-snippet:-1"," auf jeder indexierbaren Seite",[360,362,364],[361],"Markdown-Kopie pro Seite",[363],"Bestanden: 105 von 105",[348],[366,372,374],[367,368,371],"Markdown-Discovery (",{"tag":261,"children":369},[370],"rel=\"alternate\"",")",[373],"21 von 105 Seiten; kein Blogbeitrag und keine Expertise-Seite hatte ihn",[375],"Jede Seite, plus ein HTTP-Link-Header",[377,382,388],[378,379,371],"llms.txt-Discovery (",{"tag":261,"children":380},[381],"rel=\"describedby\"",[383,384,387],"0 von 105; llms.txt war als ",{"tag":261,"children":385},[386],"rel=\"alternate\" type=\"text\u002Fplain\""," verlinkt",[389],"Jede Seite, plus der Link-Header",[391,393,395],[392],"Entitätsgraph (JSON-LD)",[394],"Bestanden: Person, WebSite, WebPage und BreadcrumbList auf jeder Seite; BlogPosting, FAQPage, Zitate und speakable bei Beiträgen",[348],[397,399,401],[398],"Datum an Seitenknoten",[400],"0 von 105 WebPage-Knoten hatten ein Datum",[402],"Beiträge und der Blog-Index tragen datePublished und dateModified",[404,406,408],[405],"Sitemap-lastmod",[407],"Jede statische Seite mit dem Build-Datum gestempelt",[409],"lastmod nur dort, wo es ein echtes Datum gibt",[411,413,415],[412],"Zitierfähige Zusammenfassung",[414],"Key Takeaways als speakable markiert, aber nicht im Schema",[416,419],{"tag":261,"children":417},[418],"abstract"," aus den Takeaways",[421,423,425],[422],"Antwort zuerst",[424],"21 von 24 Beiträgen beginnen mit einer Definition; 3 sind Erfahrungsberichte in der Ich-Form",[426],"So belassen",[428,429,431],[115],[430],"Median von 6 Quellen pro Beitrag; 3 Beiträge nennen weniger als 4",[432],"Für die nächste Überarbeitung notiert",[434,436,438],[435],"Sichtbarkeit von KI-Crawlern",[437],"Keine: Analytics lädt erst nach Einwilligung, und Crawler führen kein JavaScript aus",[439],"Ein eigenes nginx-Log für KI-Agenten, mit dem Accept-Header",{"type":118,"content":441},[442],"Das Audit markierte außerdem rund 30 Seitentitel und Beschreibungen, die länger sind, als Suchergebnisse anzeigen. Das ist Snippet-Hygiene, kein GEO, und das hebe ich mir für einen eigenen Durchgang auf. Die inhaltliche Seite hielt, weil die Beiträge von Anfang an nach einer Vorlage mit Takeaways, FAQ und Quellenliste geschrieben wurden; die Lücken lagen fast alle in der Technik.",{"type":134,"level":135,"id":105,"text":106},{"type":134,"level":445,"id":446,"text":447},3,"markdown-discovery","Jede Seite verlinkt ihre Markdown-Kopie und llms.txt",{"type":118,"content":449},[450,451,454,455,458,459,461],"Version 2 von llms.txt beantwortet die Frage, wie ein Agent die Markdown-Version einer Seite findet, mit ",{"tag":126,"href":54,"children":452},[453],"zwei Standard-Link-Relationen",": ",{"tag":261,"children":456},[457],"rel=\"alternate\" type=\"text\u002Fmarkdown\""," für die Markdown-Kopie und ",{"tag":261,"children":460},[381]," für die llms.txt, die die Seite abdeckt, entweder als HTML-Link-Elemente oder als HTTP-Link-Header. Die Site hatte ein Plugin für die erste Relation, beschränkt auf sieben Seiten der obersten Ebene. Jetzt deckt es jede Seite mit Kopie ab, Fehlerseiten ausgenommen:",{"type":261,"code":463},"\u002F\u002F app\u002Fplugins\u002Fagent-links.ts (excerpt)\nconst PAGE = \u002F^(\\\u002F(about|references|game|accessibility|privacy|imprint|blog)|\\\u002F(blog|expertise)\\\u002F[a-z0-9-]+)?$\u002F\n\nif (!m || error.value || !PAGE.test(page)) return {}\nreturn {\n  link: [\n    { key: 'markdown', rel: 'alternate', type: 'text\u002Fmarkdown', href: page ? `${prefix}${page}.md` : `${prefix}\u002Findex.md` },\n    { key: 'llms-txt', rel: 'describedby', href: '\u002Fllms.txt', title: 'llms.txt' },\n  ],\n}",{"type":118,"content":465},[466,467,470,471,474,475,478,479,481,482,485],"Dasselbe Paar geht auch als HTTP-Header raus, damit ein Client, der nur einen HEAD-Request schickt, es ebenfalls sieht. Ein nginx-Detail brauchte einen zweiten Blick: ",{"tag":261,"children":468},[469],"try_files"," ändert ",{"tag":261,"children":472},[473],"$uri"," auf ",{"tag":261,"children":476},[477],"\u002Fabout\u002Findex.html",", bevor die Header geschrieben werden, also liefert eine Map auf ",{"tag":261,"children":480},[473]," für die meisten Seiten nichts. Eine Map auf ",{"tag":261,"children":483},[484],"$request_uri"," umgeht das:",{"type":261,"code":487},"# Keyed on $request_uri: try_files changes $uri to \u002Fpage\u002Findex.html before the headers go out\nmap $request_uri $bc_agent_links {\n  default                                  \"\";\n  \"~^\u002F(\\?.*)?$\"                            '\u003C\u002Findex.md>; rel=\"alternate\"; type=\"text\u002Fmarkdown\", \u003C\u002Fllms.txt>; rel=\"describedby\"';\n  \"~^(?\u003Cp>\u002F[a-z0-9\u002F-]*[a-z0-9])(\\?.*)?$\"   '\u003C$p.md>; rel=\"alternate\"; type=\"text\u002Fmarkdown\", \u003C\u002Fllms.txt>; rel=\"describedby\"';\n}\n\nlocation \u002F {\n  add_header Link $bc_agent_links;   # an empty value sends no header\n  # ...\n}",{"type":134,"level":445,"id":489,"text":490},"snippets-and-dates","Snippet-Direktiven und ehrliche Datumsangaben",{"type":118,"content":492},[493,494,496],"Google verwendet eine Seite in AI Overviews nur, wenn es ein Snippet zeigen darf. Snippets sind standardmäßig erlaubt, also ändert ",{"tag":261,"children":495},[357]," im Prinzip nichts, aber es macht die Absicht auf jeder Seite explizit und entspricht dem, was die Blogbeiträge schon gesendet haben.",{"type":118,"content":498},[499,500,503,504,507,508,271,511,514],"Die Datumsangaben waren die interessantere Lücke. Die Sitemap gab jeder statischen Seite das Datum des Builds, und das ist ein falsches Aktualitätssignal: Google verwendet ",{"tag":261,"children":501},[502],"lastmod"," nach eigener Aussage nur, wenn der Wert ",{"tag":126,"href":45,"children":505},[506],"durchgängig und überprüfbar korrekt"," ist. Statische Seiten haben jetzt gar kein lastmod mehr, und nur die Beiträge und der Blog-Index, die echte Datumsangaben haben, tragen ",{"tag":261,"children":509},[510],"datePublished",{"tag":261,"children":512},[513],"dateModified"," in ihren strukturierten Daten. Kein Datum ist besser als ein falsches.",{"type":134,"level":445,"id":516,"text":517},"quotable-summary","Eine zitierfähige Zusammenfassung in den strukturierten Daten",{"type":118,"content":519},[520,521,524,525,527],"Jeder Beitrag beginnt mit fünf Key Takeaways, geschrieben als Sätze, die für sich stehen. Sie waren schon als speakable markiert, und die Quellen des Beitrags standen schon als ",{"tag":261,"children":522},[523],"citation"," im Schema. Jetzt gehen die Takeaways auch in das ",{"tag":261,"children":526},[418]," des BlogPosting, damit ein System, das das JSON-LD liest, die Zusammenfassung bekommt, ohne die Seite zu parsen:",{"type":261,"code":529},"{\n  \"@type\": \"BlogPosting\",\n  \"headline\": \"Generative engine optimization in practice: …\",\n  \"abstract\": \"Generative engine optimization (GEO) means … (the five key takeaways)\",\n  \"datePublished\": \"2026-09-28\",\n  \"dateModified\": \"2026-09-28\",\n  \"citation\": [{ \"@type\": \"CreativeWork\", \"name\": \"GEO: Generative Engine Optimization\", \"url\": \"https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.09735\" }],\n  \"speakable\": { \"@type\": \"SpeakableSpecification\", \"cssSelector\": [\"#takeaways\"] }\n}",{"type":134,"level":445,"id":531,"text":532},"measuring-ai-crawlers","Messen, was KI-Crawler abrufen",{"type":118,"content":534},[535],"Was du nicht siehst, kannst du nicht verbessern, und diese Site konnte KI-Crawler überhaupt nicht sehen: Google Analytics lädt erst nach der Cookie-Einwilligung, und Crawler führen ohnehin kein JavaScript aus. Das Server-Log ist die einzige ehrliche Quelle. nginx schreibt Requests von 16 KI-User-Agent-Mustern jetzt in ein eigenes Log, mit dem Accept-Header, so dass es zeigt, welche Seiten sie abrufen und wer nach Markdown fragt:",{"type":261,"code":537},"# http context: which requests come from AI crawlers and agents\nmap $http_user_agent $bc_ai_agent {\n  default 0;\n  \"~*(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|…)\" 1;\n}\nlog_format bc_agents '$time_iso8601 $status $request_method $host$request_uri -> $uri $body_bytes_sent \"$http_accept\" \"$http_user_agent\"';\n\n# server block: an access_log here replaces the inherited one, so the default is repeated\naccess_log \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log;\naccess_log \u002Fvar\u002Flog\u002Fnginx\u002Fbalazscsorba-agents.log bc_agents if=$bc_ai_agent;",{"type":118,"content":539},[540],"Für den Anfang reichen zwei Befehle:",{"type":261,"code":542},"# The pages AI agents fetch most (after negotiation, so \u002Fabout.md means \"asked for Markdown\")\nawk '{print $6}' \u002Fvar\u002Flog\u002Fnginx\u002Fbalazscsorba-agents.log | sort | uniq -c | sort -rn | head -20\n# Requests per agent\ngrep -oE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User)' \\\n  \u002Fvar\u002Flog\u002Fnginx\u002Fbalazscsorba-agents.log | sort | uniq -c | sort -rn",{"type":118,"content":544},[545],"Server-Logs zeigen das Crawlen, nicht das Zitieren. Für Zitate ist der AI-Performance-Bericht in den Bing Webmaster Tools die einzige Zahl aus erster Hand; die Search Console rechnet AI Overviews und AI Mode in ihre Web-Summen ein; und Referrals von chatgpt.com, perplexity.ai und copilot.microsoft.com tauchen in der Analyse auf wie jeder andere Referrer. Darüber hinaus gilt der Rat der Übersichtsarbeit: dieselben Prompts über die Zeit wiederholen, mit Umformulierungen, weil einzelne Antworten von Durchlauf zu Durchlauf schwanken.",{"type":134,"level":135,"id":108,"text":109},{"type":201,"ordered":202,"items":548},[549,554,559,564,569],[550,553],{"tag":121,"children":551},[552],"Kein Keyword-Stuffing."," Es lag im ursprünglichen GEO-Paper unter dem Wert ohne jede Optimierung.",[555,558],{"tag":121,"children":556},[557],"Keine pauschale Überarbeitung aller 24 Beiträge."," Generische Umschreibregeln lassen sich laut der Übersichtsarbeit schlecht übertragen und können das Abrufen verschlechtern. Die drei Beiträge mit wenigen Quellen bekommen mehr, wenn sie das nächste Mal überarbeitet werden, der Leserinnen und Leser wegen.",[560,563],{"tag":121,"children":561},[562],"Kein versteckter Text für Sprachmodelle."," Text, der nur für KI-Systeme gedacht ist, ist Cloaking unter anderem Namen und nutzt denselben Trick wie Prompt Injection. Alles, was ein Modell auf dieser Site lesen kann, kann auch ein Mensch lesen.",[565,568],{"tag":121,"children":566},[567],"Keine strukturierten Daten, die nicht auf der Seite stehen."," Google verlangt Markup, das zum sichtbaren Text passt; das FAQ im Schema ist das FAQ, das du siehst.",[570,573],{"tag":121,"children":571},[572],"Keine erfundenen Entitätsdaten."," Der Person-Knoten nennt nur Profile, die es gibt. Weitere sameAs-Links stehen auf meiner Liste, aber nur für Konten, die ich wirklich nutze.",{"type":134,"level":135,"id":111,"text":112},{"type":201,"ordered":576,"items":577},true,[578,583,588,593,598,603,608,613,618,623],[579,582],{"tag":121,"children":580},[581],"Lass die Antwortmaschinen rein."," Die robots.txt erlaubt OAI-SearchBot, Claude-SearchBot, PerplexityBot und die anderen, und kein Bot-Filter im CDN hebelt das aus.",[584,587],{"tag":121,"children":585},[586],"Sei indexiert und für Snippets zugelassen."," Kein verirrtes noindex oder nosnippet; prüfe in der Search Console und in den Bing Webmaster Tools.",[589,592],{"tag":121,"children":590},[591],"Liefere den Inhalt als HTML."," Crawler, die kein JavaScript ausführen, müssen den Text sehen; statisches oder serverseitiges Rendering sorgt dafür.",[594,597],{"tag":121,"children":595},[596],"Beginne mit der Antwort."," Der erste Satz einer Seite definiert ihr Thema in den Worten, nach denen jemand suchen würde.",[599,602],{"tag":121,"children":600},[601],"Formuliere Aussagen konkret und mit Quelle."," Zahlen, Daten, genannte Quellen und Links sind der Teil von GEO, den die Forschung am besten stützt.",[604,607],{"tag":121,"children":605},[606],"Halte strukturierte Daten wahr."," Ein zusammenhängender Entitätsgraph, Markup, das zum sichtbaren Text passt, und Datumsangaben nur dort, wo sie echt sind.",[609,612],{"tag":121,"children":610},[611],"Biete eine saubere Kopie an."," Eine Markdown-Version jeder Seite, verlinkt mit rel=\"alternate\", und eine llms.txt, verlinkt mit rel=\"describedby\".",[614,617],{"tag":121,"children":615},[616],"Logge KI-Crawler getrennt."," Ein Server-Log mit User-Agent und Accept-Header, keine clientseitige Analyse.",[619,622],{"tag":121,"children":620},[621],"Verfolge Zitate, nicht nur Rankings."," Bing AI Performance, Search Console und Referral-Traffic, über Wochen beobachtet.",[624,627],{"tag":121,"children":625},[626],"Lass das Audit nach jedem Build wieder laufen."," Die Prüfungen sind Skripte, also fällt eine Regression noch am selben Tag auf.",{"type":118,"content":629},[630,631,633,634,638,639,643],"Für die Agenten-Seite derselben Arbeit siehe ",{"tag":298,"to":299,"children":632},[301]," und den Leitfaden zu ",{"tag":298,"to":635,"children":636},"\u002Fblog\u002Fwebmcp-agent-ready-website-guide",[637],"WebMCP auf einer echten Site",". Wenn du dieses Audit für deine eigene Site willst, ",{"tag":298,"to":640,"children":641},"\u002Fabout",[642],"melde dich",".",{"type":134,"level":135,"id":114,"text":115},{"type":201,"ordered":576,"items":646},[647,650,653,656,659,662,665,668],[648],{"tag":126,"href":33,"children":649},[32],[651],{"tag":126,"href":36,"children":652},[35],[654],{"tag":126,"href":39,"children":655},[38],[657],{"tag":126,"href":42,"children":658},[41],[660],{"tag":126,"href":45,"children":661},[44],[663],{"tag":126,"href":48,"children":664},[47],[666],{"tag":126,"href":51,"children":667},[50],[669],{"tag":126,"href":54,"children":670},[53],[672,720,775,820],{"slug":673,"published":674,"minutes":675,"category":7,"tags":676,"keywords":682,"about":691,"sources":700,"cover":713,"og":714,"expertise":715,"locales":716,"lang":60,"title":717,"description":718,"coverAlt":719},"home-assistant-ev-charging-energy-manager","2026-09-29",9,[677,678,679,680,681],"Home Assistant","EPEX Spot","Energy prices","Tesla","Energy management",[683,684,685,686,687,688,689,690],"EPEX Austria prices","spot tariff Austria EV charging","Home Assistant EV charging","cheapest hours charging","day-ahead price Austria","negative electricity prices Austria","Tesla charging spot prices","load management 3 phase",[692,695,697],{"name":693,"url":694},"EPEX SPOT","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEPEX_SPOT",{"name":677,"url":696},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHome_Assistant",{"name":698,"url":699},"Load management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLoad_management",[701,704,707,710],{"title":702,"url":703},"aWATTar Austria: market data API","https:\u002F\u002Fwww.awattar.at\u002Fservices\u002Fapi",{"title":705,"url":706},"EPEX SPOT: market results","https:\u002F\u002Fwww.epexspot.com\u002Fen\u002Fmarket-results",{"title":708,"url":709},"Home Assistant developer docs: apps","https:\u002F\u002Fdevelopers.home-assistant.io\u002Fdocs\u002Fapps\u002F",{"title":711,"url":712},"Home Assistant: Tesla Fleet integration","https:\u002F\u002Fwww.home-assistant.io\u002Fintegrations\u002Ftesla_fleet\u002F","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fog.jpg","vue-nuxt-developer",[59,60,61],"Laden nach EPEX-Preisen in Österreich: was meine Home-Assistant-App spart","Ein Jahr stündlicher EPEX-Preise für Österreich, nachgespielt für einen Tesla und einen Boiler: Laden in den günstigsten Stunden kostet 6,5 statt 18,9 ct\u002FkWh, knapp 590 € im Jahr, ohne 20-A-Sicherung zu sprengen.","Titelbild: drei Balken vergleichen 18,9, 13,1 und 6,5 ct\u002FkWh für Laden um 18:00, über Nacht und in den günstigsten Stunden.",{"slug":721,"published":722,"minutes":723,"category":7,"tags":724,"keywords":731,"about":741,"sources":748,"cover":769,"og":770,"expertise":57,"locales":771,"lang":60,"title":772,"description":773,"coverAlt":774},"webmcp-agent-ready-website-guide","2026-09-27",10,[725,726,727,728,729,730],"WebMCP","Chrome","AI agents","Origin trial","Permissions Policy","JSON Schema",[725,732,733,734,735,736,737,738,739,740],"document.modelContext","registerTool","agent-ready website","WebMCP declarative API","WebMCP origin trial","WebMCP tools","tools Permissions Policy","how to expose website actions to AI agents","Chrome 149 WebMCP",[742,744,746],{"name":725,"url":743},"https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp",{"name":730,"url":745},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Schema",{"name":729,"url":747},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fpermissions-policy-1\u002F",[749,752,755,758,761,764,766],{"title":750,"url":751},"Chrome for Developers: WebMCP (get started)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp",{"title":753,"url":754},"Chrome for Developers: WebMCP Imperative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fimperative-api",{"title":756,"url":757},"Chrome for Developers: WebMCP Declarative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fdeclarative-api",{"title":759,"url":760},"Chrome for Developers: Join the WebMCP origin trial (9 Jun 2026)","https:\u002F\u002Fdeveloper.chrome.com\u002Fblog\u002Fai-webmcp-origin-trial",{"title":762,"url":763},"Chrome for Developers: 15 updates from Google I\u002FO 2026 (19 May 2026)","https:\u002F\u002Fdeveloper.chrome.com\u002Fblog\u002Fchrome-at-io26",{"title":765,"url":743},"WebMCP explainer: webmachinelearning\u002Fwebmcp",{"title":767,"url":768},"ChromeStatus: WebMCP feature entry","https:\u002F\u002Fchromestatus.com\u002Ffeature\u002F5117755740913664","\u002Fimages\u002Fblog\u002Fwebmcp-agent-ready-website-guide\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fwebmcp-agent-ready-website-guide\u002Fog.jpg",[59,60,61],"WebMCP in der Praxis: eine Website agentenfertig machen mit deklarierten Tools","WebMCP im Code: deklarative Formular-Attribute, document.modelContext.registerTool, Tool-Annotationen, Sicherheits-Tore, lokales Testen und eine Checkliste.","Zwei Wege nebeneinander: ein Formular mit toolname- und tooldescription-Attributen, aus dem der Browser ein Schema baut, und ein JavaScript-Tool-Objekt für document.modelContext.registerTool",{"slug":776,"published":722,"minutes":675,"category":7,"tags":777,"keywords":781,"about":787,"sources":794,"cover":814,"og":815,"expertise":57,"locales":816,"lang":60,"title":817,"description":818,"coverAlt":819},"llms-txt-vs-markdown-content-negotiation",[778,779,727,780],"llms.txt","Content negotiation","Nuxt",[778,782,783,784,14,785,786,734],"markdown for agents","content negotiation","AI crawlers","Accept text\u002Fmarkdown header","llms-full.txt",[788,791],{"name":789,"url":790},"Markdown","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown",{"name":792,"url":793},"Hypertext Transfer Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHypertext_Transfer_Protocol",[795,798,799,802,805,808,811],{"title":796,"url":797},"llmstxt.org: The \u002Fllms.txt file (proposal, version 2)","https:\u002F\u002Fllmstxt.org\u002F",{"title":53,"url":54},{"title":800,"url":801},"Cloudflare changelog: Markdown for Agents (12 February 2026)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fchangelog\u002Fpost\u002F2026-02-12-markdown-for-agents\u002F",{"title":803,"url":804},"Cloudflare docs: Markdown for Agents","https:\u002F\u002Fdevelopers.cloudflare.com\u002Ffundamentals\u002Freference\u002Fmarkdown-for-agents\u002F",{"title":806,"url":807},"Ahrefs: 137K sites analyzed, 97% of llms.txt files never get read (June 2026)","https:\u002F\u002Fahrefs.com\u002Fblog\u002Fllmstxt-study\u002F",{"title":809,"url":810},"Checkly: The current state of content negotiation for AI agents (February 2026)","https:\u002F\u002Fwww.checklyhq.com\u002Fblog\u002Fstate-of-ai-agent-content-negotation\u002F",{"title":812,"url":813},"Suganthan: tracking Cloudflare Markdown for Agents on one site","https:\u002F\u002Fsuganthan.com\u002Fblog\u002Fcloudflare-markdown-for-agents\u002F","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fog.jpg",[59,60,61],"llms.txt versus Markdown Content Negotiation: was Agenten wirklich abrufen","llms.txt ist ein Vorschlag, Markdown Content Negotiation ein Header. Was KI-Agenten abrufen, was die Logs zeigen und wie man beides aus Nuxt und nginx ausliefert.","Vier gestapelte Schichten, die KI-Agenten bedienen: deklarierte WebMCP-Tools, eine Markdown-Kopie jeder Seite, eine per Content Negotiation ausgelieferte Markdown-Antwort und ein llms.txt-Index",{"slug":821,"published":722,"minutes":675,"category":7,"tags":822,"keywords":828,"about":839,"sources":847,"cover":869,"og":870,"expertise":715,"locales":871,"lang":60,"title":872,"description":873,"coverAlt":874},"nuxt-llm-features-ai-sdk-streaming",[780,823,824,825,826,827],"AI SDK","Streaming","Structured output","Tool approval","Nitro",[829,830,831,832,833,834,835,836,837,838],"Nuxt AI","AI SDK Vue","Nuxt server route LLM","streaming chat Nuxt","useChat @ai-sdk\u002Fvue","structured output JSON Schema limits","human in the loop tool approval","Nitro API route model key","AI Act Article 50 chatbot","stopWhen isStepCount",[840,842,844],{"name":780,"url":841},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNuxt",{"name":823,"url":843},"https:\u002F\u002Fai-sdk.dev",{"name":845,"url":846},"Zod","https:\u002F\u002Fzod.dev",[848,851,854,857,860,863,866],{"title":849,"url":850},"AI SDK docs: Vue.js (Nuxt) quickstart","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fgetting-started\u002Fnuxt",{"title":852,"url":853},"AI SDK docs: Generating structured data","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fgenerating-structured-data",{"title":855,"url":856},"AI SDK docs: Tool approvals","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fagents\u002Ftool-approvals",{"title":858,"url":859},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":861,"url":862},"AI SDK docs: Telemetry","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftelemetry",{"title":864,"url":865},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":867,"url":868},"Faegre Drinker: Commission confirms the Transparency Code of Practice (Jul 2026)","https:\u002F\u002Fwww.faegredrinker.com\u002Fen\u002Finsights\u002Fpublications\u002F2026\u002F7\u002Feu-ai-act-commission-confirms-transparency-code-of-practice-as-adequate-and-publishes-final-version-of-its-guidelines-on-transparency-obligations","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fog.jpg",[59,60,61],"LLM-Features in Nuxt ausliefern: Streaming, strukturierte Ausgabe, Tool-Freigabe","Nuxt AI von vorn bis hinten: eine Server-Route, die den API-Key hält, Message-Parts, strenge strukturierte Ausgabe, Tools mit Freigabe, Fehler und Artikel 50.","Eine Abfolge vom Browser über die Nitro-Route zum Modell-Provider und einem Tool, dazu ein Komponentenbaum aus Chat-Panel, Nachrichtenliste und Part-Renderer",1790676829372]