W8 from the SEO programme, promoted from last to first by the W0 baseline.
Why this is the highest-value change available
Search Console says these pages already rank and simply are not clicked:
Query
Impressions
Clicks
CTR
Position
compare school performance
8,168
35
0.43%
6.1
compare schools
3,893
34
0.87%
7.2
school compare
873
80
9.16%
5.6
The last row is the control. Same page, slightly worse neighbourhood of the same results list, twenty times the click-through — which rules out a ranking explanation. When the snippet gives a reason to click, it gets clicked.
These SERPs are owned by the DfE own Compare school performance service. The old title spent its most valuable pixels on a lowercase brand nobody searches for, then followed it with a near-paraphrase of that service name. Beside the government own result, it read as a lookalike.
The approach
Intent in the title, differentiator in the description. The title matches what people type, so relevance is not traded away; the description carries the one fact gov.uk does not publish — how close you had to live to get a place.
Page
Title
Chars
/
Compare Schools Side by Side | schoolcompare
44
/compare
School Comparison Tool — Up to Five at Once | schoolcompare
59
/rankings
Primary & Secondary School League Tables | schoolcompare
56
/admissions
School Admissions Deadlines & Offer Days | schoolcompare
56
All titles under Google 60-character truncation; all descriptions 139–150, under 155.
Three deliberate calls worth reviewing:
/compare takes the tool phrasing, not the homepage phrase. Two pages chasing compare schools is how a site competes with itself.
School Rankings became League Tables. The old title matched nothing anyone types; league tables is the phrase parents search, and it spikes each results day.
No hard school counts anywhere. The corpus moves with every data refresh, and this repo has already shipped one copy bug of exactly that kind (three schools against MAX_SCHOOLS = 5).
The root layout default title and Open Graph copy were saying something different again — they now agree with the homepage.
Tests
Guard the mechanics, not the wording, so the copy stays free to iterate: SERP length limits, intent keyword present, differentiator present, no brand-first title, no drift-prone counts. Plus two e2e journeys asserting the live pages ship a description and do not open with the brand.
C4 — named-school queries — is the larger bucket (38,072 impressions) but its problem is position 20.2, not CTR. That is a ranking problem and belongs to the new workstream the baseline recommends, where it can be measured on its own.
Measuring it
Baseline frozen at 2026-08-20: C1 at position 7.7, 1.43% CTR, 295 clicks. CTR should move within two to four weeks of Google recrawling; position should not move much, and does not need to.
W8 from the SEO programme, promoted from last to first by the [W0 baseline](https://claude.ai/code/artifact/418c0e30-1782-464a-bb48-3feadefe829f).
## Why this is the highest-value change available
Search Console says these pages already rank and simply are not clicked:
| Query | Impressions | Clicks | CTR | Position |
|---|---|---|---|---|
| compare school performance | 8,168 | 35 | **0.43%** | 6.1 |
| compare schools | 3,893 | 34 | **0.87%** | 7.2 |
| school compare | 873 | 80 | **9.16%** | 5.6 |
The last row is the control. Same page, slightly *worse* neighbourhood of the same results list, twenty times the click-through — which rules out a ranking explanation. When the snippet gives a reason to click, it gets clicked.
These SERPs are owned by the DfE own `Compare school performance` service. The old title spent its most valuable pixels on a lowercase brand nobody searches for, then followed it with a near-paraphrase of that service name. Beside the government own result, it read as a lookalike.
## The approach
**Intent in the title, differentiator in the description.** The title matches what people type, so relevance is not traded away; the description carries the one fact gov.uk does not publish — how close you had to live to get a place.
| Page | Title | Chars |
|---|---|---|
| `/` | Compare Schools Side by Side \| schoolcompare | 44 |
| `/compare` | School Comparison Tool — Up to Five at Once \| schoolcompare | 59 |
| `/rankings` | Primary & Secondary School League Tables \| schoolcompare | 56 |
| `/admissions` | School Admissions Deadlines & Offer Days \| schoolcompare | 56 |
All titles under Google 60-character truncation; all descriptions 139–150, under 155.
Three deliberate calls worth reviewing:
- **`/compare` takes the tool phrasing, not the homepage phrase.** Two pages chasing `compare schools` is how a site competes with itself.
- **`School Rankings` became `League Tables`.** The old title matched nothing anyone types; league tables is the phrase parents search, and it spikes each results day.
- **No hard school counts anywhere.** The corpus moves with every data refresh, and this repo has already shipped one copy bug of exactly that kind (`three schools` against `MAX_SCHOOLS = 5`).
The root layout default title and Open Graph copy were saying something different again — they now agree with the homepage.
## Tests
Guard the mechanics, not the wording, so the copy stays free to iterate: SERP length limits, intent keyword present, differentiator present, no brand-first title, no drift-prone counts. Plus two e2e journeys asserting the live pages ship a description and do not open with the brand.
Frontend 231 passed, backend 70 passed, `tsc --noEmit` clean, `next build` green.
## What this does not cover
C4 — named-school queries — is the larger bucket (38,072 impressions) but its problem is **position 20.2**, not CTR. That is a ranking problem and belongs to the new workstream the baseline recommends, where it can be measured on its own.
## Measuring it
Baseline frozen at 2026-08-20: C1 at position 7.7, 1.43% CTR, 295 clicks. CTR should move within two to four weeks of Google recrawling; position should not move much, and does not need to.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
The baseline says these pages already rank and are not clicked. 'compare
school performance' sits at position 6.1 with 0.43% CTR; 'compare schools' at
7.2 with 0.87%. The brand query 'school compare' draws 9.16% from the same
neighbourhood of the same results page, which rules out a ranking explanation
— when the snippet gives a reason to click, it gets clicked.
These SERPs are owned by the DfE's own 'Compare school performance' service.
The old title put a lowercase brand nobody searches for in the most valuable
pixels, then a near-paraphrase of that service's name. Beside the government's
own result it read as a lookalike.
Intent in the title, differentiator in the description. Titles now match what
people type, and the descriptions carry the one fact gov.uk does not publish:
how close you had to live to get a place.
/compare deliberately takes the tool phrasing rather than the homepage's, so
the two pages stop competing for one phrase. The root layout's default and
Open Graph copy were saying something different again; they now agree.
No hard school counts in any of it. The corpus moves with every data refresh
and this repo has already shipped one copy bug of that kind.
Tests guard the mechanics — SERP length, intent keyword, the differentiator,
no brand-first title — and leave the wording free to iterate.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
tudor
merged commit b187a478c9 into main2026-08-20 23:26:12 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
W8 from the SEO programme, promoted from last to first by the W0 baseline.
Why this is the highest-value change available
Search Console says these pages already rank and simply are not clicked:
The last row is the control. Same page, slightly worse neighbourhood of the same results list, twenty times the click-through — which rules out a ranking explanation. When the snippet gives a reason to click, it gets clicked.
These SERPs are owned by the DfE own
Compare school performanceservice. The old title spent its most valuable pixels on a lowercase brand nobody searches for, then followed it with a near-paraphrase of that service name. Beside the government own result, it read as a lookalike.The approach
Intent in the title, differentiator in the description. The title matches what people type, so relevance is not traded away; the description carries the one fact gov.uk does not publish — how close you had to live to get a place.
//compare/rankings/admissionsAll titles under Google 60-character truncation; all descriptions 139–150, under 155.
Three deliberate calls worth reviewing:
/comparetakes the tool phrasing, not the homepage phrase. Two pages chasingcompare schoolsis how a site competes with itself.School RankingsbecameLeague Tables. The old title matched nothing anyone types; league tables is the phrase parents search, and it spikes each results day.three schoolsagainstMAX_SCHOOLS = 5).The root layout default title and Open Graph copy were saying something different again — they now agree with the homepage.
Tests
Guard the mechanics, not the wording, so the copy stays free to iterate: SERP length limits, intent keyword present, differentiator present, no brand-first title, no drift-prone counts. Plus two e2e journeys asserting the live pages ship a description and do not open with the brand.
Frontend 231 passed, backend 70 passed,
tsc --noEmitclean,next buildgreen.What this does not cover
C4 — named-school queries — is the larger bucket (38,072 impressions) but its problem is position 20.2, not CTR. That is a ranking problem and belongs to the new workstream the baseline recommends, where it can be measured on its own.
Measuring it
Baseline frozen at 2026-08-20: C1 at position 7.7, 1.43% CTR, 295 clicks. CTR should move within two to four weeks of Google recrawling; position should not move much, and does not need to.
🤖 Generated with Claude Code
https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj