Zum Inhalt springen

KI & SEO

KI-Suche optimieren (GEO): Anleitung und Vorlagen

Veröffentlicht · Zuletzt aktualisiert

Auf dieser Seite

Diese Anleitung zeigt Ihnen, wie Sie eine Website so einrichten, dass KI-Suchprodukte sie finden, verstehen und zitieren können, mit konkreten Schritten für jede Plattform und einer Prüfung nach jedem Schritt. Sie richtet sich an Website-Betreiber, Marketingverantwortliche und Entwickler, die die Arbeit selbst erledigen wollen. Niemand kann eine Zitierung in ChatGPT, Perplexity, Claude oder Google garantieren, und Google sagt, dass die Optimierung für generative KI-Suche weiterhin SEO ist. Ein kostenloses Starterpaket mit Dateien zum Kopieren finden Sie am Ende.

Das Wichtigste in Kürze

  • Lassen Sie die richtigen Bots herein. Suchbots entscheiden, ob Sie zitiert werden können, Trainingsbots nicht, und Ihr CDN oder Ihre Firewall kann die robots.txt aushebeln.
  • Legen Sie die Antwort in serverseitig gerendertes HTML. Mehrere große KI-Crawler führten bei der letzten Messung kein JavaScript aus, testen Sie deshalb mit einfachem curl.
  • Schreiben Sie Abschnitte mit der Antwort zuerst: ein Thema pro URL, unter jeder Überschrift eine direkte Antwort, ausdrückliche Fakten.
  • Strukturierte Daten müssen zum sichtbaren Text passen. Für die KI-Funktionen von Google ist kein besonderes Schema nötig.
  • llms.txt ist optional, und die Google-Suche ignoriert sie. Sie ist günstig zu haben, kümmern Sie sich also erst nach den Grundlagen darum.
  • Messen Sie mit den Werkzeugen der Anbieter (Search Console, Bing Webmaster Tools, GA4) und wiederholen Sie Ihre Prompt-Tests über die Zeit.

Sie sind unsicher, welche Plattform zu Ihrem Unternehmen passt? Lesen Sie zuerst WordPress oder Shopify.

Was ist GEO?

Generative Engine Optimization (GEO) bedeutet, Ihre Seiten so aufzubereiten, dass KI-Suchprodukte sie leicht finden, verstehen und zitieren können. Answer Engine Optimization (AEO) ist ein überlappender Begriff für dieselbe Arbeit, und für keinen der beiden gibt es eine einheitliche Definition, wie der Wikipedia-Eintrag festhält. Google ordnet es dem SEO zu, während die Bing Webmaster Guidelines den Begriff GEO verwenden und ausdrücklich sagen, dass er weder Grounding noch Zitierungen garantiert.

Wie generative Engines Quellen finden, auswählen und zitieren

Jede Engine folgt ungefähr demselben Weg, auch wenn die Details je nach Anbieter abweichen.

  1. Crawlen: Googlebot (speist auch AI Overviews und AI Mode); Bingbot (Bing, Copilot, Grounding-API); OAI-SearchBot; Claude-SearchBot; PerplexityBot
  2. Indexieren: Google: indexiert und snippet-fähig; Bing: Copilot nutzt Crawl, Index und Ranking mit; ChatGPT: Suchanbieter von Drittanbietern plus OAI-SearchBot; Perplexity: Websuche in Echtzeit
  3. Frage erweitern: Google: Query Fan-out; ChatGPT: Umformulierung der Anfrage
  4. Passagen abrufen und auswählen: Google: Grounding aus dem Suchindex; Copilot: zerlegt Seiten in kleinere Abschnitte; Grenzen: nosnippet, max-snippet, data-nosnippet, Bing NOARCHIVE und NOCACHE
  5. Antwort erzeugen und zitieren: Google: Links zu belegenden Seiten; Perplexity: nummerierte Quellenangaben; ChatGPT: Quellenangaben; Bing: gezählte Quellenangaben
  6. Messen: Search Console Bericht zu generativer KI (nur Impressionen); Search Console Leistung (KI-Klicks unter Web); Bing AI Performance; GA4 utm_source=chatgpt.com; Server-Logs

Trainings-Bots sind getrennt: GPTBot, ClaudeBot, Google-Extended (nur Token). Durch Nutzer ausgelöste Abrufe: ChatGPT-User, Claude-User, Perplexity-User.

Vereinfacht nach der öffentlichen Dokumentation der jeweiligen Anbieter. Die Systeme unterscheiden sich, und Google gibt an, dass seine KI-Funktionen auf dem Kernranking der Suche aufbauen.

1. Crawlen. Bots müssen die Seite erreichen. Die KI-Übersichten und der KI-Modus von Google nutzen das normale Search-Crawling, der Crawler von Bing speist Copilot, die ChatGPT-Suche stützt sich auf OAI-SearchBot, die Claude-Suche auf Claude-SearchBot und Perplexity auf PerplexityBot.

2. Indexieren. Google sagt, eine Seite müsse indexiert und snippet-fähig sein, weitere Anforderungen gebe es nicht. Bing sagt, Copilot teile sich dasselbe Fundament aus Crawling, Index und Ranking. OpenAI sagt, ChatGPT schicke umformulierte Anfragen an Suchanbieter von Drittanbietern und nutze zusätzlich den eigenen Crawler.

3. Die Frage auffächern. Der Leitfaden von Google beschreibt Query Fan-out, bei dem verwandte Teilanfragen abgesetzt werden. OpenAI sagt, ChatGPT formuliere einen Prompt in eine oder mehrere gezielte Anfragen um.

4. Passagen abrufen und auswählen. Google ruft mit seinen zentralen Ranking-Systemen ab. Microsoft sagt, Copilot zerlege Seiten in kleinere Teile, sodass wichtige Angaben in Tabs, Bildern oder PDFs übersprungen werden können.

5. Generieren und zitieren. Perplexity versieht seine Antworten mit nummerierten Quellenangaben. OpenAI sagt, eine Platzierung in der ChatGPT-Suche sei nicht garantiert.

Danach wird gemessen, was am Ende behandelt wird. Wenn Sie speziell an ChatGPT arbeiten, lesen Sie unseren Leitfaden zum Ranking bei ChatGPT, und zum übergeordneten Thema unseren Leitfaden zur Answer Engine Optimization.

Trainingsbots, Suchbots und nutzerausgelöste Abrufe

Jeder Anbieter trennt sein Crawling nach Zweck. Die praktische Regel: Wer ein Trainings-Token blockiert, verschwindet damit nicht aus der KI-Suche dieses Anbieters, wer einen Suchbot blockiert, schon.

VergleichCrawler-Zwecke nach Anbieter
Anbieter Suche und Antworten Modelltraining Nutzerausgelöster Abruf
OpenAI OAI-SearchBot GPTBot ChatGPT-User
Anthropic Claude-SearchBot ClaudeBot Claude-User
Perplexity PerplexityBot Nicht für Training genutzt Perplexity-User
Google Googlebot (Suche, KI-Übersichten, KI-Modus) Google-Extended-Token (Gemini-Training und Grounding) Nutzerausgelöste Abrufe von Google
Apple Applebot Applebot-Extended-Token Keine dokumentiert
Microsoft Bingbot (Bing und Copilot) Kein eigenes Token; Meta-Tags NOARCHIVE und NOCACHE Keine dokumentiert

Quellen: OpenAI, Anthropic, Perplexity, Google, Apple, Bing. Geprüft am 7. Oktober 2026.

SEO, AEO und GEO im Vergleich

VergleichSEO, AEO und GEO im Vergleich
SEO AEO GEO
Was man darunter versteht Sichtbarkeit in klassischen Suchergebnissen gewinnen Die Antwort in Featured Snippets, Sprachassistenten und KI-Antworten sein Innerhalb generierter Antworten zitiert werden
Wo die Antwort erscheint Rangierte Links Antwortboxen und Assistenten KI-Übersichten, KI-Modus, ChatGPT, Copilot, Perplexity, Claude
Was Sie steuern Crawlbarkeit, Inhalte, Links, Seitenerlebnis Inhalte mit der Antwort zuerst und klare Struktur Dieselben Stellschrauben, plus Bot-Zugang und Klarheit über die Organisation
Was Sie messen Impressionen, Klicks, Rankings Präsenz in Snippets und Antworten Zitierungen, Impressionen in KI-Berichten, Referral-Sitzungen
Einschränkung Rankings verändern sich Die Begriffe überlappen mit SEO Keine einheitliche Definition, keine garantierten Zitierungen

Google sagt, die Optimierung für generative KI-Suche sei weiterhin SEO. Betrachten Sie die drei Begriffe als Umfang, nicht als verschiedene Disziplinen.

Sechs Mythen, die Sie vor dem Start ablegen sollten

Die Grundlagen, die jede Plattform braucht

Diese sechs Schritte gelten für jeden Stack. Die späteren Plattformabschnitte zeigen, wo sie sich jeweils in WordPress, Shopify, React, Next.js und Astro finden.

1. Die richtigen Bots hereinlassen: robots.txt und Ihr CDN

SchritteSuchbots den Zugang öffnen

  1. Ihre Linie festlegen

    Vorlage A macht Sie in der KI-Suche sichtbar und schließt zugleich das Modelltraining aus. Vorlage B heißt alles willkommen, auch Trainings-Crawler, und ist die Linie, die maxenius.com für maximale Sichtbarkeit nutzt.

  2. Die Datei schreiben und gemeinsame Regeln wiederholen

    Ein Crawler befolgt nur die am genauesten passende Gruppe, und laut Googles Spezifikation werden benannte Gruppen und die Gruppe * nicht kombiniert. Wiederholen Sie daher jede benötigte Disallow-Zeile in jeder benannten Gruppe.

    public/robots.txtVorlage A: in der KI-Suche sichtbar, Training ausgeschlossen
    User-agent: *
    Disallow: /api/
    Disallow: /cart/
    Allow: /
    
    User-agent: OAI-SearchBot
    User-agent: ChatGPT-User
    User-agent: Claude-SearchBot
    User-agent: Claude-User
    User-agent: PerplexityBot
    User-agent: Perplexity-User
    Disallow: /api/
    Disallow: /cart/
    Allow: /
    
    User-agent: GPTBot
    User-agent: ClaudeBot
    User-agent: Applebot-Extended
    User-agent: CCBot
    Disallow: /
    
    Sitemap: https://www.example.com/sitemap.xml
    public/robots.txtVorlage B: maximale Sichtbarkeit, Trainings-Crawler eingeschlossen
    User-agent: *
    Disallow: /api/
    Allow: /
    
    User-agent: OAI-SearchBot
    User-agent: ChatGPT-User
    User-agent: GPTBot
    User-agent: Claude-SearchBot
    User-agent: Claude-User
    User-agent: ClaudeBot
    User-agent: PerplexityBot
    User-agent: Perplexity-User
    User-agent: Google-Extended
    User-agent: Applebot-Extended
    Disallow: /api/
    Allow: /
    
    Sitemap: https://www.example.com/sitemap.xml
  3. Die Mechanik sauber halten

    Setzen Sie Disallow-Zeilen vor Allow: /, weil einfache Parser wie der robotparser von Python beim ersten Treffer aufhören. Liefern Sie pro Host genau eine Datei unter /robots.txt aus. Nach RFC 9309 bedeutet eine 5xx-Antwort, dass Crawler von einem Komplettverbot ausgehen, und ein 404, dass sie alles crawlen dürfen. Die robots.txt ist keine Zugriffskontrolle. OpenAI und Perplexity sagen beide, dass Änderungen etwa 24 Stunden zur Anwendung brauchen.

  4. Die Ebene über der robots.txt prüfen

    OpenAI sagt, Ihr Host oder CDN müsse die veröffentlichten IP-Bereiche zulassen, und Perplexity dokumentiert WAF-Regeln, die User-Agent und IP-Listen kombinieren. Zwei Fallstricke: Seit dem 15. September 2026 blockiert Cloudflare Crawler mit gemischtem Zweck, darunter Googlebot, Applebot und BingBot, sobald ein Kunde die Blockade für Training aktiviert, und die verwaltete robots.txt setzt Disallow-Regeln voran, die auch Google-Extended umfassen. Bei Vercel blockiert das AI-Bots-Regelset auf „Deny“ auch Suchbots.

  5. Funktion prüfenPrüfen, ob es funktioniert

    Führen Sie curl -s https://yourdomain.com/robots.txt aus und prüfen Sie, ob die Live-Datei zu Ihrem Repository passt, denn ein CDN kann sie umschreiben. Schauen Sie dann in den Server- oder CDN-Logs nach Antworten mit Status 200 an OAI-SearchBot, Claude-SearchBot, PerplexityBot und Bingbot. Wer mit curl einen User-Agent vortäuscht, testet nur User-Agent-Regeln, keine IP-basierten.

Die robots.txt von maxenius.com, die KI-Crawler im Rahmen einer Linie für maximale Sichtbarkeit ausdrücklich nennt

In voller Größe öffnen (neuer Tab)

Unsere eigene robots.txt, die die aufgeführten KI-Crawler willkommen heißt.

TXT1 KB

robots.txt-Vorlagen A und B

Vorlage A: Suchbots erlaubt, Trainingsbots blockiert. Vorlage B, die Linie für maximale Sichtbarkeit, liegt im selben Ordner des Pakets.

Alle

HerunterladenIm Browser ansehen

2. Die Antwort in serverseitig gerendertes HTML legen

SchritteDie Seite ohne JavaScript lesbar machen

  1. Zuerst die datierten Befunde lesen

    Im Dezember 2024 stellten Vercel und MERJ fest, dass keiner der untersuchten großen KI-Crawler JavaScript rendert, abgesehen von Gemini über Googlebot und Applebot. Vercels Leitfaden von 2026, Make your site readable by AI agents, rät weiterhin, die Inhalte, die gelesen werden sollen, serverseitig zu rendern. Das sind datierte Befunde, kein Versprechen für jeden Crawler. OpenAI sagt nicht, ob OAI-SearchBot rendert, testen Sie also, statt etwas anzunehmen.

  2. Das Wesentliche auf dem Server rendern

    Titel, Haupttext, Canonical, JSON-LD und Navigationslinks sollten im ursprünglichen HTML stehen. Google sagt, nicht alle Bots führten JavaScript aus, auch wenn Googlebot es in der Regel tut.

  3. Antworten nicht verstecken

    Halten Sie wichtige Antworten aus geschlossenen Tabs, Bildern und PDFs heraus. Microsoft und Bing warnen beide davor, entscheidende Inhalte hinter clientseitigem Rendering zu verbergen.

  4. Funktion prüfenPrüfen, ob es funktioniert

    Rufen Sie die Seite so ab, wie es ein Crawler ohne Rendering tut, zum Beispiel mit dem Skript aus dem Paket: ./ai-bot-check.sh https://www.example.com/page "a sentence from the body". Jede Bot-Zeile sollte Status 200 zeigen, eine Wortzahl nahe an dem, was Sie im Browser sehen, und PHRASE = yes. Das Paket enthält zwei Skripte: ai-bot-check.sh testet sieben Bot-User-Agents, und check-ai-crawl.sh (im Abschnitt zu den Frameworks gezeigt) prüft einen Abruf auf Titel, Canonical und JSON-LD.

Terminalausgabe von ai-bot-check.sh mit Status 200 für sieben KI-Bot-User-Agents, einer Byte-Zahl, einer Wortzahl und der gefundenen Testphrase

In voller Größe öffnen (neuer Tab)

Ausgabe von ai-bot-check.sh aus dem Paket für eine unserer eigenen Seiten.

3. Abschnitte mit der Antwort zuerst schreiben

SchritteJeden Abschnitt übernehmbar machen

  1. Mit der Antwort beginnen

    Setzen Sie die direkte Antwort in die ersten Sätze unter jeder Überschrift und formulieren Sie Überschriften konkret. Die Richtlinien von Bing raten, wichtige Informationen früh zu nennen und Fakten auf der URL ausdrücklich zu benennen.

  2. Ein Thema pro URL, keine skalierten Seiten

    Legen Sie nicht für jede Fan-out-Variante einer Anfrage eine Seite an. Google nennt das Scaled Content Abuse. Ergänzen Sie stattdessen Erfahrungswissen aus erster Hand und Details, die nicht Allgemeingut sind, statt wiederzugeben, was andere sagen.

  3. Kein versteckter Text für Modelle

    Bing behandelt Prompt Injection und versteckte Anweisungen für LLMs als Missbrauch, der eine Website abwerten oder aus dem Index nehmen kann. Google sagt, es gebe keine ideale Länge und keinen Zwang zur Zerlegung in Blöcke, schreiben Sie also für Menschen.

  4. Funktion prüfenPrüfen, ob es funktioniert

    Lesen Sie jeden H2-Abschnitt für sich. Wenn er seine eigene Überschrift beantwortet, ohne den Absatz davor zu brauchen, besteht er die Prüfung.

4. Strukturierte Daten, die zur Seite passen

SchritteMarkup ergänzen, das die Wahrheit sagt

  1. Die Anforderung prüfen

    Google sagt, für KI-Funktionen sei kein besonderes Schema nötig, und das Markup müsse zum sichtbaren Text passen. Verwenden Sie trotzdem Article oder BlogPosting, Organization, Product und BreadcrumbList, wo sie zutreffen.

  2. JSON-LD verwenden, maskieren und Datumsangaben setzen

    JSON-LD darf im Head oder im Body stehen, und Google liest per Skript eingefügtes JSON-LD, Crawler ohne JavaScript dagegen nicht. Wenn Sie JSON in ein Script-Tag serialisieren, ersetzen Sie jedes < durch < (ein Backslash gefolgt von u003c), damit ein Wert mit schließendem Script-Tag den Block nicht vorzeitig beendet. Die React-, Next.js- und Astro-Beispiele unten tun das. Zeigen Sie ein sichtbares Datum an und setzen Sie datePublished und dateModified passend dazu, wie in Googles Hinweisen zur Autorenzeile beschrieben.

  3. FAQ-Schema als optional behandeln

    Google hat das FAQ-Rich-Result am 7. Mai 2026 eingestellt. Behalten Sie FAQ-Markup nur, wenn es sichtbare Fragen abbildet, und rechnen Sie nicht mit zusätzlichem Platz in den Suchergebnissen.

  4. Funktion prüfenPrüfen, ob es funktioniert

    Rufen Sie den Seitenquelltext auf und prüfen Sie, ob das JSON-LD im rohen HTML steht. Führen Sie den Rich-Results-Test oder den Schema Markup Validator aus und vergleichen Sie dann jeden Wert mit dem, was Besucher sehen.

Formatierter Ausschnitt des JSON-LD-Graphen im HTML-Quelltext einer Seite von maxenius.com

In voller Größe öffnen (neuer Tab)

Ein formatierter Ausschnitt des JSON-LD im Quelltext einer unserer eigenen Seiten.

5. Was ist llms.txt, und brauchen Sie eine?

llms.txt ist ein optionaler Vorschlag aus der Community: eine Markdown-Datei unter /llms.txt, die Ihre wichtigsten Seiten für KI-Werkzeuge auflistet. Google sagt, die Suche nutze sie nicht, Sie können also darauf verzichten, ohne etwas zu verlieren.

SchritteEntscheiden, ob Sie llms.txt veröffentlichen

  1. Wissen, was llms.txt ist

    llms.txt ist eine Markdown-Datei im Stammverzeichnis Ihrer Website, die Jeremy Howard am 3. September 2024 vorgeschlagen hat, mit einem im August 2026 veröffentlichten Format v2. Sie hat eine H1 (der einzige Pflichtteil), eine optionale Zusammenfassung als Zitatblock und H2-Abschnitte, die Links als - [name](url): notes auflisten.

  2. Was sie heute leistet

    Google sagt, die Suche profitiere davon weder, noch werde sie dadurch beeinträchtigt. In keinem der von uns geprüften Crawler-Dokumente von OpenAI, Anthropic, Perplexity, Bing, Apple oder Meta steht, dass deren Crawler sie lesen. Das Lighthouse von Chrome hat ein Audit für Agentic Browsing, das als „Nicht zutreffend“ markiert wird, wenn die Datei fehlt. Vercels Leitfaden von 2026 berichtet, dass llms.txt den Abruf nicht veränderte, wenn die Antwort bereits im Server-HTML stand, und dass 86 Prozent der zugeordneten Abrufe über Seitenlinks kamen.

  3. Entscheiden, ob Sie sie veröffentlichen

    Optional und günstig, machen Sie sie also nach den Grundlagen. Halten Sie sie klein. llms-full.txt ist eine Konvention, die manche Dokumentationsplattformen erzeugen, kein Teil der Spezifikation, und echte Dateien erreichen zig Megabyte. Die Standard-/llms.txt von Shopify liefert Anweisungen für Agenten, wie im Shopify-Abschnitt beschrieben.

    public/llms.txtPlatzhalterangaben, Format v2
    # Example Co
    
    > Example Co makes refillable cleaning products and sells them online to customers in the US and Canada.
    
    Key facts:
    - Free shipping on US orders over $50; returns accepted within 30 days.
    - Support: support@example.com, Monday to Friday.
    
    ## Products
    
    - [All products](https://www.example.com/collections/all): Full catalog with prices and stock status
    - [Refill subscriptions](https://www.example.com/pages/subscriptions): How refills are billed, paused and cancelled
    
    ## Policies
    
    - [Shipping policy](https://www.example.com/policies/shipping-policy): Carriers, delivery times and costs
    - [Refund policy](https://www.example.com/policies/refund-policy): Return window and how refunds are paid
  4. Funktion prüfenPrüfen, ob es funktioniert

    Führen Sie curl -sI https://yourdomain.com/llms.txt aus und erwarten Sie Status 200 mit einem Text-Content-Type. Fügen Sie dann nur die Datei in einen Assistenten ein und stellen Sie ihm Fragen zu Ihrem Unternehmen.

Die llms.txt von maxenius.com, beim Build aus Seitendaten erzeugt

In voller Größe öffnen (neuer Tab)

Unsere eigene llms.txt, beim Build aus Seitendaten erzeugt.

6. Organisation und URLs konsistent halten

SchritteEinmal sagen, wer Sie sind, unter einer Adresse

  1. Organization-Markup veröffentlichen

    Fügen Sie auf der Startseite Organization-JSON-LD mit Name, URL, Logo, Beschreibung und sameAs-Links zu Ihren echten Profilen hinzu, gemäß Googles Organization-Dokumentation. Verwenden Sie überall denselben Namen, wie es die Richtlinien von Bing verlangen, und halten Sie Daten in Business Profile, Bing Places und Merchant Center auf demselben Stand.

  2. Einen Host wählen

    Ihr Canonical-Tag, die loc-Werte der Sitemap und das Weiterleitungsziel müssen übereinstimmen. Google wertet Weiterleitungen und rel=canonical als starke Signale und die Sitemap als schwaches und rät davon ab, verschiedene URLs mit verschiedenen Methoden anzugeben. Bing weist darauf hin, dass LLMs nahezu doppelte Seiten bündeln und eine veraltete URL als Vertreter wählen können.

  3. lastmod aus echten Änderungen setzen

    Ändern Sie lastmod nur, wenn sich Hauptinhalt, strukturierte Daten oder Links ändern, nie auf die Build-Zeit. Google ignoriert priority und changefreq, und Bing sagt dasselbe. Kombinieren Sie es mit einem sichtbaren Datum und dateModified.

  4. IndexNow für Bing anpingen

    IndexNow benachrichtigt Bing und andere teilnehmende Suchmaschinen über Änderungen. Google nimmt nicht teil. Ein HTTP 200 bedeutet, dass Ihre URL empfangen wurde, nicht, dass sie indexiert ist.

  5. Funktion prüfenPrüfen, ob es funktioniert

    Führen Sie für jede Host-Variante curl -sI https://example.com/page | grep -i -E '^HTTP/|^location' aus und vergleichen Sie dann das Weiterleitungsziel mit dem Canonical der Seite und ihrem Sitemap-Eintrag. Alle drei müssen dieselbe URL sein.

WordPress für die KI-Suche optimieren (und llms.txt ergänzen): Schritt für Schritt

Dieser Abschnitt funktioniert auf einer gewöhnlichen WordPress-Website mit oder ohne SEO-Plugin. Jeder Schritt endet mit einer einzeiligen Prüfung, und der letzte Schritt führt vier Terminalbefehle aus, die das gesamte Setup bestätigen.

Die Einstellungen Ihres SEO-Plugins finden

Die meisten der folgenden Entscheidungen hängen von dieser Tabelle ab. Suchen Sie zuerst Ihre Spalte und folgen Sie dann den Schritten.

VergleichWo die einzelnen WordPress-SEO-Plugins die für GEO relevanten Einstellungen ablegen
Yoast SEO Rank Math AIOSEO
llms.txt Kostenlos seit 25.3 (10. Juni 2025). Yoast SEO > Settings > Site features > AI tools > LLMS.txt. Schreibt eine physische Datei, wöchentlich aktualisiert. Yoast hat gesagt, sie sei bei Multisite nicht verfügbar (GitHub-Issue). Seit 1.0.250 (31. Juli 2025). Modul unter Rank Math SEO > Dashboard aktivieren, dann Rank Math SEO > General Settings > Edit llms.txt. Leer, bis Sie sie konfigurieren. Integriert, siehe das AIOSEO-Changelog. Enthält llms-full.txt und Markdown-Versionen von Beiträgen. All in One SEO > Sitemaps > Tab LLMs.txt. Standardmäßig aktiviert, als statische Datei geschrieben.
robots.txt-Editor Yoast SEO > Tools > File editor > Create robots.txt file. Dies erstellt eine physische Datei. Rank Math SEO > General Settings > Edit robots.txt. Virtuelle Datei; laut Rank Maths Wissensdatenbank verhindert eine physische Datei im Stammverzeichnis die Bearbeitung. All in One SEO > Tools > Robots.txt Editor > Enable Custom Robots.txt. Enthält eine Option „Block AI Crawlers“.
Sitemap-URL /sitemap_index.xml (die /wp-sitemap.xml des Cores wird ersetzt) /sitemap_index.xml Virtuelle Sitemap, verwaltet unter All in One SEO > Sitemaps
IndexNow Nur Premium Modul Instant Indexing Integriert

WordPress-Core liefert /wp-sitemap.xml von sich aus aus. Ohne SEO-Plugin deckt das offizielle IndexNow-Plugin IndexNow ab.

SchritteWordPress für die KI-Suche einrichten

  1. Sicherstellen, dass der Inhalt im HTML steht

    Öffnen Sie eine wichtige Seite, wählen Sie „Seitenquelltext anzeigen“ (nicht „Untersuchen“) und suchen Sie nach einem Satz aus dem Haupttext. Oder führen Sie curl -s https://example.com/page/ | grep -i "a sentence from the page" aus. Themes und gängige Page Builder rendern auf dem Server, Inhalte in AJAX-Tabs, Slidern und „Mehr laden“-Widgets sind dort aber womöglich nicht enthalten.

    Stellen Sie sicher, dass die Navigation echte <a href>-Links nutzt, denn Google kann nur so aufgebaute Links crawlen. Öffnen Sie dann Einstellungen > Lesen und prüfen Sie, dass „Sichtbarkeit für Suchmaschinen“ nicht aktiviert ist. Ist sie an, ergänzt aktuelles WordPress auf jeder Seite ein noindex-Robots-Meta, statt ein Disallow in der robots.txt zu setzen.

    Prüfung: Ihr Satz erscheint in der curl-Ausgabe, und curl -s https://example.com/ | grep -i noindex liefert nichts.

  2. Die robots.txt selbst in die Hand nehmen

    Ohne physische Datei baut WordPress eine virtuelle robots.txt und leitet sie durch den Filter robots_txt. Eine physische robots.txt im Web-Root überschreibt diesen Filter und jeden Plugin-Editor aus der Tabelle, und der File editor von Yoast erstellt genau so eine Datei. Klären Sie, in welcher Situation Sie sind, bevor Sie etwas bearbeiten.

    Wenn Sie eine eigene KI-Gruppe wollen, nutzen Sie das mu-plugin geo-robots.php unten. Es wiederholt die Admin-Regeln innerhalb der Gruppe, denn nach RFC 9309 befolgt ein Crawler, der eine Gruppe mit seinem Namen findet, nur diese Gruppe.

    Lassen Sie „Block AI Crawlers“ von AIOSEO und den Bot blocker von Yoast Premium ausgeschaltet, wenn Sie Sichtbarkeit in der KI-Suche wollen. Liegt die Website hinter Cloudflare, prüfen Sie dessen verwaltete robots.txt, die Disallow-Regeln oberhalb Ihrer Datei ergänzt.

    Prüfung: curl -s https://example.com/robots.txt zeigt die erwarteten Regeln. OpenAI sagt, Änderungen können etwa 24 Stunden brauchen, bis sie die ChatGPT-Suche erreichen.

  3. Entscheiden, welche Bots Sie zulassen

    Such- und Zitierbots sind OAI-SearchBot, Claude-SearchBot und PerplexityBot. Trainingsbots wie GPTBot und ClaudeBot sind eine eigene Entscheidung, und ihr Blockieren entfernt Sie nicht aus der Suche des jeweiligen Anbieters. Die vollständige Anbietertabelle steht im Grundlagenabschnitt.

    Prüfung: Kein Bot, den Sie in der Suche haben wollen, wird in einer Disallow-Gruppe genannt.

  4. llms.txt aus nur einer Quelle veröffentlichen

    Wählen Sie die Plugin-Funktion aus der Tabelle oder nutzen Sie geo-llms-txt.php, wenn Sie kein Plugin haben. Setzen Sie nie zwei ein. Yoast überschreibt keine vorhandene Datei, und eine statische Datei kann eine dynamische eines anderen Plugins überdecken.

    Der Nutzen ist ungewiss, wie im llms.txt-Abschnitt beschrieben. Auch die Dokumentation von Rank Math sagt, die Verbreitung sei begrenzt. Sie kostet wenig, betrachten Sie sie also als aufgeräumtes Inhaltsverzeichnis Ihrer besten Seiten.

    Prüfung: curl -sI https://example.com/llms.txt liefert 200, und der Body beginnt mit # Your site name.

  5. Strukturierte Daten über Ihr Plugin ergänzen

    Fügen Sie keinen zweiten Organization-Block ein. Yoast gibt einen verknüpften @graph aus und stellt Filter wie wpseo_schema_organization bereit (Schema API). Legen Sie Name, Logo und Profile zuerst unter Yoast SEO > Settings > Site representation fest. Rank Math erlaubt es, den Publisher über rank_math/json_ld zu erweitern. Ohne Plugin nutzen Sie geo-schema.php.

    Prüfung: curl -s https://example.com/ | grep -c 'application/ld+json', fügen Sie dann jeden Block in validator.schema.org ein und prüfen Sie, dass es genau einen Organization-Knoten gibt.

  6. Autoren- und Organisationsangaben ergänzen

    Füllen Sie Benutzer > Profil aus (Anzeigename, biografische Angaben, Website), denn SEO-Plugins lesen die Autorendaten von dort. Laut Article-Hinweisen von Google enthält author.name nur den Namen, und author.url verweist auf eine Seite, die den Autor eindeutig identifiziert. Für das Unternehmen gehört das Organization-Markup auf die Startseite oder die Über-uns-Seite, empfohlen werden name, url, logo, sameAs und Kontaktangaben.

    Prüfung: Die Autorenzeile eines Beitrags verlinkt auf eine Autorenseite, und der Seitenquelltext zeigt im Article-JSON-LD denselben Namen.

  7. Einen Sitemap-Generator verwenden

    Nutzen Sie Core, Yoast, Rank Math oder AIOSEO, nicht mehrere. Reichen Sie die URL in der Google Search Console und in den Bing Webmaster Tools ein. Bing wünscht sich genaue lastmod-Werte im ISO-8601-Format mit Datum und Uhrzeit.

    Prüfung: Die Sitemap-URL aus der Tabelle lässt sich laden, und lastmod ändert sich nur, wenn Sie eine Seite tatsächlich bearbeiten.

  8. IndexNow aktivieren, mit einem Sender

    Wählen Sie das offizielle IndexNow-Plugin, Instant Indexing von Rank Math, AIOSEO oder Yoast Premium. Zwei gleichzeitig führen zu doppelten Übermittlungen. IndexNow teilt übermittelte URLs mit allen teilnehmenden Suchmaschinen.

    Prüfung: Veröffentlichen Sie einen Testbeitrag und suchen Sie ihn in der Liste der letzten Übermittlungen des Plugins.

  9. WooCommerce-Produktdaten vervollständigen

    Füllen Sie für jedes Produkt Produktdaten > Inventar > Artikelnummer (SKU) und das Feld „GTIN, UPC, EAN oder ISBN“ aus und schreiben Sie eine echte Kurzbeschreibung. WooCommerce 11.1.2 gibt Product-JSON-LD mit sku, gtin, offers und Bewertungen aus und lässt sich mit woocommerce_structured_data_product erweitern. Die Filterdatei unten ergänzt eine Marke. Gibt auch ein SEO-Plugin Product aus, vergleichen Sie die beiden Blöcke.

    Für WooCommerce trunk ist Markup für OnlineStore und MerchantReturnPolicy in einer späteren Version geplant (markiert mit 11.3.0), es ist in 11.1.2 also nicht enthalten.

    Prüfung: Rufen Sie den Quelltext einer Produktseite auf und prüfen Sie, dass es genau einen Product-Knoten mit Ihrer GTIN gibt.

  10. Funktion prüfenAlles im Terminal prüfen

    Ersetzen Sie Domain und Phrase und führen Sie dann alle vier Befehle aus:

    curl -s https://example.com/robots.txt zeigt Ihre vorgesehenen Gruppen und eine Sitemap-Zeile.

    curl -sI https://example.com/llms.txt liefert 200 und text/plain.

    curl -s https://example.com/ | grep -c 'application/ld+json' liefert die Zahl der erwarteten Blöcke.

    curl -s https://example.com/some-page/ | grep -i "a sentence from the body" findet Ihren Text.

Code zum Einfügen

Legen Sie diese Dateien in wp-content/mu-plugins/ ab. WordPress lädt dort PHP-Dateien der obersten Ebene automatisch. Jede Datei ist auch im Starterpaket enthalten.

wp-content/mu-plugins/geo-robots.phpFunktioniert nur, wenn keine physische robots.txt existiert
<?php
/**
* Plugin Name: GEO robots.txt rules
* Description: Adds an explicit group for AI search crawlers to the virtual robots.txt.
*/
defined( 'ABSPATH' ) || exit;

add_filter(
'robots_txt',
function ( $output, $is_public ) {
	if ( ! $is_public ) {
		return $output;
	}
	$admin_path = wp_parse_url( admin_url(), PHP_URL_PATH );
	$ajax_path  = wp_parse_url( admin_url( 'admin-ajax.php' ), PHP_URL_PATH );
	// A crawler that finds a group naming it obeys only that group (RFC 9309).
	$bots  = array( 'OAI-SearchBot', 'ChatGPT-User', 'Claude-SearchBot', 'Claude-User', 'PerplexityBot', 'Perplexity-User' );
	$group = "\n# AI search and answer crawlers\n";
	foreach ( $bots as $bot ) {
		$group .= 'User-agent: ' . $bot . "\n";
	}
	$group .= 'Disallow: ' . $admin_path . "\n";
	$group .= 'Allow: ' . $ajax_path . "\n";
	return $output . $group;
},
99,
2
);

Ausgabe, nach dem Core-Standard angehängt:

txtBeispielausgabe
# AI search and answer crawlers
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
wp-content/mu-plugins/geo-llms-txt.phpNur ohne SEO-Plugin. Nicht mit einer llms.txt-Funktion eines Plugins kombinieren
<?php
/**
* Plugin Name: GEO llms.txt
* Description: Serves /llms.txt (llmstxt.org format) without an SEO plugin.
* A physical llms.txt in the web root wins over this code.
*/
defined( 'ABSPATH' ) || exit;

const GEO_LLMS_REWRITE_VERSION = '1';

add_action( 'init', function () {
add_rewrite_rule( '^llms\.txt$', 'index.php?geo_llms_txt=1', 'top' );
// mu-plugins have no activation hook, so flush once per rule version.
if ( get_option( 'geo_llms_rewrite_version' ) !== GEO_LLMS_REWRITE_VERSION ) {
	flush_rewrite_rules( false );
	update_option( 'geo_llms_rewrite_version', GEO_LLMS_REWRITE_VERSION );
}
} );

add_filter( 'query_vars', function ( $vars ) {
$vars[] = 'geo_llms_txt';
return $vars;
} );

// Priority 0 runs before redirect_canonical (priority 10).
add_action( 'template_redirect', function () {
if ( ! get_query_var( 'geo_llms_txt' ) ) {
	return;
}
$body = get_transient( 'geo_llms_txt_body' );
if ( false === $body ) {
	$body = geo_llms_build();
	set_transient( 'geo_llms_txt_body', $body, 12 * HOUR_IN_SECONDS );
}
status_header( 200 );
header( 'Content-Type: text/plain; charset=utf-8' );
echo $body; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
exit;
}, 0 );

add_action( 'save_post', function () {
delete_transient( 'geo_llms_txt_body' );
} );

function geo_llms_build() {
$clean = function ( $text ) {
	$text = wp_strip_all_tags( html_entity_decode( (string) $text, ENT_QUOTES, 'UTF-8' ) );
	return trim( preg_replace( '/\s+/', ' ', $text ) );
};
$lines   = array( '# ' . $clean( get_bloginfo( 'name' ) ), '' );
$tagline = $clean( get_bloginfo( 'description' ) );
if ( '' !== $tagline ) {
	$lines[] = '> ' . $tagline;
	$lines[] = '';
}
$sections = array(
	'Pages'    => array( 'post_type' => 'page', 'orderby' => 'menu_order title', 'order' => 'ASC' ),
	'Articles' => array( 'post_type' => 'post', 'orderby' => 'modified', 'order' => 'DESC' ),
);
if ( post_type_exists( 'product' ) ) {
	$sections['Products'] = array( 'post_type' => 'product', 'orderby' => 'modified', 'order' => 'DESC' );
}
foreach ( $sections as $heading => $args ) {
	$posts = get_posts( array_merge( $args, array(
		'post_status' => 'publish', 'posts_per_page' => 50, 'has_password' => false, 'suppress_filters' => false,
	) ) );
	if ( ! $posts ) {
		continue;
	}
	$lines[] = '## ' . $heading;
	$lines[] = '';
	foreach ( $posts as $post ) {
		$summary = $clean( has_excerpt( $post ) ? get_the_excerpt( $post ) : wp_trim_words( strip_shortcodes( $post->post_content ), 30, '' ) );
		$title   = str_replace( array( '[', ']' ), array( '(', ')' ), $clean( get_the_title( $post ) ) );
		$line    = sprintf( '- [%s](%s)', $title, esc_url_raw( get_permalink( $post ) ) );
		if ( '' !== $summary ) {
			$line .= ': ' . $summary;
		}
		$lines[] = $line;
	}
	$lines[] = '';
}
return implode( "\n", $lines );
}

Diese Version kennt keine noindex-Markierungen einzelner Beiträge aus SEO-Plugins, ein weiterer Grund, sie nur auf Websites ohne ein solches Plugin einzusetzen.

wp-content/mu-plugins/geo-schema.phpNur für Websites ohne Yoast, Rank Math oder AIOSEO
<?php
defined( 'ABSPATH' ) || exit;

function geo_print_jsonld( array $data ) {
echo '<script type="application/ld+json">'
	. wp_json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_HEX_TAG )
	. "</script>\n";
}

// Organization on the front page (edit the values).
add_action( 'wp_head', function () {
if ( ! is_front_page() ) {
	return;
}
geo_print_jsonld( array(
	'@context'     => 'https://schema.org',
	'@type'        => 'Organization',
	'@id'          => home_url( '/#organization' ),
	'name'         => get_bloginfo( 'name' ),
	'url'          => home_url( '/' ),
	'logo'         => get_site_icon_url( 512 ),
	'description'  => get_bloginfo( 'description' ),
	'sameAs'       => array( 'https://www.linkedin.com/company/your-company' ),
	'contactPoint' => array( '@type' => 'ContactPoint', 'contactType' => 'sales', 'email' => 'hello@example.com' ),
) );
} );

// FAQPage from a "geo_faqs" custom field: [{"q":"...","a":"..."}]. Mark up only visible FAQs.
add_action( 'wp_head', function () {
if ( ! is_singular() ) {
	return;
}
$faqs = json_decode( (string) get_post_meta( get_queried_object_id(), 'geo_faqs', true ), true );
if ( ! is_array( $faqs ) || ! $faqs ) {
	return;
}
$entities = array();
foreach ( $faqs as $faq ) {
	if ( empty( $faq['q'] ) || empty( $faq['a'] ) ) {
		continue;
	}
	$entities[] = array(
		'@type'          => 'Question',
		'name'           => wp_strip_all_tags( $faq['q'] ),
		'acceptedAnswer' => array( '@type' => 'Answer', 'text' => wp_kses_post( $faq['a'] ) ),
	);
}
if ( $entities ) {
	geo_print_jsonld( array( '@context' => 'https://schema.org', '@type' => 'FAQPage', 'url' => get_permalink(), 'mainEntity' => $entities ) );
}
} );
wp-content/mu-plugins/geo-schema-plugin-filters.phpBehalten Sie nur den Block für Ihren Stack
<?php
defined( 'ABSPATH' ) || exit;

// Yoast SEO: extend the Organization piece from Settings > Site representation.
add_filter( 'wpseo_schema_organization', function ( $data ) {
$data['description'] = 'One plain sentence on what the company does and for whom.';
$data['email']       = 'hello@example.com';
return $data;
} );

// Rank Math: the publisher entity lives at $data['publisher'].
add_filter( 'rank_math/json_ld', function ( $data, $jsonld ) {
if ( isset( $data['publisher'] ) && is_array( $data['publisher'] ) ) {
	$data['publisher']['description'] = 'One plain sentence on what the company does and for whom.';
}
return $data;
}, 99, 2 );

// WooCommerce core Product markup: add a brand.
add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
$markup['brand'] = array( '@type' => 'Brand', 'name' => get_bloginfo( 'name' ) );
return $markup;
}, 10, 2 );

Wenn Sie praktische Unterstützung wünschen, sehen Sie sich unser Team für WordPress-Entwicklung an.

Shopify für die KI-Suche und ChatGPT optimieren: Schritt für Schritt

Shopify erledigt bereits den Großteil der technischen Arbeit. Stand 7. Oktober 2026 liefert jeder Shop eine automatische sitemap.xml, die sich nicht bearbeiten lässt, eine Standard-robots.txt und JSON-LD aus dem Filter structured_data in den Themes Dawn und Horizon. Seit dem 28. Mai 2026 liefert außerdem jeder Shop Standarddateien unter /agents.md, /llms.txt und /llms-full.txt aus, laut Shopify-Changelog.

Eine Grenze gilt: Nichts hier garantiert, dass ChatGPT, Copilot oder Gemini Ihre Produkte anzeigen. Shopify sagt, die Optimierung der Produktdaten erhöhe die Chancen, nicht, dass sie sie sicherstelle.

SchritteEinen Shopify-Shop für die KI-Suche einrichten

  1. Prüfen, was Ihr Shop bereits ausliefert

    Öffnen Sie diese vier URLs in Ihrem Shop und notieren Sie, was Sie sehen: /robots.txt, /llms.txt, /agents.md und /sitemap.xml.

    Erwarten Sie nicht, dass Ihre robots.txt der eines anderen Shops gleicht. Am 7. Oktober 2026 sahen wir bei neueren Shops einen Standard, dessen Kommentare Agenten auf /agents.md verweisen, und bei anderen Shops weiterhin den älteren Standard mit zusätzlichen Gruppen für Werkzeuge wie Nutch, AhrefsBot und Pinterest. Beide lassen KI-Crawler unter *.

    Die Standard-/llms.txt ist eine Sammlung von Agentenanweisungen (UCP-Discovery, ein MCP-Endpunkt, schreibgeschützte JSON-Endpunkte, Links zu Richtlinien). Sie ist kein kuratierter Index Ihrer Inhalte. Lassen Sie dann eine Produkt-URL durch den Rich-Results-Test von Google laufen.

  2. Agentic Storefronts prüfen

    Gehen Sie im Admin zu Sales channels > Agentic. Laut Shopify-Hilfe ist dies für berechtigte Shops standardmäßig aktiviert, und es setzt die Zustimmung zu den Agentic Storefronts Supplemental Terms voraus. Shopify listet derzeit ChatGPT, Microsoft Copilot, Google AI Mode und Gemini sowie Meta.

    Was die einzelnen Kanäle brauchen:

    • ChatGPT: Es ist ein Discovery-Referrer. Käufer schließen den Checkout in Ihrem eigenen Shop ab. Ihr Shop muss an Kunden in den USA verkaufen, kann aber anderswo ansässig sein.
    • Copilot und Google: Beide bieten für berechtigte US-Shops einen von Shopify betriebenen Checkout im Chat, und beide setzen vollständige Shop-Richtlinien voraus. Google braucht außerdem ein Merchant-Center-Konto, mit Produkten, die über den Kanal Google & YouTube synchronisiert werden.
    • Shopify Catalog: Laut der Anforderungsseite brauchen Sie den Tarif Starter oder höher und einen Shop, der nicht im privaten Modus ist. Jedes Produkt braucht einen Titel, mindestens ein Bild, einen Preis über null und die Veröffentlichung in einem Kanal mit URL. Nicht gelistete oder in der Suche versteckte Produkte qualifizieren sich nicht.

    Nutzen Sie die Suchvorschau auf diesem Bildschirm. Sie bewertet jeden Eintrag nach Vollständigkeit der Beschreibung, Bildabdeckung, Bewertungen, Variantendaten und Richtlinien. Bis das Abschalten des ChatGPT-Katalogzugriffs wirkt, können bis zu 7 Tage vergehen.

  3. Produktdaten korrigieren

    Hier liegt der größte Gewinn. Shopifys Seite Optimizing products for AI platforms behandelt Titel, Beschreibung, Bilder, Typ, Anbieter, Kollektionen, Tags, Barcode, Namen der Variantenoptionen und Richtlinien. Die Punkte 1, 3, 4 und 9 unten sind unsere eigenen Empfehlungen, mit Quellen, wo wir welche haben:

    1. Titel: konkret, mit Produkttyp, wichtigstem Merkmal und Marke. Halten Sie den SEO-Titel bei etwa 60 Zeichen.
    2. Beschreibung: beantworten Sie, was Käufer fragen (Material, Maße, für wen geeignet, Pflege).
    3. Bilder: mehrere, jeweils mit beschreibendem Alt-Text.
    4. Kategorie: unter Products > (Ihr Produkt) > Category aus der Standard Product Taxonomy festlegen, dann die Kategorie-Metafelder ausfüllen.
    5. Typ, Anbieter, Kollektionen und Tags: alle vier ausfüllen.
    6. Barcode: ISBN, UPC oder GTIN bei jeder Variante, die einen hat.
    7. Namen der Variantenoptionen: „Größe“ und „Farbe“, nicht „Option 1“.
    8. Richtlinien: Rückerstattung, Datenschutz, Bedingungen und Versand, vollständig.
    9. Bewertungen: Die Suchvorschau zählt sie. Das Beispiel zu structured_data auf shopify.dev zeigt kein aggregateRating, prüfen Sie also das gerenderte JSON-LD Ihrer Bewertungs-App.
    10. Knowledge-Base-App (optional): Sie prüfen automatisch erzeugte Shop-Fakten und schreiben FAQ-Antworten für KI-Plattformen. Shopify sagt, diese Antworten erschienen nicht in Ihrer Storefront, und die App ändere nicht, wie oft Sie in KI-Ergebnissen erscheinen.
  4. llms.txt mit einem Theme-Template anpassen (optional)

    Gehen Sie zu Online Store > Themes > … > Edit code und fügen Sie im Ordner templates ein Template hinzu. Laut den Dokumenten zu agents.md.liquid deckt agents.md.liquid alle drei URLs ab, llms.txt.liquid nur diese eine. Shopify sucht das pfadspezifische Template, dann agents.md.liquid, dann den eigenen Standard.

    In diesen Templates gibt es nur die Objekte request und agents. Sie können nicht über Kollektionen oder Artikel iterieren, schreiben Sie Ihre Links also von Hand und halten Sie sie aktuell. Lassen Sie die UCP- und MCP-Zeilen über agents.* dynamisch, statt sie fest einzutragen, und geben Sie nie private Daten wie E-Mail-Adressen oder Telefonnummern aus.

    Weiterleitungen, Dateien und App-Proxys funktionieren für diese Datei nicht. URL-Weiterleitungen greifen nur bei defekten URLs, und /llms.txt liefert jetzt 200. Hochgeladene Dateien werden nicht aus dem Stammverzeichnis ausgeliefert. App-Proxys funktionieren nur unter /a, /apps, /community und /tools. Das Template ist der unterstützte Weg.

    Betrachten Sie diese Datei als Entgegenkommen für Agenten, nicht als Ranking-Hebel, denn die Google-Suche nutzt llms.txt nicht.

  5. robots.txt.liquid nur anfassen, wenn Sie den Zugang ändern müssen

    Gehen Sie zu Online Store > Themes > … > Edit code > Add a new template > robots > Create template. Shopify bezeichnet dies als nicht unterstützt, der Support kann dabei nicht helfen, und es warnt, dass ein Fehler Sie den gesamten Traffic kosten kann. Kopieren Sie zuerst Ihre aktuelle /robots.txt an einen sicheren Ort. Das Löschen des Templates stellt den Standard wieder her.

    Behalten Sie die Standardschleife von Shopify bei und ergänzen Sie Klartext-Gruppen darum herum. Der übliche Grund ist der Ausschluss vom Modelltraining, zum Beispiel für GPTBot. OpenAI dokumentiert, dass GPTBot und OAI-SearchBot unabhängig sind, das Blockieren von GPTBot entfernt Sie also nicht aus der ChatGPT-Suche.

    Fügen Sie keine Allow-Gruppen hinzu, um KI-Bots willkommen zu heißen. Siehe den ersten Fallstrick unten.

  6. Product-Markup dem Theme überlassen und den Rest anreichern

    Dawn 16.0.0 und Horizon geben bereits {{ product | structured_data }} und {{ article | structured_data }} aus. Fügen Sie keinen zweiten handgeschriebenen Product-Block hinzu. Zwei Entitäten für ein Produkt widersprechen sich.

    Um Ihre Organization-Daten zu stärken, tragen Sie die Social-Media-Links unter Theme settings > Social media ein und laden Sie ein Logo hoch. Im Header von Dawn speisen diese sameAs, und leere Einstellungen werden als leere Zeichenketten ausgegeben. Für eine sichtbare FAQ-Seite fügen Sie den Abschnitt faq-schema.liquid unten hinzu, mit dem Filter | json und nur für Fragen, die auf der Seite stehen.

  7. Inhalte veröffentlichen, die Käuferfragen beantworten

    Schreiben Sie Kaufratgeber und Vergleiche unter Content > Blog posts und verlinken Sie sie mit Produkten und Kollektionen. Geben Sie jeder Kollektion eine echte Beschreibung mit eigenem SEO-Titel (Shopify empfiehlt bis zu 60 Zeichen) und einer Beschreibung von etwa 160 Zeichen. Legen Sie eine sichtbare FAQ auf einer Seite unter Online Store > Pages an und verlinken Sie sie dann aus Ihrer llms.txt.liquid.

  8. Funktion prüfenPrüfen, ob es funktioniert

    Führen Sie diese Befehle in einem Terminal aus und ersetzen Sie Domain und Produkt-Handle:

    curl -sI https://yourstore.com/llms.txt | head -n 5 sollte 200 zeigen, und ein GET sollte Ihren bearbeiteten Inhalt zeigen.

    curl -s https://yourstore.com/llms.txt | head -n 20 sollte Ihre Überschriften und Links zeigen.

    curl -sI https://yourstore.com/agents.md und curl -sI https://yourstore.com/sitemap.xml sollten beide 200 liefern.

    curl -s https://yourstore.com/robots.txt sollte unter * weiterhin die Disallows für Warenkorb und Checkout enthalten.

    curl -s https://yourstore.com/products/your-handle | grep -oE '"@type" ?: ?"(Product|ProductGroup)"' | sort | uniq -c sollte eine Entität zeigen.

    Prüfen Sie danach die Agentic-Suchvorschau erneut.

Shopify-Code

Ihre templates/llms.txt.liquid. Ersetzen Sie den Platzhaltertext und die Seitenpfade durch Ihre eigenen:

templates/llms.txt.liquidHält die Endpunkte dynamisch
# {{ agents.store_name }}

> Short, factual summary of what the store sells, who it is for, and where it ships.

## Key pages
- [All products]({{ agents.store_url }}/collections/all)
- [Best sellers]({{ agents.store_url }}/collections/best-sellers): our most ordered products
- [Size and fit guide]({{ agents.store_url }}/pages/size-guide)
- [FAQ]({{ agents.store_url }}/pages/faq): shipping, returns, care
- [Buying guides]({{ agents.store_url }}/blogs/guides)

## Policies
- [Refund policy]({{ agents.store_url }}/policies/refund-policy)
- [Shipping policy]({{ agents.store_url }}/policies/shipping-policy)

## For agents
- UCP discovery: {{ agents.ucp_discovery_url }}
- MCP endpoint: {{ agents.mcp_endpoint_url }}
- Sitemap: {{ agents.sitemap_url }}
- Prices are in {{ agents.currency }}.

Die robots.txt.liquid unten behält die Standardschleife von Shopify bei und ergänzt einen Ausschluss vom Training. Laut shopify.dev kommen Klartext-Gruppen für einen neuen Crawler außerhalb der Schleife:

templates/robots.txt.liquidStandardregeln beibehalten, GPTBot vom Training ausgeschlossen
{% for group in robots.default_groups %}
{{- group.user_agent }}
{%- for rule in group.rules -%}
  {{ rule }}
{%- endfor -%}
{%- if group.sitemap != blank -%}
  {{ group.sitemap }}
{%- endif -%}
{% endfor %}

User-agent: GPTBot
Disallow: /

Das Muster des Themes für strukturierte Daten. Es ist bereits in Dawn enthalten, Sie brauchen es also nur, wenn Sie ein eigenes Theme bauen:

sections/main-product.liquid and sections/main-article.liquidMuster von shopify.dev, wie in Dawn 16.0.0 verwendet
<script type="application/ld+json">
{{ product | structured_data }}
</script>

<script type="application/ld+json">
{{ article | structured_data }}
</script>

Der Organization-Block aus sections/header.liquid von Dawn 16.0.0, wörtlich aus Shopify/dawn. Er dient als Referenz, Sie müssen ihn also nicht in ein unverändertes Dawn-Theme einfügen:

sections/header.liquidDawn 16.0.0, wörtlich
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Organization",
  "name": {{ shop.name | json }},
  {% if settings.logo %}
    "logo": {{ settings.logo | image_url: width: 500 | prepend: "https:" | json }},
  {% endif %}
  "sameAs": [
    {{ settings.social_twitter_link | json }},
    {{ settings.social_facebook_link | json }},
    {{ settings.social_pinterest_link | json }},
    {{ settings.social_instagram_link | json }},
    {{ settings.social_tiktok_link | json }},
    {{ settings.social_tumblr_link | json }},
    {{ settings.social_snapchat_link | json }},
    {{ settings.social_youtube_link | json }},
    {{ settings.social_vimeo_link | json }}
  ],
  "url": {{ request.origin | append: page.url | json }}
}
</script>

Ein manueller FAQPage-Abschnitt für eine sichtbare FAQ-Seite. Der Fragetext ist ein Platzhalter: Ersetzen Sie ihn durch die genauen Fragen und Antworten, die auf der Seite stehen.

sections/faq-schema.liquidNur für Fragen und Antworten, die auf der Seite sichtbar sind
{%- comment -%} Add to the FAQ page template only {%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
  {
    "@type": "Question",
    "name": {{ "How long does shipping take?" | json }},
    "acceptedAnswer": {
      "@type": "Answer",
      "text": {{ "Orders ship in 1 to 2 business days. US delivery takes 3 to 5 days." | json }}
    }
  }
]
}
</script>

Google hat das FAQ-Rich-Result entfernt, fügen Sie dies also nicht in der Erwartung von Sternen oder aufklappbaren Snippets hinzu. Das Markup beschreibt die Seite jedem Parser, der es liest, weiterhin korrekt.

React, Next.js und Astro: Schritt für Schritt

Bei eigenen Stacks zählt ein Fehler mehr als jede Datei, die Sie hinzufügen: Die Antwort fehlt im HTML, das der Server sendet. Prüfen Sie das zuerst, in jedem Framework, mit einem einzigen Test. Rufen Sie die Seite so ab, wie es ein Crawler tut, der kein JavaScript ausführt, und suchen Sie nach einem Satz aus dem Haupttext.

Prüfen Sie vor allem anderen, ob die Antwort im Server-HTML steht. Die Studie von Vercel und MERJ ergab, dass mehrere große KI-Crawler kein JavaScript rendern, und Vercels Folgeleitfaden von 2026 stellte fest, dass ein Client, der nur abruft, keine Antwort erhielt, die ausschließlich über JavaScript existierte. Daten und Details stehen in der Grundlage zum Server-HTML. Google sagt, serverseitiges Rendering oder Pre-Rendering sei weiterhin eine sehr gute Idee, und nennt Dynamic Rendering einen Workaround, keine Dauerlösung.

check-ai-crawl.shFür jede Seite und jedes Framework einsetzbar
#!/usr/bin/env bash
# Usage: ./check-ai-crawl.sh https://www.example.com/your-page "a sentence from the page"
# Fetches the page the way a crawler that does not run JavaScript sees it.
# This only tests user-agent rules. Firewalls that verify crawler IPs will treat
# your request as an impostor, so confirm with server logs as well.
URL="$1"; PHRASE="$2"
UA='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot'
HTML=$(curl -sL -A "$UA" "$URL")
HEAD=${HTML%%</head>*}
echo "Status:        $(curl -s -o /dev/null -w '%{http_code}' -A "$UA" "$URL")"
echo "Redirects to:  $(curl -s -o /dev/null -w '%{redirect_url}' -A "$UA" "$URL")"
echo "Title in head: $(grep -o '<title>[^<]*' <<<"$HEAD" | sed 's/<title>//' | head -1)"
echo "Canonical:     $(grep -o '<link rel="canonical"[^>]*' <<<"$HEAD" | grep -o 'href="[^"]*' | sed 's/href="//' | head -1)"
echo "JSON-LD blocks: $(grep -o 'application/ld+json' <<<"$HTML" | wc -l | tr -d ' ')"
if grep -qF "$PHRASE" <<<"$HTML"; then echo "Phrase in raw HTML: YES"; else echo "Phrase in raw HTML: NO (content likely needs JavaScript)"; fi

Wir haben es mit zwei Builds desselben Artikels ausgeführt. Die reine Client-App mit Vite lieferte ein leeres div id="root", den Titel „My App“ und kein JSON-LD. Der Text steckte in einem 220-KB-JavaScript-Bundle. Derselbe Inhalt, mit React Router vorab gerendert, lieferte den echten Titel, das Canonical, das JSON-LD und die Phrase.

Links: rohes HTML einer reinen Client-React-App mit leerem Root-Div. Rechts: rohes HTML derselben Seite, vorab gerendert, mit Titel, Canonical, JSON-LD und Artikeltext.

In voller Größe öffnen (neuer Tab)

Formatierte Ausschnitte des rohen HTML aus zwei unserer Test-Builds: reiner Client links, vorab gerendert rechts.

React-SEO für KI-Crawler: das HTML vorab rendern

Eine clientseitig gerenderte React-App kann in Google ranken und für andere Crawler trotzdem leer sein, weil Googlebot JavaScript rendert. Wer nur in Google testet, übersieht das Problem.

SchritteEine React-SPA ohne JavaScript lesbar machen

  1. Mit dem Seitenquelltext diagnostizieren

    Öffnen Sie Ihre wichtige Seite, wählen Sie „Seitenquelltext anzeigen“ (nicht DevTools) und suchen Sie Ihre Überschrift. Ein leeres div id="root" bedeutet, dass Crawler ohne Rendering nichts erhalten. Führen Sie dann das obige check-ai-crawl.sh aus und suchen Sie nach „Phrase in raw HTML: YES“.

  2. Eine Lösung wählen, in dieser Reihenfolge

    1. React Router im Framework-Modus mit prerender und ssr: false. Die Dokumentation sagt, Pre-Rendering sei nützlich für SEO, besonders bei Deployments ohne serverseitiges Rendering.
    2. Auf Next.js umsteigen, siehe den nächsten Abschnitt.
    3. Für eine inhaltsstarke Marketing-Website: Astro mit React-Islands.
    4. Ein eigenes Pre-Rendering mit react-dom/static. Das funktioniert, ist aber low-level, und Frameworks rufen es normalerweise für Sie auf.

    Verzichten Sie auf Dynamic Rendering. Create React App ist seit dem 14. Februar 2025 für neue Apps veraltet. Prüfen Sie die React-Router-Dokumentation für Ihre installierte Version, denn die Prerender-Optionen sind je Version dokumentiert.

  3. Jede Inhalts-URL vorab rendern, Slugs eingeschlossen

    prerender: true überspringt dynamische Pfade wie /blog/:slug. Nutzen Sie die Funktionsform und ergänzen Sie die Slugs selbst.

    react-router.config.ts
    import type { Config } from '@react-router/dev/config'
    import { getPostSlugs } from './app/lib/posts'
    
    export default {
    // No runtime server: every listed URL becomes a static HTML file at build time.
    ssr: false,
    async prerender({ getStaticPaths }) {
      const slugs = await getPostSlugs()
      return [...getStaticPaths(), ...slugs.map((s) => '/blog/' + s)]
    },
    } satisfies Config
  4. Head-Tags in die Route-Komponente setzen

    React Router empfiehlt die eingebauten Elemente title, meta und link statt des Exports meta des Route-Moduls. React 19 hebt sie in den Dokument-Head. In unserem Build landeten sie im head der vorab gerenderten Datei. Fügen Sie JSON-LD in derselben Komponente hinzu und maskieren Sie <, denn JSON.stringify lässt </script> unverändert.

    app/routes/blog-post.tsx
    import { data, useLoaderData } from 'react-router'
    import { getPost } from '../lib/posts'
    
    const SITE_URL = 'https://www.example.com'
    
    // With prerendering, this loader runs at build time, so the post is in the HTML file.
    export async function loader({ params }: { params: { slug?: string } }) {
    const post = await getPost(params.slug ?? '')
    if (!post) throw data('Not found', { status: 404 })
    return { post }
    }
    
    export default function BlogPost() {
    const { post } = useLoaderData<typeof loader>()
    const url = SITE_URL + '/blog/' + post.slug
    const article = {
      '@context': 'https://schema.org',
      '@type': 'Article',
      headline: post.title,
      description: post.description,
      datePublished: post.publishedAt,
      mainEntityOfPage: url,
    }
    return (
      <article>
        <title>{post.title}</title>
        <meta name="description" content={post.description} />
        <link rel="canonical" href={url} />
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(article).replace(/</g, '\u003c') }}
        />
        <h1>{post.title}</h1>
        <p>{post.body}</p>
      </article>
    )
    }
  5. Mit einem schmalen Fallback ausliefern

    Liefern Sie build/client aus. Schreiben Sie nur Pfade, die Sie nicht vorab gerendert haben, auf __spa-fallback.html um. Diese Umschreibung antwortet bei jeder unbekannten URL mit 200, halten Sie Ihre Sitemap also exakt. In seinen Daten von 2024 sah Vercel, dass der Crawler von ChatGPT einen großen Teil seiner Abrufe auf 404-Seiten verbrachte, defekte oder verirrte URLs kosten Sie also etwas.

  6. Funktion prüfenPrüfen, ob es funktioniert

    Das Build-Log sollte eine Zeile wie Prerender (html): /blog/hello-geo -> build/client/blog/hello-geo/index.html ausgeben. Öffnen Sie diese Datei, prüfen Sie, dass Titel, Canonical und Artikeltext darin stehen, und führen Sie dann check-ai-crawl.sh gegen die bereitgestellte URL aus. Sie wollen Phrase in raw HTML: YES sehen.

Next.js-SEO und llms.txt (App Router)

Next.js kann vollständiges HTML senden, aber man baut leicht eine Seite, die es nicht tut. Diese Schritte wurden mit Next.js 16.4.0 gebaut und getestet (die Dokumentation gilt für dieselbe Version).

SchritteAntworttext und Metadaten in der ersten Antwort ausliefern

  1. Antworttext in Server Components halten

    Seiten und Layouts sind standardmäßig Server Components. Client Components werden ebenfalls vorab gerendert, aber Daten, die in useEffect geladen werden, stehen nicht in diesem HTML. In unserem Test mit 16.4.0 lieferte eine 'use client'-Seite, die ihren Text in einem Effect lud, HTML mit nur „Loading…“. Nutzen Sie Client Components für Interaktivität, nicht für die Antwort.

  2. Root-Metadaten mit metadataBase setzen

    Exportieren Sie in app/layout.tsx metadata mit metadataBase: new URL(SITE_URL), einem Titel-Template, alternates.canonical und openGraph. Metadata-Exporte funktionieren nur in Server Components.

  3. JSON-LD als natives Script rendern, maskiert

    Der JSON-LD-Leitfaden von Next.js sagt, man solle ein einfaches script-Tag statt next/script nutzen und < durch sein Unicode-Escape ersetzen, weil JSON.stringify nicht bereinigt. Legen Sie das in einen einzigen Helfer.

    lib/json-ld.ts
    // JSON.stringify does not escape "<", so "</script>" inside a value would end the tag early.
    export function jsonLd(data: object): string {
    return JSON.stringify(data).replace(/</g, '\u003c')
    }
  4. robots.ts mit wiederholten Disallows schreiben

    app/robots.ts akzeptiert für userAgent ein Array. Ein Crawler befolgt nur die am genauesten passende Gruppe, wiederholen Sie also die Disallows. Behandeln Sie Trainings-Crawler als eigene Entscheidung, getrennt von Suchbots.

    app/robots.ts
    import type { MetadataRoute } from 'next'
    import { SITE_URL } from '@/lib/site'
    
    export default function robots(): MetadataRoute.Robots {
    return {
      rules: [
        { userAgent: '*', allow: '/', disallow: ['/api/', '/account/'] },
        {
          userAgent: [
            'OAI-SearchBot', 'ChatGPT-User', 'Claude-SearchBot', 'Claude-User',
            'PerplexityBot', 'Perplexity-User', 'GPTBot', 'ClaudeBot', 'Google-Extended',
          ],
          allow: '/',
          disallow: ['/api/', '/account/'],
        },
      ],
      sitemap: SITE_URL + '/sitemap.xml',
    }
    }
  5. sitemap.ts mit echtem lastModified schreiben

    Google ignoriert priority und changefreq und nutzt lastmod nur, wenn es durchgehend korrekt ist. Nehmen Sie das Datum aus dem Inhalt, nie aus new Date().

    app/sitemap.ts
    import type { MetadataRoute } from 'next'
    import { getPosts } from '@/lib/posts'
    import { SITE_URL } from '@/lib/site'
    
    export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
    const posts = await getPosts()
    return [
      { url: SITE_URL, lastModified: '2026-10-01' },
      ...posts.map((p) => ({
        url: SITE_URL + '/blog/' + p.slug,
        lastModified: p.updatedAt ?? p.publishedAt,
      })),
    ]
    }
  6. llms.txt über einen Route Handler ausliefern

    GET-Route Handler werden standardmäßig nicht gecacht, ergänzen Sie also force-static. Wenn Sie cacheComponents aktivieren, löschen Sie diese Zeile: Die Option entfällt in diesem Modus, und ein Handler, der keine Anfragedaten liest, wird vorab gerendert. Bauen Sie die Liste mit derselben Beitragsfunktion, die auch die Seiten nutzen.

    app/llms.txt/route.ts
    import { getPosts } from '@/lib/posts'
    import { SITE_NAME, SITE_URL } from '@/lib/site'
    
    // Delete this line if cacheComponents is enabled.
    export const dynamic = 'force-static'
    
    export async function GET() {
    const posts = await getPosts()
    const body = [
      '# ' + SITE_NAME,
      '',
      '> One or two sentences: what you do, for whom, and where.',
      '',
      '## Guides',
      ...posts.map((p) => '- [' + p.title + '](' + SITE_URL + '/blog/' + p.slug + '): ' + p.description),
      '',
    ].join('\n')
    
    return new Response(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } })
    }

    Es gilt derselbe Vorbehalt wie zuvor: Diese Datei ergänzt das Server-HTML, sie ersetzt es nicht.

  7. Routen zur Anfragezeit behandeln: die Falle htmlLimitedBots

    Routen, die Cookies, Header oder ungecachte Daten lesen, werden zur Anfragezeit gerendert. Seit Next.js 15.2 wird die Ausgabe ihrer generateMetadata für jeden Bot, der nicht auf der Liste der HTML-limitierten Bots steht, in den body gestreamt. Wir haben die Standardliste im Quellcode gelesen, und sie enthält keine KI-Crawler. In unserem Test mit 16.4.0 erhielten GPTBot und ClaudeBot den title standardmäßig im body und nach unserer Ergänzung im head.

    Das Setzen der Option ersetzt die Standardliste, kopieren Sie also den Standard und hängen Sie die KI-Bots an. Prüfen Sie die Kopie bei jedem Next.js-Upgrade neu. Vollständig vorab gerenderte Seiten sind nicht betroffen. Die Next.js-Dokumentation sagt, Streaming schade dem SEO nicht; diese Aussage betrifft Google, das JavaScript ausführt, übertragen Sie sie also nicht auf KI-Crawler.

    next.config.ts
    import type { NextConfig } from 'next'
    
    // Copied from the Next.js default (canary html-bots.ts, October 2026). Re-check on upgrade.
    const NEXT_DEFAULT = String.raw`[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`
    const AI_CRAWLERS = 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User'
    
    const nextConfig: NextConfig = {
    htmlLimitedBots: new RegExp(NEXT_DEFAULT + '|' + AI_CRAWLERS, 'i'),
    }
    
    export default nextConfig
  8. Entscheiden, ob Sie einen statischen Export brauchen

    Mit output: 'export' schreibt Next.js HTML nach out/, und Route Handler müssen force-static sein, um vorab gerendert zu werden. Das passt zu einer Visitenkarten-Website auf einfachem Speicher.

  9. Funktion prüfenPrüfen, ob es funktioniert

    In der Routentabelle von next build sollten Ihre Inhaltsrouten als statisch oder SSG erscheinen, nicht als dynamisch. Rufen Sie dann /robots.txt, /sitemap.xml und /llms.txt ab (die letzte sollte text/plain; charset=utf-8 liefern) und führen Sie check-ai-crawl.sh für einen Beitrag aus. Ein unbekannter Slug sollte 404 liefern.

Build-Routentabelle von Next.js aus einer Test-App, mit der Blogroute als statisch markiert und der llms.txt-Route als vorab gerendert

In voller Größe öffnen (neuer Tab)

Die Build-Routentabelle unserer Next.js-16.4.0-Test-App.

TS1 KB

robots, Sitemap und llms.txt

robots.ts mit wiederholten Disallows. Die Routendateien für Sitemap und llms.txt liegen im selben Ordner.

Next.js

HerunterladenIm Browser ansehen

Astro-SEO und llms.txt

Astro ist von den dreien am einfachsten, denn Seiten und Endpunkte werden standardmäßig beim Build vorab gerendert. Der Großteil der Arbeit besteht darin, Fehler zu vermeiden.

SchritteKI-lesbare Dateien zu einer Astro-Website hinzufügen

  1. Antworttext aus client:only heraushalten

    Komponenten ohne client:*-Direktive werden zu einfachem HTML gerendert. client:only überspringt das serverseitige Rendering vollständig, setzen Sie darin also nie Antworttext ein.

  2. Eine JSON-LD-Komponente hinzufügen, die maskiert

    set:html wird von Astro nicht maskiert, und JSON.stringify lässt </script> unangetastet. In unserem Test mit Astro 7.0.5 beendete eine Beschreibung mit </script> den Block vorzeitig, und er ließ sich nicht mehr als JSON parsen. Das Maskieren von < behob es. Astro verarbeitet kein Script-Tag mit anderen Attributen als src, der Block wird also unverändert ausgegeben.

    src/components/JsonLd.astro
    ---
    interface Props {
    data: Record<string, unknown>;
    }
    const { data } = Astro.props;
    const json = JSON.stringify(data).replace(/</g, '\u003c');
    ---
    <script type="application/ld+json" set:html={json} />
  3. llms.txt aus der Content Collection erzeugen

    Ein statischer Datei-Endpunkt unter src/pages/llms.txt.ts baut /llms.txt beim Build. Das Lesen aus getCollection() sorgt dafür, dass sie nicht von den veröffentlichten Seiten abweichen kann.

    src/pages/llms.txt.ts
    import type { APIRoute } from 'astro';
    import { getCollection } from 'astro:content';
    
    export const GET: APIRoute = async ({ site }) => {
    const url = (path: string) => new URL(path, site).href;
    const posts = (await getCollection('blog', ({ data }) => !data.draft)).sort(
      (a, b) => b.data.publishDate.getTime() - a.data.publishDate.getTime(),
    );
    
    const body = [
      '# Example Co',
      '',
      '> One or two sentences: what you do, for whom, and where.',
      '',
      '## Guides',
      ...posts.map((p) => '- [' + p.data.title + '](' + url('/blog/' + p.id) + '): ' + p.data.description),
      '',
    ].join('\n');
    
    return new Response(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
    };
  4. Eine Quelle für die robots.txt wählen

    Nutzen Sie public/robots.txt oder einen Endpunkt, nicht beides. Der Endpunkt kann site wiederverwenden und die Regeln in der KI-Gruppe wiederholen, wie es die Dokumentation zur Sitemap-Integration für Sitemaps zeigt.

    src/pages/robots.txt.tsDies ODER public/robots.txt verwenden
    import type { APIRoute } from 'astro';
    
    const AI_AGENTS = [
    'OAI-SearchBot', 'ChatGPT-User', 'Claude-SearchBot', 'Claude-User',
    'PerplexityBot', 'Perplexity-User', 'GPTBot', 'ClaudeBot', 'Google-Extended',
    ];
    
    export const GET: APIRoute = ({ site }) => {
    const sitemapURL = new URL('sitemap-index.xml', site);
    const rules = 'Allow: /\nDisallow: /api/';
    return new Response(
      [
        'User-agent: *\n' + rules,
        // A crawler that matches a named group ignores the * group, so repeat the rules.
        AI_AGENTS.map((ua) => 'User-agent: ' + ua).join('\n') + '\n' + rules,
        'Sitemap: ' + sitemapURL.href,
        '',
      ].join('\n\n'),
    );
    };
  5. Sitemap-lastmod aus dem Frontmatter setzen, für .md und .mdx

    @astrojs/sitemap braucht die Option site und kann dynamische SSR-Routen nicht auflisten. Nutzen Sie serialize(), um lastmod aus jedem Beitrag zu setzen. Erfassen Sie beide Endungen, sonst verliert ein Beitrag beim Umstellen auf MDX stillschweigend sein Datum. Das haben wir auf unserer eigenen Website festgestellt.

    astro.config.mjs
    import { defineConfig } from 'astro/config';
    import sitemap from '@astrojs/sitemap';
    import { readdirSync, readFileSync } from 'node:fs';
    
    const postDates = Object.fromEntries(
    readdirSync('./src/content/blog')
      .filter((f) => /\.mdx?$/.test(f))
      .map((f) => {
        const fm = readFileSync('./src/content/blog/' + f, 'utf8').split('---')[1] ?? '';
        const date = fm.match(/^updatedDate:\s*(\S+)/m)?.[1] ?? fm.match(/^publishDate:\s*(\S+)/m)?.[1];
        return ['/blog/' + f.replace(/\.mdx?$/, ''), date];
      }),
    );
    
    export default defineConfig({
    site: 'https://www.example.com',
    integrations: [
      sitemap({
        serialize(item) {
          const path = new URL(item.url).pathname.replace(/\/$/, '');
          const date = postDates[path];
          if (date) item.lastmod = new Date(date).toISOString();
          return item;
        },
      }),
    ],
    });
  6. Funktion prüfenPrüfen, ob es funktioniert

    Führen Sie npx astro build aus. Öffnen Sie dist/llms.txt, dist/robots.txt, dist/sitemap-0.xml und eine dist/blog/your-post/index.html. Führen Sie nach dem Deployment check-ai-crawl.sh für die Live-URL aus und suchen Sie nach „Phrase in raw HTML: YES“.

maxenius.com als Live-Beispiel für Astro

Diese Website ist so gebaut, wie es die obigen Schritte beschreiben, und Sie können sie prüfen.

  • src/lib/llms.ts, src/pages/llms.txt.ts und src/pages/llms-full.txt.ts bauen /llms.txt und /llms-full.txt aus denselben Daten wie die Seiten.
  • public/robots.txt wiederholt ihre Regeln innerhalb der benannten Gruppe der KI-Crawler. Das ist eine Linie für maximale Sichtbarkeit: Sie heißt jeden aufgeführten Crawler willkommen, auch Trainings-Crawler. Wählen Sie Ihre eigene Linie bewusst, wie in der Grundlage zur robots.txt beschrieben.
  • Seo.astro und src/lib/seo.ts geben ein Robots-Meta-Tag mit max-snippet:-1, ein link rel="alternate" type="text/plain" auf /llms.txt und einen JSON-LD-Graphen aus Organization, WebSite, WebPage, Article, FAQPage und BreadcrumbList aus.
  • astro.config.mjs nutzt statische Ausgabe und nimmt das Sitemap-lastmod aus dem Frontmatter jedes Beitrags.

Was immer Sie wählen: Server-HTML ist die Grundlage. Die Dateien und das Markup in diesem Abschnitt sind Ergänzungen obendrauf.

Messen und testen

Sie brauchen fünf Quellen, weil keine allein alles abdeckt: die Search Console für Google, GA4 oder Plausible für Klicks, die Bing Webmaster Tools für Copilot-Zitierungen, Server-Logs für Bots und Prompt-Tests dafür, was die Antworten sagen. Jede beantwortet eine andere Frage und hat blinde Flecken, lesen Sie sie also nebeneinander.

Wo welche Quelle berichtet

VergleichWas die einzelnen Messquellen zeigen und was nicht
Quelle Was sie zeigt Was sie nicht zeigt
Search Console, Leistung Klicks und Impressionen aus KI-Übersichten und KI-Modus, gezählt innerhalb des Suchtyps „Web“. Ein Klick auf einen externen Link in einer der beiden Funktionen zählt. Alle Links in einer KI-Übersicht teilen sich eine Position, sodass eine zitierte Seite eine gute Position und eine winzige CTR zeigen kann. Eine Folgefrage im KI-Modus zählt als neue Suchanfrage. Experimente aus Search Labs sind ausgenommen. Googles Seite zu KI-Funktionen bestätigt den Typ „Web“.
Search-Console-Bericht Generative AI Impressionen in KI-Übersichten und KI-Modus nach Seite, Land, Gerät und Datum. Angekündigt am 3. Juni 2026; für alle Websites seit dem 31. August 2026. Keine Klicks, CTR, Position oder Suchanfragen. Er erscheint womöglich nicht, wenn Ihre Website zu wenige KI-Impressionen hat. Er ist eine Teilmenge der Web-Daten, addieren Sie ihn also nicht zum Leistungsbericht.
AI Performance in den Bing Webmaster Tools Öffentliche Vorschau seit dem 10. Februar 2026: Total Citations, Average Cited Pages, Grounding-Anfragen (Stichprobe) und Zitieraktivität auf Seitenebene. Seit dem 16. Juni 2026: Intents, Topics, Citation Share und Compare, in der Vorschau. Eine Zitierung ist kein Klick und kein Besuch. Die Daten sind Stichproben, und Grounding-Anfragen sind gruppierte Formulierungen, keine echten Prompts. Citation Share macht Wettbewerber-Domains nicht sichtbar.
GA4 und Plausible Besuche mit Referrer oder UTM. GA4 hat seit dem 13. Mai 2026 einen Standardkanal „AI Assistant“. Plausible hat einen Kanal „AI Assistants“. Der GA4-Kanal schließt KI-Übersichten und KI-Modus aus, die als Organic Search zählen. OpenAI dokumentiert nur utm_source=chatgpt.com, bei anderen Assistenten sind Sie also auf Referrer angewiesen.
Server-Logs Jede Bot-Anfrage, einschließlich nutzerausgelöster Abrufe, die nie JavaScript ausführen. Wer die Antwort gelesen oder geklickt hat. Erfordert IP-Prüfungen, weil User-Agents gefälscht werden können.
Prompt-Tests Was jede Engine heute tatsächlich über Sie sagt. Einen stabilen Rang. Google sagt, KI-Übersichten und KI-Modus könnten unterschiedliche Modelle nutzen und ihre Links variieren, einzelne Durchläufe führen also in die Irre.

Die Messung Schritt für Schritt einrichten

SchritteSichtbarkeit in der KI-Suche messen

  1. Impressionen von KI-Funktionen trennen

    Beginnen Sie hier bei jeder Seite mit vielen Impressionen und fast ohne Klicks.

    1. Öffnen Sie in der Search Console „Leistung“, filtern Sie Seite auf Ihre URL und notieren Sie Impressionen, Klicks, CTR und durchschnittliche Position.
    2. Öffnen Sie den Bericht „Generative AI performance“, gehen Sie zum Tab „Seiten“ und suchen Sie dieselbe URL.
    3. Vergleichen Sie die beiden Impressionszahlen. Der KI-Bericht ist eine Teilmenge von „Web“, addieren Sie sie also nie. Wenn KI-Funktionen den Großteil der Impressionen ausmachen, ist eine gute Position bei niedriger CTR zu erwarten, denn alle Links in einer KI-Übersicht teilen sich eine Position.
    4. Fehlt der Bericht, hat die Website laut Google noch nicht genug KI-Impressionen. Das ist kein Fehler.
    5. Öffnen Sie Einstellungen > Search generative AI und prüfen Sie, dass die Property nicht auf „Exclude“ steht und „Exclude“ nicht von einer übergeordneten Property erbt. Siehe Search generative AI control.
    6. Fügen Sie an dem Tag, an dem Sie Änderungen ausliefern, eine Anmerkung hinzu: Rechtsklick auf das Leistungsdiagramm, bis zu 120 Zeichen (Hilfe zu Anmerkungen).
  2. Den integrierten Kanal „AI Assistant“ nutzen

    Gehen Sie in GA4 zu Reports > Acquisition > Traffic acquisition. Setzen Sie die primäre Dimension auf „Session default channel group“ und suchen Sie die Zeile „AI Assistant“. Fügen Sie „Session source“ als sekundäre Dimension hinzu, um zu sehen, welcher Assistent jede Sitzung geschickt hat. Klicks aus KI-Übersichten und KI-Modus erscheinen hier nicht. Öffnen Sie in Plausible Sources > Channels > AI Assistants.

  3. Eine eigene Kanalgruppe hinzufügen

    Gehen Sie zu Admin > Data display > Channel groups, legen Sie eine Gruppe an und fügen Sie einen Kanal hinzu, bei dem die Quelle dem folgenden regulären Ausdruck entspricht. Ziehen Sie ihn über „Referral“, denn Traffic wird dem ersten Kanal zugeordnet, auf den er passt. Standard-Properties erlauben 2 eigene Gruppen, und eigene Gruppen sind nicht im BigQuery-Export enthalten.

    Googles eigener Beispielausdruck in diesem Hilfeartikel traf in unserem Test zu viel: Er erfasste auch help.openai.com, github.com/copilot, chatgptlist.org und „shanghai“. Nutzen Sie stattdessen diesen engeren.

    ga4-ai-sources.regex111 Zeichen, verankert
    ^(.*\.)?(chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|copilot\.microsoft\.com|gemini\.google\.com)$

    Er akzeptiert chatgpt.com, chat.openai.com, www.perplexity.ai, claude.ai, copilot.microsoft.com und gemini.google.com. Er lehnt google, mail.google.com, openai.com, help.openai.com, notchatgpt.com, perplexity.ai.evil.com und bing.com ab. Er deckt den www-Host und den alten ChatGPT-Host ab, weil chat.openai.com auf chatgpt.com und perplexity.ai auf www.perplexity.ai weiterleitet. Reguläre Ausdrücke in GA4 sind standardmäßig Vollabgleich und unterscheiden Groß- und Kleinschreibung, nutzen RE2, und Berichtsfilter sind auf 250 Zeichen begrenzt. Die Anker halten dieses Muster in beiden Abgleichmodi korrekt. Ergänzen Sie weitere Assistenten erst, wenn sie in Ihrem eigenen Bericht zur Session source auftauchen.

  4. Auf verlorene UTMs achten

    Suchen Sie in „Session source / medium“ nach chatgpt.com-Zeilen, die unter „Unassigned“ oder „Referral“ landen, denn Google dokumentiert nicht, wie GA4 ein utm_source ohne Medium gegen die Regel „AI Assistant“ auswertet. Eine Weiterleitung, die den Query-String verwirft, etwa eine Regel für Schrägstrich am Ende, www oder http auf https, verwirft auch die UTM. Testen Sie eine mit Parametern versehene URL durch jede Weiterleitung, die Sie betreiben.

  5. Eine Exploration erstellen (optional)

    Überspringen Sie das, wenn der integrierte Kanalbericht Ihre Frage beantwortet. Starten Sie in „Explore“ eine leere Exploration. Importieren Sie die Dimensionen „Session source“, „Session source / medium“, „Landing page + query string“ und „Session default channel group“ sowie die Messwerte „Sessions“, „Engaged sessions“ und „Key events“. Legen Sie „Session source“ und dann „Landing page + query string“ in die Zeilen und filtern Sie „Session source“ mit demselben regulären Ausdruck.

  6. Copilot- und Bing-Zitierungen lesen

    1. Verifizieren Sie die Website in den Bing Webmaster Tools und öffnen Sie den Bericht „AI Performance“.
    2. Lesen Sie Total Citations, Average Cited Pages, Grounding-Anfragen und die Seitenliste. Klicken Sie eine Grounding-Anfrage an, um ihre zitierten Seiten zu sehen, oder eine Seite, um ihre Grounding-Anfragen zu sehen.
    3. Nutzen Sie „Compare“, um den Zeitraum nach Ihren Änderungen darüberzulegen. Intents, Topics und Citation Share sind Vorschaufunktionen.
    4. Exportieren Sie monatlich als CSV oder Excel. Lesen Sie die FAQ zu den Regeln für Stichproben und Aktualisierung.
    5. Übermitteln Sie geänderte URLs über IndexNow. Bing empfiehlt es, damit KI-Antworten die aktuelle Version der Seite nutzen.
  7. KI-Bot-Treffer in den Server-Logs zählen

    Suchen Sie nach diesen User-Agents. Suche: OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot, bingbot. Training: GPTBot, ClaudeBot. Nutzerausgelöst: ChatGPT-User, Claude-User, Perplexity-User. Google-Extended erscheint nie, weil es ein robots.txt-Token ohne eigenen User-Agent ist.

    Nutzerausgelöste Treffer sind am wichtigsten. Jeder bedeutet, dass eine echte Unterhaltung Ihre Seite gelesen hat, und weil diese Abrufe kein JavaScript ausführen, sehen GA4 und Plausible sie nie.

    Eine schnelle Zählung aus einem Log im Combined-Format. Diese awk-Variante zählt jede Zeile einmal, wo ein einfaches grep bingbot pro Zeile doppelt zählte:

    terminalZählt jede Zeile einmal
    awk 'match($0, /OAI-SearchBot|ChatGPT-User|GPTBot|Claude-SearchBot|Claude-User|ClaudeBot|PerplexityBot|Perplexity-User|Googlebot|bingbot/) { print substr($0, RSTART, RLENGTH), $7 }' access.log | sort | uniq -c | sort -rn

    User-Agents lassen sich leicht fälschen, prüfen Sie also die IPs. Unser ai_bot_report.py (Python 3, nur Standardbibliothek, im Paket) zählt Treffer pro Tag, Bot, Status und Pfad und prüft jede IP gegen die veröffentlichte Liste des Betreibers für OpenAI, Anthropic, Perplexity, Google und Bing. Eine Zeile mit ip_verified=NO ist ein gefälschter User-Agent. Es markiert einen falschen GPTBot von einer nicht gelisteten IP.

    terminal
    python3 ai_bot_report.py access.log > ai-bots.csv
    zcat access.log.*.gz | python3 ai_bot_report.py - > ai-bots.csv

    Ohne das Skript nutzen Sie die doppelte Abfrage: Der Reverse-DNS-Eintrag der IP muss einen Google-Hostnamen liefern (googlebot.com, google.com oder googleusercontent.com) oder bei Bingbot einen, der auf search.msn.com endet, und eine Vorwärtsabfrage dieses Namens muss dieselbe IP liefern.

    Bei Vercel gehen Sie zu Firewall > Rules > Bot Management und setzen das AI-Bots-Regelset auf „Log“, nicht auf „Deny“ (WAF Managed Rulesets). Nutzen Sie dann Firewall > Traffic und gruppieren Sie nach User Agents und Request Paths (Observability). Runtime Logs zeigen nur statische Anfragen, die aus dem Cache bedient werden. Ein vollständiges Log erfordert Drains, die in den Tarifen Pro und Enterprise verfügbar sind, mit proxy.userAgent in jedem Datensatz:

    vercel-drain-bots.shBenötigt jq
    jq -r 'select(.proxy) | [(.proxy.timestamp/1000|todate), .proxy.clientIp, .proxy.path, (.proxy.statusCode|tostring), (.proxy.userAgent|join(" "))] | @tsv' drain.ndjson \
    | awk -F'\t' 'match($5, /OAI-SearchBot|ChatGPT-User|GPTBot|Claude-SearchBot|Claude-User|ClaudeBot|PerplexityBot|Perplexity-User|Googlebot|bingbot/) { print substr($5, RSTART, RLENGTH) "\t" $3 }' \
    | sort | uniq -c | sort -rn

    Bei Cloudflare öffnen Sie AI Crawl Control. Liegen die Treffer von KI-Crawlern nahe null, prüfen Sie, ob die Einstellung der verwalteten robots.txt Disallow-Regeln für GPTBot, ClaudeBot oder Google-Extended voranstellt.

  8. Einen wiederholbaren Prompt-Test durchführen

    Kein offizielles Werkzeug meldet Zitierungen von ChatGPT, Claude oder Perplexity, testen Sie also von Hand mit einem festen Protokoll.

    1. Schreiben Sie 20 bis 40 Prompts aus den Bereichen Anleitung, Vergleich, plattformspezifische Fragen und zwei oder drei Markenfragen. Geben Sie jedem eine dauerhafte ID. Um die Formulierung zu ändern, geben Sie die ID auf und vergeben eine neue.
    2. Engines: ChatGPT mit eingeschalteter Suche, Google AI Mode, Google AI Overviews (eine normale Suche), Gemini, Perplexity, Microsoft Copilot, Claude mit eingeschalteter Websuche.
    3. Halten Sie die Einstellungen konstant: Land, Sprache, angemeldet oder abgemeldet. Nutzen Sie in ChatGPT einen temporären Chat mit der Einstellung „Unpersonalized“, der Memory und benutzerdefinierte Anweisungen überspringt. „Personalized“ kann weiterhin vorhandene Memories nutzen. Verwenden Sie anderswo ein frisches Profil oder eine abgemeldete Sitzung und notieren Sie den Modus oder das Modell.
    4. Führen Sie jeden Prompt je Engine 3-mal aus. Antworten schwanken zwischen den Durchläufen.
    5. Rhythmus: eine monatliche Baseline sowie ein erneuter Durchlauf 2 bis 4 Wochen nach einer größeren Inhaltsänderung.
    6. Protokollieren Sie jeden Durchlauf in ai-prompt-tracker.csv (26 Spalten, zwei deutlich gekennzeichnete Beispielzeilen). Berechnen Sie Erwähnungsrate, Zitierrate und Zitieranteil (Ihre zitierten URLs geteilt durch alle zitierten URLs, dieselbe Idee wie die Kennzahl von Bing).
    7. Bewahren Sie Screenshots als private Belege auf. Veröffentlichen Sie keine Oberflächen von Dritten.
    Google Sheets or ExcelDaten auf einem Blatt namens runs
    Mention rate   =COUNTIF(runs!N2:N1000,"yes")/COUNTA(runs!C2:C1000)
    Citation rate  =COUNTIF(runs!P2:P1000,"yes")/COUNTA(runs!C2:C1000)
    Citation share =SUM(runs!R2:R1000)/SUM(runs!S2:S1000)
  9. Funktion prüfenPrüfen, ob es funktioniert

    Bestätigen Sie vier Dinge:

    • Sie haben für die URL einen Vorher-Wert (Gesamtimpressionen und Impressionen in KI-Funktionen) und eine Anmerkung, die auf den Tag der Auslieferung datiert ist.
    • Der GA4-Filter liefert nur Hosts von Assistenten.
    • Die Bot-Ausgabe zeigt Ihre eigenen Anfragen. Erzeugen Sie eine mit curl -A 'OAI-SearchBot' -s -o /dev/null https://yourdomain.com/robots.txt und suchen Sie dann eine Zeile mit diesem Bot-Namen und Status 200.
    • Der Prompt-Tracker hat für jede Prompt-ID und jede Engine eine Baseline-Zeile.

Wenn Sie die Messung lieber eingerichtet und ausgewertet bekommen möchten, sehen Sie sich unsere KI-SEO-Leistungen an.

Tools von Drittanbietern

Ahrefs Brand Radar verfolgt Erwähnungen und Zitierungen in KI-Übersichten, KI-Modus, ChatGPT, Gemini, Perplexity und Copilot, mit einem Prompt-Index, der laut Ahrefs aus Suchdaten modelliert ist, plus eigenen Prompts, die Sie wählen. Das Semrush AI Visibility Toolkit bietet einen Sichtbarkeitswert, Prompt-Recherche und tägliches Prompt-Tracking. Cloudflare AI Crawl Control meldet die Crawler-Aktivität für Websites hinter Cloudflare. Diese Tools ziehen Stichproben von Prompts, statt echte Nutzerunterhaltungen zu lesen, und Google sagt, kein Drittanbieter-Tool habe Zugang zu seinen KI-Ranking-Systemen. Betrachten Sie deren Zahlen als Richtwerte und vergleichen Sie sie mit Ihren eigenen Daten aus erster Hand.

Checkliste zur Selbstprüfung

Arbeiten Sie diese Liste auf Ihrer eigenen Website ab. Jeder Punkt verweist zurück auf den Abschnitt, der ihn erklärt. Ihr Fortschritt wird nur in diesem Browser gespeichert und folgt Ihnen deshalb nicht auf ein anderes Gerät.

GEO-Selbstcheck

0 von 33 erledigt

Zugriff0/7
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
Darstellung0/4
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
Inhalt0/5
Strukturierte Daten und Entität0/4
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
URLs und Aktualität0/5
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
Messen0/7
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
  • Anleitung
Optional: llms.txt0/1
  • Anleitung

GEO-Starterpaket

Alles aus dieser Anleitung, was Sie kopieren können, steckt in einem kostenlosen Download, ohne Anmeldung und ohne E-Mail-Formular.

ZIP136 KB

Das komplette GEO-Starterpaket herunterladen

53 Dateien in einem Archiv: robots.txt, llms.txt, JSON-LD, IndexNow, WordPress, Shopify, Next.js, React, Astro, Skripte, ein Prompt-Tracker und ein Content-Briefing.

Alle

Vollständiges Starterpaket herunterladen

PDF136 KB

Druckbare Checkliste zur Selbstprüfung

Die Checkliste von oben, zwei A4-Seiten, bereit zum Drucken oder Speichern.

Alle

Herunterladen

Die Plattformdateien sind in den jeweiligen Plattformabschnitten oben verlinkt. Jede Datei verwendet Platzhalter wie example.com, Beispielschlüssel und Beispielnamen. Ersetzen Sie jeden davon, bevor Sie deployen, und führen Sie den Prüfschritt aus dem passenden Abschnitt aus.

Nächste Schritte

Beginnen Sie mit der obigen Checkliste zur Selbstprüfung und beheben Sie den ersten nicht bestandenen Punkt, meist Bot-Zugang oder Server-HTML. Wenn Sie die Arbeit lieber auf Ihrer eigenen Website erledigt und geprüft haben möchten: Maxenius führt Audits und Umsetzung für KI-SEO und GEO durch. Wir prüfen Crawler-Zugang, Rendering, strukturierte Daten und Messung anhand der Schritte in dieser Anleitung und berichten mit Belegen, was sich geändert hat. Niemand kann KI-Zitierungen garantieren, deshalb bieten wir das nicht an.

Audit für die KI-Suche buchen

Wenn es um einen Neubau geht, übernehmen wir auch Shopify-Entwicklung, WordPress-Entwicklung und individuelle Softwareentwicklung. Die Dokumentation der Anbieter ändert sich oft. Prüfen Sie die Quellen unten monatlich erneut.

Quellen und Daten

Alle am 7. Oktober 2026 geöffnet und geprüft.

FAQ

Verwandte Fragen

Unterscheidet sich GEO von SEO?

Größtenteils nicht. Google sagt, die Optimierung für generative KI-Suche sei weiterhin SEO, und KI-Übersichten sowie der KI-Modus beruhten auf den zentralen Ranking- und Qualitätssystemen. GEO ist ein nützlicher Begriff für die zusätzlichen Prüfungen: KI-Suchbots hereinlassen, die Antwort in serverseitig gerendertem HTML ausliefern, Abschnitte mit der Antwort zuerst schreiben und Zitierungen messen. Die Richtlinien von Bing verwenden den Begriff GEO, sagen aber, dass er Zitierungen nicht garantiert.

Wie optimiere ich meine Website für die KI-Suche?

Stellen Sie sicher, dass Suchbots die Seite crawlen können (robots.txt und Ihr CDN), dass die Seite indexiert und snippet-fähig ist und dass die Hauptantwort im serverseitig gerenderten HTML steht. Schreiben Sie dann Abschnitte mit der Antwort zuerst und belegten Fakten, halten Sie strukturierte Daten deckungsgleich mit dem sichtbaren Text, verwenden Sie einen einheitlichen Host und einheitliche Angaben zu Ihrer Organisation und messen Sie mit Search Console, Bing Webmaster Tools, GA4 und Server-Logs. Kein Schritt garantiert eine Zitierung.

Brauche ich eine llms.txt-Datei?

Nein. llms.txt ist ein Vorschlag aus der Community von Jeremy Howard, und Google sagt, die Suche nutze sie nicht. Eine solche Datei hilft der Sichtbarkeit bei Google also weder, noch schadet sie ihr. In keinem der von uns geprüften Crawler-Dokumente von OpenAI, Anthropic, Perplexity, Bing, Apple oder Meta steht, dass deren Crawler sie für die Suche lesen. Sie lässt sich nach den Grundlagen günstig ergänzen, und Agenten sowie Dokumentationswerkzeuge können sie nutzen.

Entfernt das Blockieren von GPTBot meine Website aus der ChatGPT-Suche?

Nein. GPTBot ist der Trainings-Crawler von OpenAI. Die ChatGPT-Suche nutzt OAI-SearchBot, und OpenAI sagt, die beiden Einstellungen seien unabhängig voneinander. Wer OAI-SearchBot per Disallow sperrt, hält eine Website aus den Antworten der ChatGPT-Suche heraus, sie kann aber weiterhin als Navigationslink erscheinen. OpenAI gibt an, dass Änderungen an der robots.txt etwa 24 Stunden brauchen, bis sie wirken.

Entfernt das Blockieren von Google-Extended mich aus den KI-Übersichten?

Nein. Google-Extended ist ein robots.txt-Token ohne eigenen Crawler. Es steuert die Nutzung für das Training von Gemini und das Grounding in den Gemini-Apps und in Vertex AI, und laut Google hat es keinen Einfluss auf die Aufnahme in die Google-Suche. Um KI-Übersichten und den KI-Modus zu verlassen, nutzen Sie die Search Console (Einstellungen > Search generative AI) oder die Steuerung über nosnippet und noindex.

Führen KI-Crawler JavaScript aus?

Nicht zuverlässig. Eine Studie von Vercel und MERJ vom Dezember 2024 ergab, dass die Crawler von OpenAI, Anthropic, Meta und Perplexity kein JavaScript rendern, Gemini (über Googlebot) und AppleBot dagegen schon. Eine Vercel-Studie von Juni bis August 2026 ergab, dass ein Client, der nur abruft, keine Antwort erhielt, die ausschließlich über JavaScript existierte. Legen Sie Haupttext, Titel, Canonical und JSON-LD ins ursprüngliche HTML und testen Sie mit curl.

Woran erkenne ich, ob meine Website in KI-Übersichten oder bei ChatGPT erscheint?

Für Google öffnen Sie in der Search Console den Bericht „Generative AI performance“. Er zeigt Impressionen nach Seite, Land, Gerät und Datum (ohne Klicks und Suchanfragen). KI-Klicks lesen Sie im regulären Leistungsbericht unter „Web“. Für Bing und Copilot nutzen Sie AI Performance in den Bing Webmaster Tools. Für ChatGPT filtern Sie GA4-Sitzungen nach der Quelle chatgpt.com und führen wiederholte Prompt-Tests durch, denn kein offizielles Werkzeug meldet ChatGPT-Zitierungen.

Führen Statistiken, Zitate und Quellenangaben dazu, dass KI-Suchmaschinen meine Seite zitieren?

Nicht zuverlässig. Das GEO-Paper von 2024 berichtete von relativen Zuwächsen von grob 30 bis 40 Prozent durch Quellen, Zitate und Statistiken, gemessen wurde aber der Wortanteil in einer simulierten Antwort, nicht Traffic oder Rankings. Ein Folge-Benchmark von 2025 fand unter seinen Bedingungen nur in 3 von 54 Fällen eine deutliche Verbesserung. Nennen Sie Quellen, weil die Seite dadurch für Leserinnen und Leser besser wird, und betrachten Sie einen möglichen Gewinn an KI-Sichtbarkeit als unbewiesen.

Sie möchten besprechen, was das für Sie bedeutet?

Schreiben Sie uns ein paar Zeilen zu Ihrem Unternehmen und Ihrer Entscheidung. Wir antworten in der Regel innerhalb eines Werktags mit unserer Einschätzung der Optionen.