Zum Hauptinhalt springen

Cloudflare AI Crawl Analytics

Echtzeit-Analyse des AI-Bot-Traffics via Cloudflare GraphQL API (httpRequestsAdaptiveGroups). Zeigt welche AI-Bots die Seite crawlen, wie viel Traffic sie verursachen und welche Seiten am meisten abgerufen werden.

Admin-Seite: /admin/ai-agent-analytics


Architektur

graph TD
A["Cloudflare GraphQL API"] -->|"httpRequestsAdaptiveGroups"| B["CloudflareAiCrawlService"]
B -->|"Cache 1h"| C["Redis/DB Cache"]
B --> D["Livewire Component<br>AiAgentAnalytics/Index"]
D --> E["/admin/ai-agent-analytics"]
E --> F["KPI-Karten + ApexCharts"]
E --> G["Tabellen: Pfade, Status, Referral"]
E --> H["Bot-Konfiguration + Live-Traffic"]
I["Cloudflare Radar API"] -->|"Öffentlich, kein Auth"| B

Konfiguration

Umgebungsvariablen

# Cloudflare API Token (gleicher wie für R2)
CLOUDFLARE_API_TOKEN=your_api_token

# Cloudflare Zone-ID für zone-level GraphQL Queries
# Zu finden in: Cloudflare Dashboard > Zone Overview (rechte Seite)
CLOUDFLARE_ZONE_ID=your_zone_id_here

Token-Permissions

Der API-Token benötigt:

  • Zone > Analytics > Read (für httpRequestsAdaptiveGroups)
  • Ggf. bereits vorhanden wenn R2-Zugriff konfiguriert ist

Service: CloudflareAiCrawlService

Datei: app/Services/Cloudflare/CloudflareAiCrawlService.php

Methoden

MethodeBeschreibungCache-Key
isConfigured()Prüft ob Token + Zone-ID gesetzt sind
getAiBotTraffic(days)Q1: Zeitreihe Requests pro Botcf-ai:bot-traffic:{days}
getTopCrawledPaths(days, limit)Q2: Top gecrawlte Pfadecf-ai:top-paths:{days}:{limit}
getDataTransferByBot(days)Q3: Bytes pro BotNutzt Q1-Cache
getAiReferralTraffic(days)Q4: Referral von ChatGPT/Perplexitycf-ai:referral:{days}
getResponseStatusByBot(days)Q5: Status-Codes (2xx/3xx/4xx/5xx)cf-ai:status:{days}
discoverUnknownBots(days)E1: Unbekannte Bots findencf-ai:discovery:{days}
checkRobotsTxtCompliance(config, days)E4: robots.txt ComplianceNutzt Q1-Cache
estimateContentValue(days)E5: Content-Wert-SchätzungNutzt Q1-Cache
getCrawlerEfficiency(days)E9: Effizienz-MetrikenNutzt Q3-Daten
detectAnomalies(days)E2: Anomalie-ErkennungNicht gecacht (vergleicht Perioden)
getRadarAiBotStats()E12: Globale Radar-Statistikencf-ai:radar:ai-bots
flushCache()Cache leeren

Caching

  • TTL: 1 Stunde (wie R2)
  • Driver: Standard-Cache-Driver (Redis/Database)
  • Prefix: cf-ai:
  • On-demand: Daten werden nur bei Seitenaufruf geladen, kein Scheduled Command

Konfigurierte Bots

12 AI-Bots sind mit User-Agent-Patterns konfiguriert:

BotBetreiberKategorie
GPTBotOpenAIAI Training
ChatGPT-UserOpenAIAI Assistant
OAI-SearchBotOpenAIAI Search
ClaudeBotAnthropicAI Training
Claude-SearchBotAnthropicAI Search
Claude-UserAnthropicAI Assistant
PerplexityBotPerplexityAI Search
DuckAssistBotDuckDuckGoAI Search
CCBotCommon CrawlAI Training
Google-ExtendedGoogleAI Training
Meta-ExternalAgentMetaAI Training
BytespiderByteDanceAI Training

UI-Komponenten

Tab-basiertes Lazy-Loading (seit 2026-03-08)

Die Seite lädt Cloudflare API-Daten nicht beim Seitenaufruf, sondern erst per Tab-Klick. So wird die Seite sofort sichtbar und API-Calls werden nur bei Bedarf gefeuert.

Basis-Ansicht (immer sichtbar):

  • SEO-Dateien Status (robots.txt, llms.txt, llms-full.txt, sitemap.xml)
  • AI-Bot Konfigurationstabelle (keine API-Calls)

Tabs (lazy-loaded per Klick):

TabInhaltAPI-Calls
Traffic-ÜbersichtKPI-Karten, Area-Chart, Content-Wert, Anomalien, ViolationsQ1 + E2 + E4 + E5
Detail-AnalyseDatentransfer (Donut), Top Pfade, Response-Status, EffizienzQ2 + Q3 + Q5 + E9
DiscoveryUnbekannte Bots, Referral Traffic, Radar StatsE1 + Q4 + E12
IndexNowConfig-Status, KPI-Stats, Submission-LogKeine Cloudflare-Calls

Zeitraum-Toggle

  • 24h | 7 Tage (Cloudflare httpRequestsAdaptiveGroups unterstützt max ~8 Tage)

Erweiterungen

#FeatureStatus
E1Auto Bot DiscoveryImplementiert
E2Anomalie-Erkennung (>200% Spike / >80% Drop)Implementiert
E4robots.txt Compliance CheckImplementiert
E5Content-Wert-Schätzung (Pay-Per-Crawl)Implementiert
E9Crawler-Effizienz-MetrikenImplementiert
E12Cloudflare Radar IntegrationImplementiert
E7Webhook/Alert bei Bot-BlockierungTech Debt
E8Vergleich mit Matomo Bot-DatenTech Debt
E10Realtime-Widget (Polling)Tech Debt
E11Bot Management Config (REST API)Tech Debt

API-Limits

  • GraphQL API: Bis zu 320 Requests pro 5-Minuten-Fenster
  • Unser Verbrauch: ~24 API-Calls/Tag max (Cache-TTL 1h, Seite wird selten aufgerufen)
  • Gleicher API-Token wie für R2 — keine zusätzlichen Credentials

Tests

  • Unit-Tests: tests/Unit/Services/Cloudflare/CloudflareAiCrawlServiceTest.php (16 Tests)
  • Feature-Tests: tests/Feature/Admin/AiAgentAnalyticsTest.php (12 Tests)