// tech · analytics
TL;DR
Average position in Google Search Console is computed only over queries that produced impressions, so it moves when your query mix changes, not just when your rankings do. Losing low-ranking long-tail queries makes the number look better while traffic falls.
The problem
I opened Google Search Console expecting a bad week. What I found was a contradiction.
Over 16 months, on an education site I work on:
- Monthly clicks dropped from ~1.4k to ~400.
- Monthly impressions fell from ~30k+ to ~6k.
- Average position went from 14.7 to 6.6.
Traffic down 70%. Ranking “up” 8 positions. Both can’t be good news, so one of them is lying.
What I tried
First, what the metric actually measures:
$ avg_position = mean(position of every impression)
Google defines it as the average position value across all impressions, per query. The key detail: a query only enters the calculation if it produced at least one impression.
So the metric depends on which queries you appear for, not only on where you rank.
The composition effect
Say a site has two kinds of queries:
- 10 brand queries at position 1
- 90 long-tail queries at position 40
Average: ~36. Now the long-tail queries stop generating impressions. Only the brand queries remain. Average: 1.
Nothing improved. The bad data points left the sample.
It’s the same mechanism many SEO writers describe, in reverse: when a site grows into more keywords, the average gets worse even though the site is gaining ground.
My hypothesis (not yet verified)
- Long-tail coverage shrank, so low-position queries left the average.
- Traffic is mostly brand. My top two queries are brand terms and account for ~5k of the 12.2k clicks in the period. Brand traffic ranks at position ~1 by definition, which pulls the average down.
- Seasonality. Education searches (enrollment, courses) cluster around the academic calendar, so a year-over-year drop of this shape is not automatically a penalty.
What actually worked
Testing the hypothesis instead of trusting the headline number:
$ export queries --period 16m
$ export queries --period 3m
$ count distinct queries with impressions // did the count drop?
$ filter brand vs non-brand // where did the loss happen?
$ check Indexing > Pages // rule out de-indexing
Average position without a query or URL filter is not a performance metric. It’s a property of your query mix. Segment first (brand vs non-brand, per URL), then read position.
Key takeaways
- Average position only counts queries with impressions, so it changes when the set of queries changes.
- Losing low-ranking long-tail queries improves the average while traffic drops.
- Brand queries sit at position ~1 and drag the average down when they dominate.
- Segment by brand vs non-brand and by URL before reading position, and rule out de-indexing and seasonality.
References
12 Nov 2026 · #seo #analytics
GLB_