Besucherzahlen von ChatGPT, Perplexity und Claude korrekt messen: GA4, Server-Logs und das Dark-AI-Problem
Die Frage nach dem Traffic aus KI-Assistenten laesst sich nicht mit einer Zahl beantworten. Ein Teil der Besucher wird in Analytics-Tools nicht als KI-Referrer erkannt, weshalb die tatsaechlichen Werte deutlich hoeher liegen koennen.

„Wie viel Traffic bekommen wir von ChatGPT?“ klingt nach einer Frage, die sich in einer Zeile beantworten laesst. In der Praxis lautet die ehrliche Antwort: „wenigstens X, und wahrscheinlich mehr.“
KI-Assistenten schicken tatsaechlich Besucher: Menschen klicken auf die Quellenangaben in der ChatGPT-Suche, bei Perplexity, Claude, Gemini und Copilot. Doch dieser Traffic erreicht einen in mindestens vier unterschiedlichen Formen, und Standard-Analytics-Setups erfassen nur einen Teil davon.
Form 1 und 2 sind messbar. Form 3 ist der sogenannte „dunkle KI“-Traffic. Form 4 ist KI-getrieben, wird aber von Google als Teil der normalen Suche ausgewiesen (dort hilft der Performance-Bericht fuer generative KI in der Search Console, der 2026 fuer alle Websites ausgerollt wurde).
![Vier Formen von KI-Traffic: Referrer vorhanden, UTM markiert, kein Referrer und innerhalb von Google, mit Angabe, wie gut jeweils eine Messung moeglich ist] Bild: Diagramm des Autors.
Halte die Regeln in einem Modul zusammen, damit Browser, Server und deine SQL-Abfragen sich alle auf dieselben Definitionen beziehen.
Domains aendern sich. Aus Gemini wurde frueher Bard, Copilot hat bereits mehrfach den Host gewechselt, und immer neue Assistenten kommen auf den Markt.
Ueberpruefe diese Liste einmal pro Quartal und behandle sie als Konfiguration, nicht als Code.
Einige Berichte aus dem Jahr 2026 behaupten, GA4 habe einen integrierten KI-Assistenten-Kanal hinzugefuegt. Ich konnte kein Google-Dokument finden, das genau aufschluesselt, welche Quellen abgedeckt sind. Deshalb empfehle ich weiterhin eine eigene Kanalgruppe, bei der du die Regeln selbst kontrollierst.
Admin → Datendarstellung → Kanalgruppen → Neue Kanalgruppe erstellen → Neuen Kanal namens AI Assistants hinzufuegen, mit der Bedingung:
Zwei Einstellungen, bei denen haeufig Fehler gemacht werden:
Kanalgruppen greifen auch fuer historische Daten in Berichten, was praktisch ist, um zu pruefen, wie sich dieses Jahr im Vergleich zum Vorjahr entwickelt.
GA4 verliert Besucher, die Analytics blockieren, und laesst sich nicht ohne Weiteres mit den eigenen Daten (Anmeldungen, Bestellungen) verknuepfen. Eine kleine Middleware loest beide Probleme.
Bei Next.js (App Router) kann die Middleware nicht ohne Weiteres am Edge in eine Datenbank schreiben. Leite den Treffer daher an einen Route Handler oder deine Log-Pipeline weiter.
Beachte: Der Referrer zeigt nur die Ursprungsdomain (https://chatgpt.com/) an, nicht das Gespraech, und das ist auch richtig so. Man wird nie erfahren, welcher Prompt den Besuch ausgeloest hat, also versuche nicht, diesen per Fingerabdruck zu identifizieren.
Die zweite Abfrage ist die nuetzliche. KI-Assistenten schicken Menschen haeufiger auf andere Seiten als Google: tief verschachtelte Dokumentationsseiten, Vergleichsseiten und Preisseiten sind ueblich. Das zeigt dir, welche Inhalte zitiert werden.
Besuche ohne Referrer lassen sich nicht klassifizieren, aber man kann erkennen, wann sich der Traffic von Direct wie KI-Traffic verhaelt:
Berichte KI-Traffic als „nerfasste KI-Besuche (Untergrenze)“ und lasse es dabei bewenden. Ein selbst erfundener Multiplikator fuer den dunklen Teil haelt der ersten Rueckfrage in einem Meeting nicht stand.
Referral-Tracking verraten dir, was passiert, nachdem ein Assistent dich zitiert hat. Sie verraten nicht, wie oft du ohne einen Klick erwaehnt wurdest oder wie oft stattdessen ein Wettbewerber empfohlen wurde. Das sind die fruehen Indikatoren. Wir erfassen sie im Brand-Visibility-Dashboard von Vista AI, das echte Prompts ueber die grossen Assistenten hinweg sampelt. Was immer du nutzt: Lege beide Sichten nebeneinander. Sichtbarkeit steigt, waehrend Referrals konstant bleiben, bedeutet in der Regel, dass man dich erwaehnt, aber nicht verlinkt.
Habe ich eine KI-Quelle uebersehen, die dir Traffic schickt? Poste den Referrer-Host in den Kommentaren, und ich fuege ihn der Liste hinzu.
Weiter in der Serie: ChatGPT kann nicht zitieren, was Bing nicht indexiert hat: IndexNow in Next.js.
Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.
Original (Englisch) anzeigen
"How much traffic do we get from ChatGPT?" sounds like a one-line question. In practice, the honest answer is "at least X, and probably more."
AI assistants do send visitors: people click the citations in ChatGPT search, Perplexity, Claude, Gemini and Copilot. But that traffic reaches you in at least four different shapes, and default analytics setups only catch some of them.
Shapes 1 and 2 are trackable. Shape 3 is the "dark AI" traffic. Shape 4 is AI-driven, but Google reports it as part of normal Search (Search Console's generative AI performance report, rolled out to all sites in 2026, is the place to look for that).
![Four shapes of AI traffic: referrer present, UTM tagged, no referrer and inside Google, with how trackable each one is] Image: diagram by the author.
Keep the rules in one module so the browser, the server and your SQL all agree.
// ai-referrers.js export const AI_SOURCES = [ { name: " ChatGPT ", hosts: [ " chatgpt.com ", " chat.openai.com " ], utm: [ " chatgpt.com ", " chatgpt " ] }, { name: " Perplexity ", hosts: [ " perplexity.ai ", " www.perplexity.ai " ], utm: [ " perplexity ", " perplexity.ai " ] }, { name: " Claude ", hosts: [ " claude.ai " ], utm: [ " claude.ai ", " claude " ] }, { name: " Gemini ", hosts: [ " gemini.google.com ", " bard.google.com " ], utm: [ " gemini ", " gemini.google.com " ] }, { name: " Copilot ", hosts: [ " copilot.microsoft.com ", " copilot.cloud.microsoft " ], utm: [ " copilot " ] }, { name: " DeepSeek ", hosts: [ " chat.deepseek.com " ], utm: [ " deepseek " ] }, { name: " Meta AI ", hosts: [ " meta.ai ", " www.meta.ai " ], utm: [ " meta.ai " ] }, { name: " Grok ", hosts: [ " grok.com " ], utm: [ " grok " ] }, ]; export function classifyAI ({ referrer = "", url = "" }) { let refHost = ""; try { refHost = new URL ( referrer ). hostname. toLowerCase (); } catch {} let utmSource = ""; try { utmSource = ( new URL ( url ). searchParams. get ( " utm_source " ) || "" ). toLowerCase (); } catch {} for ( const src of AI_SOURCES ) { if ( src. hosts. some ( h => refHost === h || refHost. endsWith ( ". " + h ))) { return { source: src. name, method: " referrer " }; } if ( src. utm. includes ( utmSource )) { return { source: src. name, method: " utm " }; } } return null; } Enter fullscreen mode Exit fullscreen mode classifyAI ({ referrer: " https://www.perplexity.ai/ ", url: " https://example.com/docs " }); // → { source: "Perplexity", method: "referrer" } classifyAI ({ referrer: "", url: " https://example.com/pricing?utm_source=chatgpt.com " }); // → { source: "ChatGPT", method: "utm" } Enter fullscreen mode Exit fullscreen mode Domains change. Gemini used to be Bard, Copilot has moved hosts more than once, and new assistants keep launching.
Review this list every quarter and treat it as config, not code.
Some 2026 reports say GA4 added a built-in AI assistant channel. I couldn't find a Google document listing exactly which sources it covers, so I still recommend your own channel group, where you control the rules.
Admin → Data display → Channel groups → Create new channel group → Add new channel named AI Assistants, with the condition:
^(.*\.)?(chatgpt\.com|chat\.openai\.com|perplexity\.ai|claude\.ai|gemini\.google\.com|bard\.google\.com|copilot\.microsoft\.com|copilot\.cloud\.microsoft|chat\.deepseek\.com|meta\.ai|grok\.com)$|^(chatgpt|perplexity|claude|gemini|copilot|deepseek|grok)$ Enter fullscreen mode Exit fullscreen mode Two settings people get wrong:
Channel groups apply to historical data in reports, which is handy for checking how this year compares with last.
GA4 misses visitors who block analytics, and you can't easily join it with your own data (signups, orders). A tiny middleware fixes both.
// ai-log.js import { classifyAI } from "./ai-referrers.js "; export function aiReferralLogger ( db ) { return ( req, res, next ) => { if ( req. method!== " GET " ||! req. accepts ( " html " )) return next (); const hit = classifyAI ({ referrer: req. get ( " referer " ) || "", url: ` ${ req. protocol }:// ${ req. get ( " host " )}${ req. originalUrl } `, }); if ( hit ) { db. query ( `INSERT INTO ai_visits (ts, source, method, path, user_agent) VALUES (now(), $1, $2, $3, $4)`, [ hit. source, hit. method, req. path, req. get ( " user-agent " ) || "" ] ). catch (() => {}); // never block the request on analytics } next (); }; } Enter fullscreen mode Exit fullscreen mode Next.js (App Router) Middleware can't easily write to a database at the edge, so forward the hit to a route handler or your log pipeline:
// middleware.ts import { NextResponse, type NextRequest } from " next/server "; import { classifyAI } from "./lib/ai-referrers "; export function middleware ( req: NextRequest ) { const hit = classifyAI ({ referrer: req. headers. get ( " referer " )?? "", url: req. url }); if ( hit ) { // Structured log line; ship it with your log drain. console. log ( JSON. stringify ({ type: " ai_visit ",... hit, path: req. nextUrl. pathname, ts: Date. now () })); } return NextResponse. next (); } export const config = { matcher: [ " /((?!_next|api|.* \\..*).*) " ] }; Enter fullscreen mode Exit fullscreen mode Note the referrer only shows the origin ( https://chatgpt.com/ ), not the conversation, and that's how it should be. You'll never know which prompt sent the visit, so don't try to fingerprint it.
-- Weekly AI visits by source SELECT date_trunc ( 'week', ts ) AS week, source, count ( * ) AS visits FROM ai_visits GROUP BY 1, 2 ORDER BY 1 DESC, 3 DESC; -- Which pages do AI assistants send people to? SELECT path, source, count ( * ) AS visits FROM ai_visits WHERE ts > now () - interval '30 days' GROUP BY 1, 2 ORDER BY 3 DESC LIMIT 25; Enter fullscreen mode Exit fullscreen mode The second query is the useful one. AI assistants tend to send people to a different set of pages from Google: deep docs pages, comparison pages and pricing are common. That tells you which content is getting cited.
You can't classify visits with no referrer, but you can spot when Direct traffic behaves like AI traffic:
-- Deep-page "direct" sessions: a rough proxy for unattributed shares/citations SELECT landing_path, count ( * ) AS sessions FROM sessions WHERE channel = 'Direct' AND landing_path NOT IN ( '/', '/login', '/app' ) AND ts > now () - interval '30 days' GROUP BY 1 ORDER BY 2 DESC LIMIT 25; Enter fullscreen mode Exit fullscreen mode Report AI traffic as "tracked AI visits (floor)" and leave it at that. Inventing a multiplier for the dark part won't survive the first question in a meeting.
Referral tracking tells you what happened after an assistant cited you. It doesn't tell you how often you were mentioned without a click, or how often a competitor was recommended instead. Those are the leading indicators. We track them in Vista AI's brand visibility dashboard, which samples real prompts across the major assistants. Whatever you use, put both views next to each other: visibility going up while referrals stay flat usually means you're being mentioned but not linked.
Did I miss an AI source that sends you traffic? Post the referrer host in the comments and I'll add it to the list.
Next in the series: ChatGPT can't cite what Bing hasn't indexed: IndexNow in Next.js.