How we score keywords

Every keyword gets a composite score between 0 and 1. The formula is calibrated, transparent, and applied identically to every site. Here it is, with every lookup table and a full worked example.

Score = 0.25·CTR_gap
      + 0.15·Intent_norm
      + 0.25·SERP_Weakness
      + 0.25·Position_Accessibility
      − 0.10·Effort_norm

Worked example

Throughout this page we score a single real-world keyword end-to-end:

Keyword
échafaudage roulant 3m
GSC position
12
GSC CTR
0.008 (0.8%)
Intent
commercial
Content type
service_detailed (500–1500 words)
Top-10 SERP
2 directories, 1 article (2022)
01

CTR gap

weight: 25%

Is the page under-performing the CTR its position predicts?

We compare the actual CTR reported by Google Search Console to the expected CTR for that position (desktop, Google FR benchmarks). The gap is normalized by the maximum possible gap — the expected CTR at position 1 — so it lands in [0, 1].

When actual CTR matches or exceeds expected, the gap is 0 — the keyword is already converting. When it's far below expected, the signal lights up: the snippet, title, or rich-result coverage is leaving clicks on the table.

Expected CTR by position (Google FR desktop)
10.30
20.20
30.15
4–50.08
6–100.04
11–200.015
> 200.005
position = 12   →   expected_CTR = 0.015
gap = max(0.015 − 0.008, 0) = 0.007
CTR_gap = 0.007 / 0.30 = 0.02

CTR_gap = 0.02
02

Intent

weight: 15%

Does the keyword express commercial or transactional intent?

Transactional and commercial queries drive revenue; informational queries drive traffic. We weight them accordingly using DataForSEO's intent classification. This is the smallest weight in the formula — intent modulates priority but never dominates it.

Intent normalization
informational0.00
navigational0.25
commercial0.70
transactional1.00
intent = commercial   →   Intent_norm = 0.70

Intent_norm = 0.70
03

SERP weakness

weight: 25%

How weak is the top-10 competition?

A SERP dominated by directories, outdated articles, video-only results, or pages missing the keyword from their title is a vulnerable SERP. We scan the top 10 and sum signed weights — capped to [0, 1]. High-authority domains (DR > 50) subtract from the score: they are hard to displace regardless of snippet weakness.

Weights applied per top-10 item
Directory / local pack / compare-sites+0.25
Video result+0.20
Article > 2 years old+0.15
Keyword missing from title+0.10
Local-pack dominant SERP (≥3 packs)+0.10
Domain rank > 50−0.15
+0.25 (directory #1)
+0.25 (directory #2)
+0.15 (article from 2022, > 2 years)
────────────────────────
SERP_Weakness = 0.65

SERP_Weakness = 0.65
04

Position accessibility

weight: 25%

How reachable is the top-3 from the current position?

Page 1 positions 4–10 are the sweet spot: on-page work alone is usually enough to climb. Positions 1–3 already captured most of the traffic upside, so we down-weight them. Positions > 50 are ignored for short-term triage — they require backlinks or new content.

Position → accessibility
position ≤ 3 (already won)0.20
position ≤ 10 (sweet spot)1.00
position ≤ 20 (page 2)0.80
position ≤ 50 (needs backlinks)0.40
position > 50 (out of reach)0.10
position = 12   →   12 ≤ 20   →   Position_Accessibility = 0.80

Position_Accessibility = 0.80
05

Effort

weight: −10%

How expensive is the content needed to compete?

This is the only negative weight: heavier content formats subtract more from the score. A service page rewrite is cheap; a 3,000-word guide is not. Effort caps the enthusiasm when two keywords look equally winnable but one costs five times as much to ship.

Content type → effort
service_page (< 500 words)0.10
service_detailed (500–1500 words)0.30
article (1500–3000 words)0.50
comprehensive_guide (3000+ words)0.80
content_type = service_detailed   →   Effort_norm = 0.30

Effort_norm = 0.30

Composite score

Multiply each normalized signal by its weight, subtract the effort term, and read the result against the tier thresholds.

Score = 0.25·0.02
      + 0.15·0.70
      + 0.25·0.65
      + 0.25·0.80
      − 0.10·0.30
      = 0.44

Score Breakdown

CTR Opportunity (25%)0.02
Search Intent (15%)0.70
SERP Weakness (25%)0.65
Position Access (25%)0.80
Effort Required (-10%)0.30
Composite Score: 0.44

A score of 0.44 lands in the Opportunity tier — plan for it, not immediate. The thresholds, fixed in product logic:

Tier thresholds
score ≥ 0.50Quick Win — act this week
score ≥ 0.30Opportunity — plan for it
score ≥ 0.15Monitor — watch it
score < 0.15Not actionable — ignore

Calibration

The weights and lookup tables were calibrated on March 25, 2026 against the level-echafaudage.com dataset (DR 5, FR market, 1,200+ ranking keywords). The formula is identical for every site we score — we do not tune per-account.

Data sources: Google Search Console (real CTR and position via read-only OAuth), DataForSEO (SERP composition, search volume, intent classification, content age). No third-party scoring black-boxes.

AI Overview penalty: when the SERP contains an AI Overview block, the composite score is multiplied by 0.85 — a 15% haircut reflecting the click suppression we measured on impacted queries.

The scoring functions are deterministic and pure. Same inputs, same score, always.

Run your own site through this formula

Drop a domain in — we'll score every keyword using the exact formula above and show you the Quick Wins, Opportunities, and At Risk pages in under a minute.

Run your audit →