# On-Page SEO Scoring Rubric

Detailed scoring criteria for each of the 8 audit sections. Use this rubric to ensure consistent, objective scoring across audits.

## How to Use This Rubric

1. Score each section independently using the criteria below
2. Apply the section weight to calculate the weighted score
3. Sum all weighted scores for the overall page score (out of 100)
4. Use calibration examples to verify your scoring is consistent

## Section 1: Title Tag (Weight: 15%, Max: 15 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Keyword presence | 3 | Primary keyword appears in title |
| Keyword position | 2 | Primary keyword in first half of title |
| Length optimization | 2 | Between 50-60 characters |
| Uniqueness | 2 | Title is unique across the site |
| Compelling copy | 2 | Includes benefit, modifier, or hook |
| Intent match | 2 | Title matches search intent accurately |
| Brand inclusion | 1 | Brand name present (at end) |
| No truncation risk | 1 | Displays fully in SERP without cutoff |

### Calibration Examples

**Score 15/15 (Excellent)**:
- Title: "Keyword Research: 7 Proven Methods to Find Low-Competition Keywords | Brand"
- 58 characters, keyword at front, benefit-driven, unique, brand at end

**Score 11/15 (Good)**:
- Title: "The Complete Guide to Keyword Research for Beginners"
- 52 characters, keyword present but not at front, no brand, still compelling

**Score 7/15 (Needs Work)**:
- Title: "Keyword Research"
- Too short (16 chars), no benefit, no brand, not compelling, generic

**Score 3/15 (Poor)**:
- Title: "Blog Post #47 - Untitled"
- No keyword, no benefit, not descriptive, not unique

**Score 0/15 (Missing)**:
- No title tag present, or title tag is empty

## Section 2: Meta Description (Weight: 5%, Max: 5 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Keyword inclusion | 1 | Primary keyword appears naturally |
| Length optimization | 1 | Between 150-160 characters |
| Call-to-action | 1 | Contains explicit or implicit CTA |
| Unique description | 1 | Not duplicated from other pages |
| Accurate summary | 1 | Accurately describes page content |

### Calibration Examples

**Score 5/5 (Excellent)**:
- Description: "Learn 7 proven keyword research methods that top SEOs use to find low-competition opportunities. Includes free templates, real examples, and step-by-step walkthroughs. Get started today."
- 155 chars, keyword present, CTA ("Get started"), accurate, unique

**Score 3/5 (Needs Work)**:
- Description: "This page talks about keyword research and some tips you might find useful for SEO."
- 83 chars (too short), weak copy, no CTA, vague

**Score 0/5 (Missing)**:
- No meta description set; search engine generates snippet automatically

## Section 3: Header Structure (Weight: 10%, Max: 10 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Single H1 present | 2 | Exactly one H1 on the page |
| H1 contains keyword | 2 | Primary keyword in H1 text |
| Logical hierarchy | 2 | No skipped levels (H1→H2→H3, not H1→H3) |
| H2s cover key subtopics | 2 | H2s address main topic facets |
| Descriptive headers | 1 | Headers describe section content clearly |
| Keyword variations in H2s | 1 | Secondary keywords or LSI terms in subheadings |

### Calibration Examples

**Score 10/10 (Excellent)**:
```
H1: How to Do Keyword Research: A Step-by-Step Guide
  H2: What Is Keyword Research and Why Does It Matter?
  H2: 7 Keyword Research Methods That Work
    H3: Method 1: Seed Keyword Brainstorming
    H3: Method 2: Competitor Keyword Analysis
    H3: Method 3: Google Autocomplete Mining
  H2: Free Keyword Research Tools Compared
  H2: How to Prioritize Keywords by Difficulty
  H2: Keyword Research FAQ
```
- Single H1 with keyword, logical hierarchy, descriptive H2s with variations

**Score 6/10 (Needs Work)**:
```
H1: Keyword Research
H2: Introduction
H2: Methods
H2: Tools
H2: Conclusion
```
- Single H1 but generic, H2s are vague, no keyword variations

**Score 2/10 (Poor)**:
```
H1: Welcome to Our Blog
H1: Keyword Research Guide
H3: Some Tips
H2: More Information
```
- Multiple H1s, skipped levels, generic, no keyword strategy

## Section 4: Content Quality (Weight: 25%, Max: 25 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Sufficient length | 4 | Meets minimum for query type (see benchmarks) |
| Comprehensive coverage | 4 | Covers all major subtopics that top-ranking pages cover |
| Unique value | 4 | Original insights, data, or perspective not found elsewhere |
| Up-to-date information | 3 | Statistics, dates, and references are current |
| Proper formatting | 3 | Uses lists, tables, bold, images to improve readability |
| Readability | 3 | Appropriate reading level for target audience |
| E-E-A-T signals | 4 | Author byline, credentials, first-person experience, cited sources |

### Content Length Benchmarks (for "Sufficient length" criterion)

| Query Type | Minimum for 4/4 | Minimum for 3/4 | Minimum for 2/4 | Below 1/4 |
|-----------|-----------------|-----------------|-----------------|-----------|
| Informational | 1,500+ words | 1,000-1,499 | 500-999 | <500 |
| Commercial | 1,200+ words | 800-1,199 | 400-799 | <400 |
| Transactional | 500+ words | 350-499 | 200-349 | <200 |
| Local | 400+ words | 250-399 | 150-249 | <150 |

### Calibration Examples

**Score 25/25 (Excellent)**:
- 2,400-word guide on keyword research
- Covers all subtopics competitors cover plus unique methods
- Contains original data from author's experiments
- All statistics from the last 12 months
- Well-formatted with tables, lists, images, code examples
- Written at appropriate level for target audience
- Author byline with SEO credentials, first-person "I tested" language

**Score 16/25 (Good)**:
- 1,600-word guide, covers main subtopics
- Some unique insights but mostly curated information
- Most statistics current, a few outdated
- Good formatting but could use more visual elements
- Author byline present but limited credentials

**Score 8/25 (Needs Work)**:
- 700-word article on an informational query (too thin)
- Missing several subtopics competitors cover
- No original data or insights
- Several outdated statistics
- Wall of text with minimal formatting
- No author byline or E-E-A-T signals

## Section 5: Keyword Optimization (Weight: 15%, Max: 15 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Keyword in title | 2 | Primary keyword in title tag |
| Keyword in H1 | 2 | Primary keyword in H1 |
| Keyword in first 100 words | 2 | Primary keyword appears early in content |
| Keyword density (0.5-2.5%) | 2 | Natural density, not stuffed, not too sparse |
| Secondary keywords present | 2 | 2-3 secondary/related keywords used |
| LSI/semantic terms | 2 | Related terms and synonyms present |
| Keyword in URL | 1 | Primary keyword in URL slug |
| Keyword in image alt text | 1 | At least one image alt contains keyword naturally |
| Keyword in meta description | 1 | Primary keyword in meta description |

### Keyword Density Guidelines

| Density | Score Impact | Assessment |
|---------|-------------|-----------|
| 0.5-1.0% | Full points | Natural, well-integrated |
| 1.0-2.0% | Full points | Acceptable, slightly keyword-focused |
| 2.0-2.5% | -1 point | Borderline, review for naturalness |
| 2.5-3.0% | -2 points | Over-optimized, needs reduction |
| >3.0% | 0 points for density | Keyword stuffing, immediate fix needed |
| <0.5% | -1 point | Under-optimized, add more natural usage |

### Calibration Examples

**Score 15/15 (Excellent)**:
- "keyword research" in title (position 1), H1, first sentence, URL slug, 1 image alt
- Density: 1.2% across 2,000 words (24 occurrences, well-distributed)
- Secondary keywords: "keyword tool", "search volume", "keyword difficulty" all present
- LSI terms: "SEO", "search terms", "Google", "organic traffic", "SERP" present

**Score 9/15 (Needs Work)**:
- Keyword in title and H1, but not in first 100 words
- Density: 0.3% (too sparse for a 2,000-word article)
- Missing secondary keywords
- No LSI/semantic terms beyond the primary keyword

## Section 6: Internal/External Links (Weight: 10%, Max: 10 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Internal link count | 2 | 3-5+ contextual internal links (per 1,000 words) |
| Internal link relevance | 2 | Links point to topically related pages |
| Descriptive anchor text | 2 | Anchors describe destination, not "click here" |
| External link quality | 2 | Links to authoritative, relevant external sources |
| No broken links | 1 | All links return 200 status |
| Link placement | 1 | Links placed naturally within content flow |

### Internal Link Count Guidelines

| Content Length | Minimum Links | Ideal Range | Too Many |
|---------------|--------------|-------------|---------|
| <500 words | 2 | 2-4 | >8 |
| 500-1,000 words | 3 | 3-6 | >12 |
| 1,000-2,000 words | 4 | 5-10 | >20 |
| 2,000+ words | 5 | 8-15 | >25 |

### Calibration Examples

**Score 10/10 (Excellent)**:
- 8 internal links in a 2,000-word article
- All link to relevant related content
- Anchor text like "learn about keyword difficulty scoring" (descriptive)
- 3 external links to authoritative sources (Google documentation, industry studies)
- Zero broken links

**Score 5/10 (Needs Work)**:
- 2 internal links in a 2,000-word article (too few)
- One link uses "click here" anchor text
- No external links to sources
- One broken link found

## Section 7: Image Optimization (Weight: 10%, Max: 10 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| All images have alt text | 3 | Every image has descriptive alt attribute |
| Alt text includes keywords | 2 | At least 1 image alt naturally includes primary keyword |
| Descriptive file names | 1 | Files named descriptively (keyword-research-tool.webp, not IMG_4532.jpg) |
| Optimized file sizes | 2 | Images compressed appropriately (<200KB for photos, <50KB for graphics) |
| Modern formats | 1 | Uses WebP or AVIF where supported |
| Lazy loading | 1 | Below-fold images use loading="lazy" |

### Image Size Guidelines

| Image Type | Target Size | Format | Notes |
|-----------|------------|--------|-------|
| Hero/banner | <200KB | WebP | Resize to actual display dimensions |
| Content photos | <150KB | WebP | Compress at 80% quality |
| Screenshots | <100KB | WebP/PNG | Use PNG only if text clarity critical |
| Icons/graphics | <30KB | SVG/WebP | SVG preferred for vector graphics |
| Thumbnails | <50KB | WebP | Generate at actual thumbnail dimensions |

### Calibration Examples

**Score 10/10 (Excellent)**:
- 5 images, all with descriptive alt text
- Alt text: "screenshot of Ahrefs keyword research tool showing difficulty score"
- Files named: keyword-research-tool-ahrefs.webp
- All images <150KB, WebP format, lazy loading on below-fold images

**Score 4/10 (Needs Work)**:
- 3 images, 1 missing alt text
- Alt text on others: "image1", "screenshot" (not descriptive)
- Files named: IMG_3421.jpg, photo.png
- One image is 1.2MB uncompressed JPEG

## Section 8: Page-Level Technical (Weight: 10%, Max: 10 points)

### Scoring Criteria

| Criterion | Points | Requirement |
|-----------|--------|-------------|
| Clean URL structure | 2 | Short, descriptive, keyword-containing URL |
| Correct canonical tag | 2 | Self-referencing canonical or appropriate cross-domain canonical |
| Mobile-friendly | 2 | Passes mobile-friendly test, responsive layout |
| Page speed (LCP) | 2 | LCP ≤2.5s on mobile |
| HTTPS | 1 | Page served over HTTPS with valid certificate |
| Schema markup | 1 | Appropriate schema type implemented (Article, FAQ, HowTo, etc.) |

### URL Quality Guidelines

| Aspect | Good | Bad |
|--------|------|-----|
| Length | /blog/keyword-research-guide | /blog/2024/01/15/the-complete-ultimate-guide-to-keyword-research-for-beginners-and-experts |
| Keywords | /services/seo-audit | /services/page-id-4532 |
| Characters | lowercase, hyphens | UPPERCASE, underscores, special chars |
| Parameters | /products/shoes (clean) | /products?id=432&color=red&size=9 |

### Calibration Examples

**Score 10/10 (Excellent)**:
- URL: /blog/keyword-research-guide (clean, keyword-present)
- Self-referencing canonical tag present
- Fully responsive, passes mobile-friendly test
- LCP: 1.8s on mobile
- HTTPS with valid certificate
- Article + FAQ schema implemented

**Score 5/10 (Needs Work)**:
- URL: /blog/?p=4532 (not descriptive)
- No canonical tag
- Mobile-friendly but some tap targets too small
- LCP: 3.2s (needs improvement)
- HTTPS present
- No schema markup

## Overall Score Calculation

### Formula

```
Overall Score = Sum of (Section Score / Section Max * Section Weight * 100)
```

### Example Calculation

| Section | Raw Score | Max | Weight | Weighted Score |
|---------|-----------|-----|--------|---------------|
| Title Tag | 12 | 15 | 15% | 12.0 |
| Meta Description | 4 | 5 | 5% | 4.0 |
| Header Structure | 8 | 10 | 10% | 8.0 |
| Content Quality | 20 | 25 | 25% | 20.0 |
| Keyword Optimization | 11 | 15 | 15% | 11.0 |
| Internal/External Links | 7 | 10 | 10% | 7.0 |
| Image Optimization | 6 | 10 | 10% | 6.0 |
| Page-Level Technical | 8 | 10 | 10% | 8.0 |
| **Total** | | | **100%** | **76.0/100** |

### Overall Score Interpretation

| Score Range | Grade | Assessment |
|------------|-------|-----------|
| 90-100 | A+ | Exceptional — minor tweaks only |
| 80-89 | A | Strong — a few optimization opportunities |
| 70-79 | B | Good — several areas need attention |
| 60-69 | C | Average — significant improvements needed |
| 50-59 | D | Below average — major issues present |
| <50 | F | Poor — comprehensive overhaul required |

## Calibration Guidance

### Avoiding Common Scoring Errors

1. **Halo effect**: A great title does not mean great content. Score each section independently.
2. **Recency bias**: Do not inflate scores for recently published content. Freshness is one factor among many.
3. **Tool dependency**: If you cannot verify a metric (e.g., page speed without tool access), note it as "unverified" rather than guessing.
4. **Competitor anchoring**: Score against the rubric criteria, not relative to competitors. Competitor comparison is a separate analysis step.
5. **Intent mismatch**: A page with perfect technical SEO but wrong intent alignment should still score low on Content Quality.

### When to Adjust Weights

The default weights suit most content pages. Consider adjusting for:

| Page Type | Increase Weight | Decrease Weight | Reason |
|-----------|----------------|----------------|--------|
| E-commerce product | Image Optimization, Technical | Content Quality | Products need visuals and speed more than long-form |
| Long-form guide | Content Quality, Keywords | Image Optimization | Content depth matters most |
| Landing page | Technical, Title | Content Quality | Speed and CTR drive conversions |
| Local service page | Technical, Links | Keywords | NAP consistency and local signals matter more |

Always document weight adjustments and the reasoning in the audit report.

---

## Scoring Rubric

### Section Weight Distribution

| Audit Section | Weight | Max Score | Rationale |
|--------------|--------|-----------|-----------|
| Title Tag | 15% | 15 | Strongest single ranking signal |
| Meta Description | 5% | 5 | CTR impact, not direct ranking factor |
| Header Structure | 10% | 10 | Content organization, semantic signals |
| Content Quality | 25% | 25 | Strongest holistic ranking factor |
| Keyword Optimization | 15% | 15 | Relevance signals |
| Internal/External Links | 10% | 10 | Authority flow, context signals |
| Image Optimization | 10% | 10 | Accessibility + image search opportunity |
| Page-Level Technical | 10% | 10 | Core Web Vitals, mobile, security |

### Scoring Scale per Factor

| Score | Meaning | Action Required |
|-------|---------|-----------------|
| 10/10 | Excellent — follows all best practices | None |
| 7-9/10 | Good — minor improvements possible | Optional optimization |
| 4-6/10 | Needs work — notable issues | Fix within this week |
| 1-3/10 | Poor — significant problems | Fix immediately (Critical) |
| 0/10 | Missing or broken | Fix immediately (Blocking) |

### Scoring Conversion Formula

Each section is scored out of 10, then converted to the 100-point overall score using section weights:

```
Overall Score = Sum of (section_score x section_weight) x 10
```

Where section weights are: Title 0.15, Meta 0.05, Headers 0.10, Content 0.25, Keywords 0.15, Links 0.10, Images 0.10, Technical 0.10.

**Worked example:**

| Section | Score /10 | Weight | Weighted |
|---------|-----------|--------|----------|
| Title Tag | 8 | 0.15 | 1.20 |
| Meta Description | 6 | 0.05 | 0.30 |
| Header Structure | 9 | 0.10 | 0.90 |
| Content Quality | 7 | 0.25 | 1.75 |
| Keyword Optimization | 8 | 0.15 | 1.20 |
| Internal/External Links | 5 | 0.10 | 0.50 |
| Image Optimization | 6 | 0.10 | 0.60 |
| Page-Level Technical | 7 | 0.10 | 0.70 |
| **Total** | | **1.00** | **7.15** |

**Overall Score** = 7.15 x 10 = **71 / 100**

## Common Issue Resolution Playbook

### Title Tag Issues

| Issue | Impact | Quick Fix Template |
|-------|--------|-------------------|
| Missing title | Critical | Add: "[Primary Keyword]: [Benefit] | [Brand]" |
| Too long (>60 chars) | Medium | Shorten: move brand to end, remove filler words |
| Too short (<30 chars) | Medium | Expand: add modifier, benefit, or year |
| Missing keyword | High | Rewrite to include primary keyword in first half |
| Duplicate title | High | Make each page title unique; add page-specific modifier |

### Meta Description Issues

| Issue | Impact | Quick Fix Template |
|-------|--------|-------------------|
| Missing description | Medium | Write: "[What this page covers]. [Key benefit]. [CTA]." (150-160 chars) |
| Too long (>160 chars) | Low | Trim from end; ensure core message fits in 150 chars |
| Missing keyword | Low | Naturally incorporate primary keyword |
| No CTA | Low | Add: "Learn more", "Discover", "Find out", "Get started" |
| Duplicated across pages | Medium | Write unique description for each page |

### Header Issues

| Issue | Impact | Quick Fix |
|-------|--------|-----------|
| Missing H1 | Critical | Add one H1 per page containing primary keyword |
| Multiple H1s | High | Keep one H1, convert others to H2 |
| Skipped heading levels | Medium | Use sequential hierarchy: H1→H2→H3 |
| Headers not descriptive | Medium | Rewrite to include keyword variations |
| No H2s (single long block) | Medium | Break content into sections with descriptive H2s every 200-300 words |

### Content Issues

| Issue | Impact | Quick Fix |
|-------|--------|-----------|
| Thin content (<300 words) | Critical | Expand with subtopics, FAQ, examples |
| Keyword stuffing (>3%) | High | Reduce usage, use synonyms and related terms |
| No structured data | Medium | Add relevant schema (FAQ, HowTo, Article) |
| Missing internal links | Medium | Add 3-5 contextual internal links |
| No images | Low | Add 2-3 relevant images with alt text |

## Industry Benchmark Data

### Content Length Benchmarks by Query Type

| Query Type | Top 10 Average Word Count | Recommended Minimum |
|-----------|--------------------------|-------------------|
| Informational (guides) | 2,200 words | 1,500 words |
| Commercial (reviews) | 1,800 words | 1,200 words |
| Transactional (product) | 800 words | 500 words |
| Local (service pages) | 600 words | 400 words |
| Definition queries | 1,200 words | 800 words |

### Page Speed Benchmarks

| Metric | Good | Needs Improvement | Poor |
|--------|------|-------------------|------|
| LCP | ≤2.5s | 2.5-4.0s | >4.0s |
| FID/INP | ≤100ms/200ms | 100-300ms | >300ms |
| CLS | ≤0.1 | 0.1-0.25 | >0.25 |
| TTFB | ≤800ms | 800-1800ms | >1800ms |

