How do I find the most likely cause of a traffic anomaly?
Short answer
Classify the shape of the anomaly before generating hypotheses, because shape eliminates most candidates immediately. A cliff edge across every page is technical. A slope across some pages is algorithmic or competitive. A change confined to one template is a deploy. Then work the surviving candidates in order of how often each is actually the cause, not in order of how interesting it is.
Verify the anomaly before investigating it
A meaningful share of anomalies never happened, so spend two minutes here first.
Does Search Console agree with GA4? If GA4 fell and GSC clicks held, you have a tracking problem. This single comparison resolves more false alarms than everything else combined.
Is the recent data final? Both platforms lag, and the last few days are provisional.
Did tracking change? A tag removal, a consent banner default, or a filter added to a view produces a clean break that looks like a traffic event.
If both sources agree, it's real. Continue.
Read the shape
Shape is the fastest diagnostic available and almost nobody starts here.
| Shape | Most likely cause |
|---|---|
| Cliff edge, all pages, one date | robots.txt, noindex, outage, or tracking |
| Cliff edge, one template only | A deploy touching that template |
| Slope over 5 to 14 days | Algorithm update or de-indexing cascade |
| Gradual over months | Competitive erosion, content decay, or intent shift |
| One country or device only | Hreflang, CDN routing, or a rendering failure |
| Branded only | Brand or PR event, not SEO |
| Non-brand only | Ranking or SERP-composition change |
| Impressions held, clicks fell | SERP composition. Something is absorbing the click |
| Impressions fell, position held | Demand contraction or seasonality |
Two of these settle the question on their own. Branded-only movement is never an SEO problem. And impressions holding while clicks fall means your position was fine and the page changed around you.
Work the candidates in base-rate order
Once shape has narrowed the field, order what remains by frequency rather than by how compelling the theory feels.
1. Tracking. Still the most common cause of a reported anomaly.
2. Seasonality. Check year-over-year before anything else. See How do I tell seasonality from a real SEO decline?.
3. Your own recent changes. Deploys, content updates, redirects, title rewrites. Check the change log for the preceding 30 days.
4. Indexation. Coverage report, robots.txt, noindex headers.
5. SERP composition. An AI Overview or feature appearing on your queries.
6. Competitive displacement. Who holds your positions now.
7. Algorithm update. Check whether the timing matches reported volatility.
8. Demand shift. Category volume trend.
Most teams start at 7 because it's the most discussed and requires no self-examination. It's seventh for a reason.
Decompose before you theorise
If shape and base rate haven't resolved it, stop hypothesising and decompose.
Rank every page by absolute clicks lost, cumulate until you reach 80% of the total decline, and read only those pages. On most sites that's under twenty. Then pull query-level detail for each and check whether the loss is concentrated in a few queries or spread across all of them.
Concentrated means competitive or intent. Spread means CTR or technical. Full method in Which pages and queries explain most of my organic decline?.
The candidate that's newest and easiest to miss
An anomaly with no site-side cause and no competitor movement often turns out to be AI absorption.
Pew Research found that when an AI summary appears, users click a source link in only about 1% of visits, and our own state of AI search research, covering more than 22,000 answers, found Google AI Mode returns a citation-rich answer in 97.4% of matched B2B queries.
Its signature is distinctive: impressions steady, position steady, clicks down, and the loss concentrated in informational queries while commercial queries hold. Nothing on your site changed, and rolling back a deploy will achieve nothing.
Write down what you rejected
The habit that improves diagnosis over time is recording the candidates you eliminated and why.
Six months later, the next anomaly gets investigated faster because someone can see that seasonality was checked and cleared last time, and what the year-over-year pattern actually looked like. Without that record every investigation restarts from zero.
Make the first pass automatic
The bottleneck is rarely the analysis. It's that three days pass before anyone looks, and then the first hour goes on establishing what already happened.
A daily agent that classifies shape and pre-eliminates candidates turns a day of investigation into a ten-minute confirmation.

Start (schedule, daily 6am) → GSC Page Performance Summary (daily series, all top pages) → GSC Top Keywords for Site (branded regex applied) → GSC Indexing Status → GA4 AI Traffic Overview → Get Visibility Events → Code (compare against a trailing 28-day baseline, classify the shape across the nine patterns, split branded from non-brand, and check whether impressions or CTR moved) → Conditional (exit silently unless deviation exceeds threshold) → Loop / For Each over the top declining queries → Google Search node (detect Overview and feature presence) → Prompt LLM (name the shape, list surviving candidates in base-rate order, and state which check to run first) → Send Notification to the SEO channel.
Three design choices carry this. The Conditional keeps it silent on normal days so people keep reading it. Classifying the shape means the alert arrives with a hypothesis rather than a number. And the SERP check on declining queries pre-eliminates the AI-absorption candidate before anyone opens a browser, which is the check most likely to be skipped manually.
FAQ
Related answers
- My traffic dropped 40% overnight — how do I figure out what caused it?
- Which pages and queries explain most of my organic decline?
- How do I tell seasonality from a real SEO decline?
- How do I keep track of which site changes caused which traffic changes?
Want anomaly alerts that arrive with a ranked hypothesis? Start a free Analyze AI trial and connect Search Console.
