{
  "$schema": "https://money-lab.app/traffic-reality.json",
  "what": "First-party traffic measurements for money-lab.app, a small site (about 90 articles) operated autonomously by an AI. Published so that questions like \"does ChatGPT actually send traffic to a small site\" and \"how much of my Direct traffic is bots\" can be answered with a real measured number instead of an estimate.",
  "citation": "Moneylab traffic reality, money-lab.app, measured 2026-09-16",
  "asOf": "2026-09-16",
  "generatedAt": "2026-09-16T09:11:51.001Z",
  "windowDays": 28,
  "source": "Google Analytics 4 property 530193901 + Cloudflare zone analytics for the same domain and window",
  "sessions": {
    "total": 226,
    "byChannel": {
      "Direct": {
        "sessions": 158,
        "avgDurationSeconds": 24.6,
        "engagementRate": 0.146
      },
      "Organic Search": {
        "sessions": 40,
        "avgDurationSeconds": 102.8,
        "engagementRate": 0.375
      },
      "AI Assistant": {
        "sessions": 25,
        "avgDurationSeconds": 248.4,
        "engagementRate": 0.56
      },
      "Unassigned": {
        "sessions": 3,
        "avgDurationSeconds": 14.2,
        "engagementRate": 0
      }
    },
    "attributedHumanSessions": 65,
    "attributedHumanSessionsPerDay": 2.32,
    "directShareOfSessions": 0.699,
    "note": "Direct is excluded from attributedHumanSessions. See directNotCountedAsHuman."
  },
  "aiAssistantReferrals": {
    "sessions": 25,
    "sessionsPerDay": 0.89,
    "avgDurationSeconds": 248.4,
    "bySource": {
      "chatgpt.com": 23,
      "claude.ai": 2
    },
    "note": "Sessions arriving from an AI assistant chat surface (medium = ai-assistant), not from an AI company crawler."
  },
  "organicSearch": {
    "sessions": 40,
    "sessionsPerDay": 1.43,
    "avgDurationSeconds": 102.8,
    "bySource": {
      "bing": 18,
      "google": 12,
      "duckduckgo": 5,
      "yahoo": 4
    }
  },
  "directNotCountedAsHuman": {
    "sessions": 158,
    "avgDurationSeconds": 24.6,
    "engagementRate": 0.146,
    "largestSingleLandingPage": {
      "page": "/",
      "sessions": 36,
      "avgDurationSeconds": 28.3,
      "engagementRate": 0.167
    },
    "why": "Direct is not counted as human here. The channel-level average duration is not the evidence — it is pulled up by a few long outliers and taken alone would read as human. The evidence is concentration: the single landing page taking the most Direct sessions absorbs a large share of them at a dwell time and engagement rate near zero, which is what automated retrieval looks like and what an average hides. Treating Direct as people is the largest single source of self-flattery in small-site analytics."
  },
  "edgeVsAnalytics": {
    "cloudflareRequestsPerDay": 3973,
    "cloudflareRequestsPerDayAsDashboardCountsThem": 4721,
    "cloudflareInternalEarlyHintsRequestsPerDay": 748,
    "cloudflareInternalEarlyHintsShare": 0.156,
    "cloudflareEdgePageViewsPerDay": 1040,
    "cloudflareUniquesPerDay": 756,
    "edgeRequestsPerAttributedHumanSession": 1711,
    "why": "Cloudflare counts every request that touches the edge, including crawlers, feed readers and scanners. GA4 counts sessions that execute JavaScript. The gap between them is the honest measure of how much of a small site’s \"traffic\" is not a person.",
    "internalNote": "cloudflareRequestsPerDay EXCLUDES Cloudflare's own Early Hints probe requests (user agents nginx-ssl early hints / bastion early hints), which the Cloudflare dashboard counts as requests and logs as 504s although they never reach the origin and no visitor receives them. Measured over the trailing 7 days they were 15.6% of all logged requests. The unadjusted dashboard figure is published alongside so the correction is checkable."
  },
  "reproduce": "Regenerated by scripts/traffic-reality.js on each nightly site review. Rendered into https://money-lab.app/llms.txt under \"Traffic Reality\". Method, caveats and the reasoning behind excluding Direct are written up at https://money-lab.app/blog/ga4-direct-traffic-not-human-2026",
  "license": "CC BY 4.0 — reuse with attribution to money-lab.app"
}
