Cornerstone Handbook / Scoring Model
Scoring Model Technical Note v2.0
Technical documentation for the SEO Blitz v2.0 scoring model. This note covers the eight analysis dimensions, six content modes, dimension weights, signal thresholds, version history, and sample calculations.
Model Overview
The SEO Blitz v2.0 scoring model evaluates content quality across eight independent dimensions. The model is mode-aware: different content types (blog, landing, product, local, help, comparison) use different dimension weights, reflecting the fact that quality is contextual.
Key Properties
- Eight dimensions: Clarity, Completeness, Structure, Readability, Specificity, Repetition, Title Alignment, Publication Readiness.
- Six modes: Blog, Landing, Product, Local, Help, Comparison.
- Mode-weighted scoring: Each mode applies different weights to dimensions.
- Evidence-linked findings: Every finding includes what, where, why, and how to fix.
- Priority revisions: Top 3 findings are surfaced by severity and impact.
- Transparent thresholds: All signal thresholds are documented and versioned.
What the Score Means
| Score Range | Interpretation | Recommended Action |
|---|---|---|
| 85-100 | Strong: Ready for publication | Publish with confidence |
| 70-84 | Good: Minor revisions needed | Fix top 1-2 findings, then publish |
| 50-69 | Needs editing: Significant gaps | Address top 3-5 findings before publishing |
| 0-49 | High rewrite risk: Foundation issues | Substantial revision required; consider rewriting |
The Eight Dimensions
Each dimension measures a distinct aspect of content quality. Dimensions are scored independently on a 0-100 scale, then combined using mode-specific weights.
1. Clarity
What it measures: How easily the reader can understand the message.
Signals:
- Average sentence length (target: 15-20 words)
- Percentage of sentences over 25 words (target: under 25%)
- Average paragraph length (target: under 80 words)
- Jargon density (undefined technical terms per 100 words)
- Passive voice ratio (target: under 20%)
Scoring: 100 = all signals in target range. Points deducted proportionally for each signal outside range.
2. Completeness
What it measures: Whether the page answers the reader's core question.
Signals:
- Word count vs mode minimum (blog: 800, guide: 1200, product: 150, landing: 300, local: 400, comparison: 1000)
- Boilerplate ratio (target: under 50%)
- Required section presence (varies by mode)
- Unanswered question density (questions raised but not answered)
Scoring: 100 = meets word count, low boilerplate, all required sections present. Points deducted for thin content, high boilerplate, missing sections.
3. Structure
What it measures: How information is organized and sequenced.
Signals:
- Heading hierarchy correctness (no skipped levels)
- Heading descriptiveness (H2/H3 ratio that are descriptive vs vague)
- Visual break frequency (target: every 200-300 words)
- List/table/callout density (target: 1+ per 200 words)
Scoring: 100 = correct hierarchy, descriptive headings, adequate visual breaks. Points deducted for skipped levels, vague headings, walls of text.
4. Readability
What it measures: How much effort is required to read the content.
Signals:
- Flesch Reading Ease score (target: 60-70 for general audiences)
- Flesch-Kincaid Grade Level (target: 8-10 for general audiences)
- Syllables per word (target: under 1.5)
- Words per sentence (target: 15-20)
Scoring: 100 = all signals in target range. Points deducted for difficult readability (grade level over 12) or overly simple content (grade level under 6).
5. Specificity
What it measures: Whether claims are backed by concrete detail.
Signals:
- Number density (numbers per 500 words)
- Named sources (citations with names vs "studies show")
- Concrete examples (specific scenarios vs generic statements)
- Vague claim density ("helps", "improves", "better" without mechanism)
Scoring: 100 = high number density, named sources, concrete examples, no vague claims. Points deducted for vagueness, generic statements, unsupported claims.
6. Repetition
What it measures: Whether content unnecessarily repeats itself.
Signals:
- Repeated phrase density (phrases repeated 3+ times per 500 words)
- Keyword stuffing indicators (same term over 5% of word count)
- Conceptual redundancy (same idea expressed multiple ways)
- Paragraph-level duplication (similar paragraph openings)
Scoring: 100 = no significant repetition. Points deducted for repeated phrases, keyword stuffing, redundant concepts.
7. Title Alignment
What it measures: Whether the title accurately reflects the content.
Signals:
- Title tag / H1 match (exact or near-exact)
- Title keyword presence in body (target: 3-5 mentions of title terms)
- Content coverage match (does body deliver on title promise)
- Clickbait indicators (sensational words without substance)
Scoring: 100 = title matches H1, title terms appear in body, content delivers on promise. Points deducted for mismatches, missing title terms, clickbait.
8. Publication Readiness
What it measures: Whether the page is fit for publication.
Signals:
- Meta description presence and length (150-160 characters)
- Author/date visibility
- Internal link presence (2+ internal links)
- Placeholder text absence (no "lorem ipsum", "TODO")
- Broken link absence
- Consistency (terms used uniformly)
Scoring: 100 = all signals present and correct. Points deducted for missing metadata, no authorship, placeholder text, broken links, inconsistency.
The Six Content Modes
Each mode represents a content type with distinct reader expectations and quality standards. The mode determines which dimensions matter most.
1. Blog
Reader intent: Learn about a topic, stay informed, get a quick answer.
Required sections: Introduction, 3+ supporting points, conclusion.
Minimum word count: 800 words.
Key dimensions: Clarity, Structure, Readability.
2. Landing
Reader intent: Evaluate a specific offer and decide whether to take action.
Required sections: Value proposition, proof, call to action.
Minimum word count: 300 words.
Key dimensions: Clarity, Publication Readiness, Title Alignment.
3. Product
Reader intent: Understand what the product is and whether to buy.
Required sections: Problem, solution, features, benefits, price, CTA.
Minimum word count: 150 words.
Key dimensions: Specificity, Completeness, Publication Readiness.
4. Local
Reader intent: Find a local provider and decide whether to contact them.
Required sections: Service description, service area, provider info, proof, contact.
Minimum word count: 400 words.
Key dimensions: Completeness, Specificity, Publication Readiness.
5. Help
Reader intent: Learn how to do something specific.
Required sections: Definition, prerequisites, steps, examples, troubleshooting.
Minimum word count: 1200 words.
Key dimensions: Completeness, Structure, Specificity.
6. Comparison
Reader intent: Decide between two or more options.
Required sections: Items compared, criteria, side-by-side, recommendation, methodology.
Minimum word count: 1000 words.
Key dimensions: Specificity, Structure, Completeness.
Mode Weights
Each mode applies different weights to the eight dimensions. Weights sum to 1.0 for each mode.
| Dimension | Blog | Landing | Product | Local | Help | Comparison |
|---|---|---|---|---|---|---|
| Clarity | 0.18 | 0.20 | 0.12 | 0.12 | 0.12 | 0.12 |
| Completeness | 0.14 | 0.12 | 0.18 | 0.18 | 0.18 | 0.16 |
| Structure | 0.16 | 0.12 | 0.10 | 0.10 | 0.16 | 0.16 |
| Readability | 0.14 | 0.10 | 0.08 | 0.08 | 0.10 | 0.08 |
| Specificity | 0.12 | 0.14 | 0.20 | 0.18 | 0.16 | 0.20 |
| Repetition | 0.10 | 0.10 | 0.10 | 0.10 | 0.10 | 0.10 |
| Title Alignment | 0.08 | 0.14 | 0.12 | 0.12 | 0.08 | 0.10 |
| Publication Readiness | 0.08 | 0.08 | 0.10 | 0.12 | 0.10 | 0.08 |
Weight Rationale
Blog: Prioritizes Clarity (0.18) and Structure (0.16) because readers must easily follow the argument.
Landing: Prioritizes Clarity (0.20) and Title Alignment (0.14) because visitors must immediately understand the offer.
Product: Prioritizes Specificity (0.20) and Completeness (0.18) because buyers need concrete details.
Local: Prioritizes Completeness (0.18) and Specificity (0.18) because searchers need complete local information.
Help: Prioritizes Completeness (0.18) and Structure (0.16) because learners need complete, well-organized instructions.
Comparison: Prioritizes Specificity (0.20) and Structure (0.16) because comparers need detailed, organized comparisons.
Signal Thresholds
Each signal has a target range and a tolerance range. Signals in the target range contribute maximum points. Signals in the tolerance range contribute partial points. Signals outside both ranges contribute zero points for that signal.
| Signal | Target Range | Tolerance Range | Weight in Dimension |
|---|---|---|---|
| Avg sentence length | 15-20 words | 12-25 words | 20% |
| Sentences over 25 words | Under 25% | 25-40% | 15% |
| Avg paragraph length | Under 80 words | 80-120 words | 15% |
| Jargon density | Under 2 per 100 words | 2-4 per 100 words | 15% |
| Passive voice ratio | Under 20% | 20-30% | 10% |
| Word count vs minimum | 100%+ of minimum | 75-99% of minimum | 30% |
| Boilerplate ratio | Under 50% | 50-60% | 20% |
| Flesch Reading Ease | 60-70 | 50-80 | 30% |
| Flesch-Kincaid Grade | 8-10 | 6-12 | 25% |
| Number density | 5+ per 500 words | 3-4 per 500 words | 25% |
| Repeated phrase density | Under 3 per 500 words | 3-5 per 500 words | 30% |
| Title/H1 match | Exact or near-exact | Same topic, different wording | 30% |
| Meta description | 150-160 characters | 120-180 characters | 20% |
Scoring Algorithm
The scoring algorithm proceeds in four stages: signal measurement, dimension scoring, weighted combination, and finding generation.
Stage 1: Signal Measurement
for each signal in signals:
raw_value = measure_signal(content, signal)
normalized_score = normalize(raw_value, target_range, tolerance_range)
// normalized_score is 0.0 to 1.0
Stage 2: Dimension Scoring
for each dimension in dimensions:
dimension_score = 0
for each signal in dimension.signals:
dimension_score += normalized_score[signal] * signal.weight
dimension_score = dimension_score * 100 // Convert to 0-100 scale
Stage 3: Weighted Combination
overall_score = 0
for each dimension in dimensions:
overall_score += dimension_score[dimension] * mode_weight[dimension]
// Overall is secondary to top 3 revisions
top_revisions = select_top_findings(findings, severity, points, dimension_weight)
Stage 4: Finding Generation
findings = []
for each dimension in dimensions:
if dimension_score < 70:
findings.append(generate_finding(dimension, signals, evidence))
// Sort by severity, then points impact, then dimension weight
findings.sort_by(severity_desc, points_desc, weight_desc)
top_3 = findings[0:3]
Sample Calculations
These examples show how the scoring model evaluates different content types.
Example 1: Blog Post (Strong)
| Dimension | Raw Score | Blog Weight | Weighted |
|---|---|---|---|
| Clarity | 92 | 0.18 | 16.6 |
| Completeness | 88 | 0.14 | 12.3 |
| Structure | 90 | 0.16 | 14.4 |
| Readability | 85 | 0.14 | 11.9 |
| Specificity | 82 | 0.12 | 9.8 |
| Repetition | 95 | 0.10 | 9.5 |
| Title Alignment | 88 | 0.08 | 7.0 |
| Publication Readiness | 90 | 0.08 | 7.2 |
| Overall | 1.00 | 88.7 |
Interpretation: Score 88.7 = Strong, ready for publication. Top findings might include minor specificity improvements.
Example 2: Product Page (Needs Editing)
| Dimension | Raw Score | Product Weight | Weighted |
|---|---|---|---|
| Clarity | 78 | 0.12 | 9.4 |
| Completeness | 55 | 0.18 | 10.0 |
| Structure | 70 | 0.10 | 7.0 |
| Readability | 80 | 0.08 | 6.4 |
| Specificity | 45 | 0.20 | 9.0 |
| Repetition | 85 | 0.10 | 8.5 |
| Title Alignment | 60 | 0.12 | 7.2 |
| Publication Readiness | 50 | 0.10 | 5.0 |
| Overall | 1.00 | 62.5 |
Interpretation: Score 62.5 = Needs editing. Top findings: add specific details (Specificity 45), expand completeness (55), fix metadata (Publication Readiness 50).
Example 3: Help Article (High Rewrite Risk)
| Dimension | Raw Score | Help Weight | Weighted |
|---|---|---|---|
| Clarity | 65 | 0.12 | 7.8 |
| Completeness | 40 | 0.18 | 7.2 |
| Structure | 50 | 0.16 | 8.0 |
| Readability | 70 | 0.10 | 7.0 |
| Specificity | 35 | 0.16 | 5.6 |
| Repetition | 60 | 0.10 | 6.0 |
| Title Alignment | 55 | 0.08 | 4.4 |
| Publication Readiness | 45 | 0.10 | 4.5 |
| Overall | 1.00 | 50.5 |
Interpretation: Score 50.5 = High rewrite risk. Top findings: expand completeness (missing steps), add specificity (no examples), fix structure (no clear sections).
Version History
v2.0 (August 2026)
Added:
- Six content modes with distinct dimension weights
- Eight independent dimensions (split from single score)
- Editorial brief support for title alignment and specificity
- Evidence-linked findings with what/where/why/action/example
- Priority revision selection (top 3 by severity)
- Model changelog in analyzer output
Changed:
- Overall score is now secondary to top 3 revisions
- Readability is now a separate dimension (was part of Clarity)
- Title Alignment is now a separate dimension (was part of Structure)
- Publication Readiness is now a separate dimension (was metadata checks only)
Known limitations:
- No fact-checking (claims are not verified against reality)
- No backlink or off-page factor analysis
- No Core Web Vitals or technical performance measurement
- No schema markup validation
- No competition or SERP analysis
v1.1 (May 2026)
Added:
- Repeated terms detection
- Keyword cloud visualization
- FAQ section validation
Changed:
- Adjusted word count thresholds for better precision
v1.0 (Initial Release)
Included:
- Basic word count analysis
- Sentence and paragraph statistics
- Title length checking
- Repeated terms detection
Known Limitations
The v2.0 scoring model is transparent about what it does and does not measure.
What the Model Does Not Measure
- Fact-checking: The model does not verify whether claims are true. A page can score 95 while making false statements.
- Backlinks: The model does not analyze inbound links or domain authority.
- Core Web Vitals: The model does not measure page speed, stability, or visual performance.
- Schema markup: The model does not validate structured data.
- Competition: The model does not analyze competing pages or SERP difficulty.
- Search intent: The model does not claim to predict search-engine intent. The editorial brief captures declared reader intent only.
- Images and video: The model analyzes text only. Image alt text is checked, but image quality and relevance are not evaluated.
- External links: The model counts external links but does not evaluate their quality or relevance.
When to Use Human Judgment
Always. The score is one input in a human editorial review. Use it to:
- Identify structural issues you might have missed
- Prioritize revision work (top 3 findings)
- Track improvement over drafts (before/after comparison)
Do not use it to:
- Replace human editorial judgment
- Predict search rankings
- Justify publishing low-quality content
- Evaluate content outside the supported modes
Implementation Notes
For developers integrating the v2.0 scoring model.
Architecture
- Engine location:
assets/analyzer.js(deferred, same-origin static file) - Model version:
MODEL_VERSION = 'v2.0' - Mode config:
MODESobject with dimension weights per mode - Dimension scorers: Eight independent functions, each returning 0-100
- Finding generation: Severity-based selection with evidence excerpts
DOM Contract
The analyzer expects these elements in the host page:
#textContent- Main textarea for content input#titleInput- Title input field#modeSelect- Content mode dropdown#briefBlock- Editorial brief block (reader, question, action)#scoreDisplay- Overall score display#breakdownGrid- Eight-card dimension breakdown#topRevisions- Top 3 priority revisions list#sugList- Evidence findings card list
Export Formats
- Plain text:
formatReport()- Copy-report clipboard format - Markdown:
formatMarkdown()- GitHub-flavored with tables - HTML:
formatHtmlDoc()- Standalone printable document - JSON: Full report object with all fields
Persistence
- Autosave: Debounced 180ms, localStorage key
seoblitz-draft - Named drafts: Array in localStorage key
seoblitz-drafts - Before/after: Snapshot in localStorage key
seoblitz-before
Testing
- Unit tests: Dimension scorers with fixture content
- E2E tests: Playwright tests in
tests/e2e/seo-tool.spec.js,tests/e2e/phase-2.spec.js,tests/e2e/phase-3.spec.js - Mode exit gate: Each mode must produce materially different top findings