Traffic Change Diagnosis
Systematically diagnose why traffic changed — spike, drop, or shift in mix. Follow these steps in order. Each step narrows the hypothesis.
Step 1 — Establish the baseline
Compare the period in question to the equivalent prior period:
dimensions: ["date"]
metrics: ["sessions", "totalUsers", "newUsers", "engagedSessions", "keyEvents"]
date_range: affected period + same-length prior period
Measure: absolute change, % change, and whether all metrics moved together. If sessions dropped but engagement rate improved, volume dropped but quality held — different cause than if everything dropped proportionally.
Step 2 — Isolate which channel changed
dimensions: ["sessionDefaultChannelGroup"]
metrics: ["sessions", "totalUsers", "engagedSessions", "engagementRate"]
date_range: affected period vs prior period
Which channel account for most of the change? Narrow to that channel before going deeper.
Step 3 — Check time pattern (sudden vs gradual)
dimensions: ["date", "sessionDefaultChannelGroup"]
metrics: ["sessions"]
date_range: last 28 days
- Sudden single-day spike/drop → campaign launch/end, deploy, media mention, bot flood
- Gradual decline over weeks → SEO decay, seasonal drift, quality score drop
- Step change that persists → tracking change, filter change, channel definition update
Step 4 — Fingerprint the cause
Run queries matching the suspected cause:
Bot flood — see bot-traffic-detection skill:
- engagementRate near 0, averageSessionDuration ≈ 0
- Unusual hostname or country concentration
Campaign start/end:
dimensions: ["sessionCampaignName", "sessionSource", "sessionMedium"]
metrics: ["sessions", "keyEvents", "engagementRate"]
dimension_filter: sessionDefaultChannelGroup IN ["Paid Search", "Paid Social", "Display"]
SEO change (organic):
dimensions: ["sessionDefaultChannelGroup", "landingPagePlusQueryString"]
metrics: ["sessions", "engagementRate", "keyEvents"]
dimension_filter: sessionDefaultChannelGroup = "Organic Search"
date_range: 90 days (to see gradual trend)
Technical/tracking change — all channels drop equally at the same moment.
Check with dimensions: ["date"] — a vertical drop on a single date across all channels
points to a tag firing issue or consent mode change.
Step 5 — Conclude
State: 1. What changed (metric + magnitude) 2. Which channel drove it 3. When it started (sudden or gradual) 4. Most likely cause (from fingerprinting) 5. One action: investigate further / fix tracking / pause campaign / accept as seasonal
What not to do
Do not conclude "traffic dropped" from a single metric in isolation. Do not compare to the prior week without accounting for day-of-week patterns (Monday always differs from Sunday — compare Monday-to-Monday or full weeks).
Load it in a session with search_skills("traffic-diagnosis"), or read the MCP
resource skill://traffic-diagnosis. Markdown twin:
/skills/traffic-diagnosis/index.md · Source:
skills/traffic-diagnosis/SKILL.md.