Die meisten AI-Crawler — GPTBot, ClaudeBot, CCBot, PerplexityBot — lesen das rohe HTML, das dein Server ausliefert, und hören da auf. Sie führen kein JavaScript aus. Für Sites, die eine React-, Vue- oder Angular-Shell ausliefern, in die der eigentliche Content client-seitig hydratet wird, sieht der Crawler eine leere Shell: Navigation, Platzhalter und ein JavaScript-Bundle — keine Artikel, keine Überschriften, keine Teaser.
Ich hab 50 der größten DACH-Medien-Homepages durch das Lumina JS vs No-JS Tool laufen lassen: ein Fetch für rohes HTML, ein Fetch für Chrome-gerendertes DOM, Wörter gezählt und verglichen. 35 Sites lieferten sauber vergleichbare Daten. Sieben davon verstecken mindestens ein Viertel ihres Texts hinter JavaScript. News.at versteckt 100 %: Das rohe HTML enthält nichts außer Navigation.
Zwei Wege, aus ChatGPT zu verschwinden
Aktiver Block: robots.txt oder WAF-Regeln schicken AI-Bots weg. Eine bewusste Entscheidung, meist 2023 getroffen und selten überprüft.
Passives Verstecken: die Site lässt AI-Bots technisch rein, aber der Content wird client-seitig gerendert. Das rohe HTML enthält eine Shell ohne echten Text. Das ist meistens gar keine Entscheidung; es ist ein Nebeneffekt einer CSR-first Framework-Wahl.
Eine Site kann beides. Tagesschau blockt alle AI-Bots in der robots.txt UND versteckt 35 % des Homepage-Texts hinter Vue-Hydration. Double-Lockout.
Was ich in ihren robots.txt-Dateien fand
Eine separate Studie zu denselben 50 Sites, letzte Woche publiziert. Ich hab die aktive Block-Ebene geprüft: robots.txt plus Live-Server-Check pro Bot. Vier Kern-Findings:
Warum JS-Rendering für AI-Crawler zählt
Jede große AI-Firma trennt ihre Web-Präsenz in zwei Bot-Typen. Training-Crawler fetchen Seiten in Masse und füttern damit die Sprachmodelle. Answer-Crawler fetchen auf Nachfrage, wenn ein User eine Frage stellt. Für die meisten von ihnen überspringt das Massen-Crawling JavaScript komplett — jede Seite in einem Headless-Browser zu rendern ist teuer, langsam und unnötig, wenn der Content im rohen HTML drin ist.
OpenAIs Dokumentation zu GPTBot bestätigt, dass er rohes HTML liest. Anthropics ClaudeBot auch. Common Crawl — die Grundlage für Dutzende Open-Source-LLMs und Trainings-Quelle für fast alle — snapshotet nur rohes HTML. Perplexitys Training-Crawler folgt dem gleichen Muster. GoogleBot und Gemini rendern JavaScript, aber mit Verzögerung von Stunden bis Tagen, und selbst dann landen die gerenderten Seiten in einem anderen Index als dem unmittelbaren.
Wenn eine Site also ihren Content client-seitig rendert — sprich: der Text steht nicht im HTML, das der Server rausschickt, sondern nur im JavaScript-Bundle, das danach läuft — sehen klassische AI-Crawler eine Shell. Navigation im Header, ein Footer, vielleicht ein Cookie-Banner. Keine Artikel. Keine Teaser. Keine Überschriften. Die Site ist technisch „online", aber unsichtbar für alles außer Googles und Geminis Second-Pass-Rendering.
Die Kern-Zahlen
Von den 35 Sites mit sauber vergleichbaren Daten:
- 23 Sites verstecken 5 % oder weniger ihres Texts ohne JavaScript — solide Server-Side-Rendering, AI-Crawler sehen was User sehen
- 2 Sites verstecken 6–10 % — milder Hydration-Gap, meistens OK
- 3 Sites verstecken 11–25 % — bemerkbare Lücke
- 4 Sites verstecken 26–50 % — ernsthafte Lücke, die Crawler-Story ändert sich
- 3 Sites verstecken 51–100 % — der Content ist praktisch Client-Side-only
Median über die 35: 1 %. Durchschnitt: 13,6 % (hochgezogen von den extremen Ausreißern). Pro Land steht Österreich allein mit 26,5 % Durchschnitt, weit über Deutschland (6,3 %) und Schweiz (4,3 %) — vier österreichische Heavy-JS-Ausreißer schultern die ganze Differenz.
Durchschnittlich versteckter Text ohne JavaScript, nach Land
Die 7 Heavy-JS-Sites
Diese sieben verstecken mindestens ein Viertel ihres Homepage-Texts hinter JavaScript. Jede Zahl wurde drei Mal gemessen; Spread über die Runs war 0–2 %, die Findings sind reproduzierbar und keine Einmal-Zufälle.
- News.at (AT): 100 % versteckt — 7 Wörter raw vs 3.071 gerendert. Das rohe HTML enthält Navigation und Script-Tags, keine Artikel.
- ServusTV (AT): 88 % versteckt — 250 raw, 2.170 gerendert. Next.js in CSR-first-Konfiguration.
- Tiroler Tageszeitung (AT): 79 % versteckt — 582 raw, 2.808 gerendert. Angular-App.
- Kleine Zeitung (AT): 39 % versteckt — 1.494 raw, 2.430 gerendert. Vue.
- Tagesschau (DE): 35 % versteckt — 1.771 raw, 2.723 gerendert. Vue.
- BR (DE): 35 % versteckt — 1.524 raw, 2.353 gerendert.
- WirtschaftsWoche (DE): 33 % versteckt — 1.303 raw, 1.950 gerendert. Angular.
Zum Vergleich: Der Spiegel, Die Zeit, Bild, SRF und ORF verstecken jeweils unter 10 %. Svelte-basiertes Spiegel und Zeit konkret 1 % jeweils. Das Framework ist nicht die Ursache. Next.js kann volles SSR, Angular kann server-seitig rendern, Vue hat Nuxt. Jede Heavy-JS-Site oben könnte voll gerendertes HTML ausliefern und hat sich dagegen entschieden. Die Ursache ist Konfiguration.
Österreich dominiert die Heavy-JS-Liste
Vier der sieben sind österreichisch: News.at, ServusTV, Tiroler Tageszeitung, Kleine Zeitung. Die 13 sauber gemessenen österreichischen Sites haben einen Durchschnitts-Text-Gap von 26,5 %. Der Rest des DACH-Samples liegt unter 7 %.
Der Rest des österreichischen Samples ist normal: Der Standard (Paywall), Salzburger Nachrichten, Oberösterreichische Nachrichten, Wiener Zeitung, Profil, Heute, Falter, Trend, ORF — alle unter 10 % Text-Gap. Vier extreme Ausreißer ziehen den Durchschnitt hoch. Ohne sie läge Österreich nahe an Deutschland bei ungefähr 5–7 %.
Was die Ausreißer gemeinsam haben: Boulevard oder regionale TV-Inhalte, alle in den letzten drei Jahren auf React-Family-Frameworks umgebaut, alle im CSR-first-Modus. Für einen nationalen Sender wie ServusTV oder einen Regional wie die Tiroler Tageszeitung bedeutet diese Architektur-Entscheidung: Die Homepage rendert für menschliche Browser fein, ist aber für AI-Crawler ohne volle Rendering-Pipeline leer.
Der ARD-Double-Lockout
Das erste Schloss ist die robots.txt. Tagesschau, BR, NDR und WDR blocken alle 16 AI-Crawler in ihrer robots.txt mit einem identischen Policy-File — klar ARD-weit koordiniert (die volle Auswertung steht in der Begleit-Studie zur robots.txt). Das zweite Schloss ist JavaScript: Tagesschau und BR verstecken zusätzlich 35 % ihres Homepage-Texts hinter Vue-Hydration. NDR und WDR waren nicht im Top-50-Sample dieser Studie, aber sie nutzen denselben ARD-Tech-Stack — das gleiche Muster ist wahrscheinlich.
Das ist Double-Lockout. Selbst ein AI-Crawler, der die robots.txt ignoriert — manche tun das — sieht nur 65 % der Tagesschau-Homepage. Ein Crawler, der die robots.txt respektiert, sieht gar nichts. Die einzigen Bots, die die volle Seite bekommen, sind GoogleBot und Gemini (weil sie JS rendern), und die zwei sind sowieso überall erlaubt.
ZDF wäre der interessante Vergleichspunkt gewesen — ZDF blockt auf robots.txt-Ebene null AI-Crawler, das spiegelverkehrte Gegenteil der ARD. Aber die ZDF-Homepage übersteigt 2 MB rohes HTML, über dem Tool-Limit. Ich kann es nicht sauber messen. Angesichts wie schwer die Seite ist, ist sie vermutlich auch CSR-gerendert, was sie trotz entgegengesetzter robots.txt-Haltung in dieselbe JS-versteckt-Kategorie wie Tagesschau stecken würde.
Case Study: News.at zeigt 100 % erst nach JS
Um den extremsten Befund doppelt zu prüfen, hab ich das rohe HTML von news.at direkt geholt (am Tool vorbei, gleicher Proxy-Endpoint) und die Wörter manuell gezählt. Der Body enthielt 559 Wörter total — aber nur 7 im Main-Content-Bereich. Die restlichen 552 waren Navigations-Strings: „Suche", „ABO", „Menü", „Aktuell", „Politik", „Wirtschaft", „Menschen" und so weiter durch den Kategorie-Baum.
Kein Artikel-Text. Keine Überschrift. Kein Teaser. Kein Autoren-Name. Kein Datum. Nichts vom Content, der news.at zu einer News-Site macht. All das lebt im JavaScript-Bundle, das Next.js nach dem Laden hydratet.
Für einen menschlichen Browser ist das in Ordnung — du siehst die volle Site innerhalb von 2 Sekunden. Für GPTBot, ClaudeBot oder CCBot ist die Seite effektiv leer. Wenn ein User ChatGPT fragt „Was steht heute in den Nachrichten in Österreich?", hat news.at null Sätze zum Zitieren. Selbst wenn ChatGPT live im Web nach der Antwort sucht, hat die rohe HTML-Response keine News. Die Site ist in AI-Suche unsichtbar.
Consent-Walls — eine andere AI-Barriere
Sechs Sites im Sample liefern unter 100 Wörter in beiden Fetches: Der Standard, Die Presse, Falter, t3n, NZZ und 20 Minuten. Das ist Consent-Wall-Gebiet. Der Server liefert einen Cookie-Dialog mit vielleicht 40–60 Wörtern rechtlicher Boilerplate und nichts anderem, bis ein Mensch „Akzeptieren" klickt.
Das ist kein JavaScript-Problem. Es ist ein anderes Zugriffs-Muster. Klassische HTTP-Crawler sehen fast nichts (den Consent-Dialog-Text), gerendertes Chrome sieht fast nichts (denselben Dialog, weil es nicht auf Akzeptieren klicken kann), und menschliche Besucher sehen vollen Content erst nach Interaktion. Für AI-Crawler ist das praktische Ergebnis dasselbe wie volles Verstecken: nichts zum Zitieren. Sechs von 50 getesteten Sites (12 %) nutzen dieses Muster.
Consent-Walls sind rechtlich motiviert — deutsche und österreichische DSGVO-Durchsetzung hat klargemacht, dass Cookie-Consent aktiv gegeben werden muss, bevor getrackt wird. Aber der Seiteneffekt für AI-Sichtbarkeit ist direkt: Diese Sites haben für Consent-Compliance optimiert und sind unbeabsichtigt aus AI-Antworten rausgefallen.
Methodik
- Sample: 50 reichweitenstärkste DACH-Medien (18 AT, 25 DE, 7 CH), dieselbe Liste wie die robots.txt-Begleit-Studie
- Tool: Lumina JS vs No-JS — fährt zwei parallele Fetches über denselben Cloudflare-Worker: rohes HTTP-GET für No-JS, Headless-Chrome-Render via Cloudflare Browser Rendering für JS
- Messung: Text-Content aus
<main>,<article>oder dem Body minus<nav>/<header>/<footer>/<aside>und Cookie-Banner-Klassen. Scripts und Styles gestrippt. Wörter an Whitespace getrennt. Text-versteckt % = (gerendert − raw) / gerendert × 100. - Reproduzierbarkeits-Check: Die 7 Heavy-JS-Sites plus 3 Sanity-Sites (Spiegel, Zeit, ORF) wurden jeweils 3× re-run. Spread über Runs war 0–2 %. Findings sind keine Einmal-Anomalien.
- Manuelle Verifikation: Der extremste Befund (news.at bei 100 %) wurde per manuellem Fetch des rohen HTML via demselben Worker geprüft, Wörter außerhalb des Tools gezählt. Bestätigt: 7 Main-Content-Wörter, 552 Navigations-Wörter, null Artikel-Text.
- Browser-automatisierter Runner: Jede URL wurde durch die echte Tool-UI ausgeführt via
window.go(url)in einer Live-Browser-Session, nicht durch einen Shortcut-API-Pfad. Die Zahlen unten sind, was jeder User beim Ausführen des Tools auf derselben URL heute sehen würde. - Rohdaten: Die komplette JSON mit allen 50 Ergebnissen plus der Perl-Analyzer, der die Zusammenfassung produziert, liegen auf GitHub.
Die 15 Sites, die wir nicht sauber messen konnten
Von 50 Sites lieferten 35 sauber vergleichbare Daten. Die anderen 15 teilen sich in eigene Kategorien, jede selbst ein kleines Finding:
- Consent-Wall / Paywall (6 Sites): Der Standard, Die Presse, Falter, t3n, NZZ, 20 Minuten. Unter 100 Wörter in beiden Fetches. Oben behandelt.
- Tool-Limit Seite zu groß (2 Sites): Süddeutsche Zeitung und ZDF Homepages übersteigen 2 MB raw / 3 MB gerendert. Das Lumina-Tool kann so große Seiten nicht fetchen. Für diese zwei hab ich keine Daten. Eine innere Artikel-URL würde wahrscheinlich funktionieren; für einen Like-for-Like-Homepage-Vergleich sind sie ausgeschlossen.
- Raw-HTTP blockiert, JS funktioniert (2 Sites): Focus.de liefert HTTP 403 auf rohes GET, Tages-Anzeiger läuft in eine Cookie-abhängige Redirect-Schleife. Beide Sites funktionieren fein im gerenderten Chrome. Klassische AI-Crawler sehen nichts (sie rendern kein JS), GoogleBot kommt durch (tut es). Gleiches Muster wie bei kurier.at und capital.de in der robots.txt-Studie.
- Beide Fetcher blockiert (2 Sites): oe24 und Heise liefern leere Bodies an raw und gerenderten Fetch. Aggressive Bot-Detection auf den Cloudflare-Worker-IP-Range. Echte Browser laden die Sites weiter fein, und GoogleBots eigene IPs sind fast sicher geweissliste.
- SSL/TLS-Zertifikat-Problem (1 Site): Puls24 liefert HTTP 526 auf beide Fetcher — Cloudflare meldet ein ungültiges Cert am Origin. Bis das gefixt ist, ist die Site für jeden Client, der Certs validiert, unerreichbar.
- Browser-Rendering scheitert, raw HTML OK (1 Site): Frankfurter Rundschau liefert 3.558 Wörter via raw HTTP, aber das Rendered-Chrome-Endpoint errort mit 422. Partielle Daten — ich kann bestätigen, dass das rohe HTML Inhalt hat, aber den JS-Render-Gap nicht verifizieren.
- Rendered-Chrome am Edge blockiert (1 Site): Blick.ch ist ein interessanter Fall. Raw HTTP liefert 1.890 Wörter echten Content. Der Rendered-Chrome-Fetch kommt mit einer 15-Wort „Access Denied"-Seite von Akamai zurück. Blicks Edge-Filter ist konfiguriert, klassisches HTTP durchzulassen, aber die Cloudflare-Browser-Rendering-IP-Range zu blocken. Manuelle Verifikation bestätigte, dass das ein Infrastruktur-Level-Block ist, kein Consent-Overlay.
Diese 15 Sites sind aus allen Länder-Durchschnitten und Prozentzahlen in diesem Artikel ausgeschlossen. Nur die 35 sauber gemessenen Sites zählen. Ich erwähne die Ausschluss-Kategorien hier, weil jede einzelne selbst ein kleines Finding ist, wie diese Sites mit automatisierten Crawlern interagieren.
Was ich selbst daraus mitnehme
Es gibt zwei Wege, aus ChatGPT zu verschwinden, und dieser Artikel behandelt den, den niemand entschieden hat. Die explizite Policy-Entscheidung — „wir werden GPTBot blocken" — hat zumindest einen Namen, einen Owner, ein Meeting, in dem sie diskutiert wurde. Die JavaScript-Verstecken-Entscheidung nicht. Sieben Sites liefern eine Homepage, auf der der eigentliche Content erst existiert, nachdem ein JavaScript-Framework hydriert. Das war keine GEO-Entscheidung. Das war ein Frontend-Team, das die Default-Konfiguration von Next.js, Angular oder Vue gepickt und ausgeliefert hat.
Für News.at ist der Effekt total: null Content verfügbar für AI-Crawler, die kein JS rendern. Für die Tagesschau kompoundiert der Effekt mit dem absichtlichen robots.txt-Block: Double-Lockout. Für Kleine Zeitung und WirtschaftsWoche ist es ein Drittel ihres Contents, das still aus dem AI-Training-Feed fehlt.
Der Fix ist nicht, das Framework zu wechseln. Der Fix ist, die Konfiguration auf SSR-first zu flippen (jedes erwähnte Framework unterstützt das) oder Static Site Generation auszuliefern. Spiegel und Zeit laufen beide auf Svelte und verstecken 1 % Text jeweils. Machbar.
Ob österreichische Regional-Medien, BR, die Tagesschau oder News.at diese Arbeit machen werden, ist eine andere Frage. Der erste Schritt ist einfach nur zu wissen, dass es da ist — die meisten Frontend-Teams, mit denen ich geredet hab, checken ihre AI-Crawler-Sichtbarkeit gar nicht.
FAQ
Prüf deinen eigenen JS-Rendering-Gap
Derselbe Test wie in dieser Studie — für deine Domain. Kostenlos, keine Anmeldung, rohes HTML vs Chrome-gerendert in 20 Sekunden.
JS vs No-JS Tool öffnen →