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
- Split named vs hidden queries before diagnosing any page.
- Don't build for a SERP you haven't looked at. The incumbent test takes 30 seconds and predicts more than any keyword metric.
- Depth multiplies rank on open SERPs and multiplies zero on owned ones. Same energy, route it by SERP.
- Never trust an aggregate trend you haven't decomposed.
- 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.













