DEV Community

Cover image for Two weeks of Search Console data falsified my SEO playbook
Sonny
Sonny

Posted on

Two weeks of Search Console data falsified my SEO playbook

I run lans.cloud, a collection of 100 free single-purpose browser tools (classroom timers, name pickers, calculators, generators). The SEO playbook I launched with was the standard indie one: target specific long-tail phrases, build deep topic clusters, interlink everything, wait.

The site is young enough that I recently had exactly ~14 days of real Search Console data. I did a deep analysis run over all of it — every query, every page — expecting to confirm the playbook. Instead the data falsified almost every rule I was following. Here are the five lessons, with the actual numbers.

1. Your page-level averages are two populations wearing a coat

Search Console only attributes impressions to a query string when enough people search it — rare queries fall below a privacy floor and become invisible. On my site, only 52.6% of impressions had a named query. So I split every page's stats into a named slice and a hidden (anonymized) slice:

Slice Impressions Clicks CTR Avg position
Named queries 2,767 293 10.6% 29.3
Hidden queries 2,489 105 4.2% 13.3

The hidden slice ranks 16 positions better and converts 2.5× worse — and that inversion held across 24 separate pages.

Why this matters: one of my pages showed 555 impressions at position ~9 with zero clicks. Every SEO checklist says that's a title/snippet problem, so I rewrote the title. Nothing. A second rewrite was queued when the split showed what was actually happening: the page's named queries sat at position 34.8 (page 3–4, where zero clicks is the correct number), while 522 hidden impressions sat at position 7.7 — roughly 500 near-unique long questions hitting a big FAQ block, each answered directly in the snippet. Google was serving my content without the visit. No title rewrite can fix "the SERP already answered the question."

I could verify it because the site keeps a privacy-preserving aggregate referrer counter server-side: on pages Search Console says convert, the two instruments agree almost exactly (39 clicks vs 39 visits on one page). On the "position 9" page: 3 visits. The zero was real.

Takeaway: before you rewrite a title over "great position, no clicks," split named vs hidden queries (pull the query-dimension total and subtract it from the page-dimension total). And be suspicious of building pages whose entire payoff fits inside a featured snippet.

2. Content depth predicted nothing

The playbook says deep clusters rank. My deepest cluster — 29 classroom tools, its own hub page, dense internal linking — sat at median position 37. My shallowest real cluster — 4 Dragon Ball Z toys — sat at median position 7.

The obvious objections all failed:

  • "It's one breakout page." Remove the best page from the winning cluster entirely and its remaining 9 tools still return 6.6% CTR — still the best cluster.
  • "The deep cluster is older/newer." My oldest cohort (14–16 days indexed) had 2,645 impressions and 31 clicks at median position 32. The newest cohort (≤9 days) had 2,409 impressions and 364 clicks at median position 19. The newest pages outranked the oldest by 13 positions and out-clicked them 12:1. A 16-day-old page at position 68 with a 9-day-old sibling at position 9 has been evaluated and placed — it is not "warming up."
  • "The losing queries aren't long-tail enough." Average words per query was flat at 3.3–3.7 across every cluster, winners and losers alike. Phrase length discriminated nothing.

3. The variable that actually predicted rank: incumbents

What separated the winning clusters from the losing ones was visible on the SERP before I ever built the pages — I just never looked.

The winning family targets an intent no brand owns. No Wikipedia entry, no YouTube dominance, no decade-old exact-match domain — page one is a scatter of small sites, so a good page can actually place. The losing clusters compete with entrenched tools (and worse: a chunk of their impression volume turned out to be navigational — people typing a competitor's brand name. You will never be a better answer to <brand> name picker than the brand itself, and those impressions inflate your dashboard while converting nothing).

The cruelest illustration: my Roman numeral converter became the site's third-biggest page by impressions, surfacing for ~60 phrasing variants — at position 62, with 0 clicks. Meanwhile the winning family had ~40 phrasing variants of its intent at position ~7, converting at 16%. Same wide phrasing family, opposite outcomes. Variant explosion is an amplifier whose sign is set by your rank. A big impression count from many phrasings is not validation — check the position first.

My screening test now, before building anything: search the target phrase and look at who owns page one. Brand, Google widget, or ancient exact-match domain → don't build it (or accept that only backlinks/authority can move it, not content). Scatter of small sites → build.

4. Aggregate dashboards lie by mixture

My site-wide CTR "improved" from 5.5% to 8.6% in two weeks. Celebration? No — decomposition. The site is a two-population mixture: one viral-ish page at 20.6% CTR, everything else at 2.21%. Solving the mixture showed the entire "improvement" was the big page's impression share nearly doubling (17.9% → 34.7%). CTR at constant position improved nowhere.

The concentration behind that: one page held 77.9% of all clicks (click Gini coefficient: 0.978, computed for fun and regret), and 98 of 118 indexed pages had zero. If you only track the site-level line in Search Console, mix shift will masquerade as progress in both directions. Decompose before you celebrate — Simpson's paradox is alive and running an SEO dashboard near you.

5. Google picks one page per intent — and it may not pick the one you optimized

I worried about keyword cannibalization; the data says it barely exists (4 of 675 queries mapped to two of my pages). But the one real case was instructive: I have a straight coin flip page and a rigged coin flip page. For the generic query flip a coin, Google ranks the rigged page at position 11 and the generic page at position 83 — for identical query sets, a 60-position gap. The specific, personality-having page won the generic term. The generic page built "for SEO" got nothing.

What I'd tell past me

  1. Split named vs hidden queries before diagnosing any page.
  2. Don't build for a SERP you haven't looked at. The incumbent test takes 30 seconds and predicts more than any keyword metric.
  3. Depth multiplies rank on open SERPs and multiplies zero on owned ones. Same energy, route it by SERP.
  4. Never trust an aggregate trend you haven't decomposed.
  5. Wide phrasing families are amplifiers, not validation.

All of this came from a site you can poke at — the tools live at lans.cloud, the classroom set (the humbled cluster of lesson 2) is at lans.cloud/classroom-tools. Earlier posts in this series: the architecture and putting marketing docs in CI. Happy to share the analysis scripts if anyone wants them.

Top comments (0)