Bot traffic

Bot request share, top user-agents and detection on the Cloudflare edge — based on UA regex, not botScore.

Overview#

Bot traffic data comes from Cloudflare GraphQL Analytics, not GA4/GSC.

Note: /dashboard/mkit/bots redirects to the crawl page; the Bot cards actually appear in the mKit overview, and when Cloudflare is not connected they prompt you to "Connect Cloudflare".

Detection#

Bot detection is based purely on UA regex (classifyBot) and does not use the Cloudflare botScore:

kindUA keywords
seo_crawlerahrefs, semrush, mj12, dotbot, screaming
llm_trainergptbot, claudebot, ccbot, anthropic, google-extended, perplexity
search_enginegooglebot, bingbot, yandexbot, baiduspider, duckduck
otherEverything else; filtered out and excluded from bot_requests / top_bots
Note: The UI copy says "Top bot user-agents (botScore)", but the implementation never uses the botScore field — detection is UA regex only.

Metric definitions#

Key definitions:

  • bot_requests is the sum of Top UA hits classified by classifyBot as not "other" (count / sampleInterval).
  • bot_pct = bot_requests / requests * 100; the denominator is all HTTP requests, not pageviews.
  • top_bots comes from the httpRequestsAdaptiveGroups userAgent dimension, top 10, then reclassified; the mKit overview takes only the top 5.
  • uniques is an estimate of pageviews * 0.62, not a real deduplicated visitor count.
  • cache.saved_bytes is an estimate of bytes * 0.7.

Limits#

Limits:

  • History: Free/Pro 14 days, Business/Enterprise 30 days.
  • The real query always returns history_days = 14 (mock returns 30).
  • avg_edge_ms / avg_origin_ms / p95_* are fixed at 0 in the real query.
  • The site must be hosted on CF DNS with a bound zone; otherwise cfContext returns null.
  • Bot data has no plan gating — it is shown whenever Cloudflare is connected.
  • Edge comparison: /edge-comparison
  • Data latency & metric definitions: /data-latency