On-Page SEO Audit — Phase 3
Executive Summary
On-page SEO is the highest-leverage, lowest-cost ranking lever available. Title tag + meta optimization alone can improve CTR by 20–35% within 30 days (GSC data 2024). In 2025, on-page signals have a dual role: traditional ranking AND AI Overview citation probability. Pages without direct standalone answers and FAQPage schema rarely appear in AIO. Always compare against the top-ranking competitor's on-page patterns.
Tools for This Phase
| Tool | Purpose | Cost | |------|---------|------| | Screaming Frog | Bulk audit: titles, meta, H1s, word counts, duplicate detection | Free/Paid | | Google Search Console | Page-level impressions, CTR, position — identify rewrite priorities | Free | | Surfer SEO | Content Score vs. top competitors — target 70+ cluster, 80+ pillar | Paid | | Clearscope | Content grade vs. top 10 competitors — target A- pillar, B+ cluster | Paid | | Ahrefs | Organic keywords per page, SERP features per URL | Paid | | SEMrush | On-page checker — compare vs. top 10 ranking pages | Paid | | Google Rich Results Test | FAQPage schema validation, structured data presence | Free | | Chrome DevTools → Sources | Verify rendered HTML (JS-rendered content vs. raw HTML) | Free | | site_crawler.py | Word counts, title/meta data per page CSV | Free (local) |
Step 1: Read Project Context
Read {AUDIT_DIR}/intake-data.md — business name, URL, services, location. Read {AUDIT_DIR}/technical-findings.md — page indexation status, canonical issues. Read {AUDIT_DIR}/competitor-profiles.md — competitor on-page patterns, title formats, schema usage. Read {DATA_DIR}/crawl/ — crawler output for bulk title/meta analysis.
Priority Page Inventory
Audit in this order (highest business impact first):
- Homepage
- Primary service page(s) — one per core service
- Location/service-area pages
- Top-performing blog posts (by GSC impressions — filter top 10)
- Contact page
- About page (E-E-A-T critical)
Section 1: Title Tags
Character Limits (2025)
- Optimal: 50–60 characters (displays fully in desktop SERPs)
- Mobile SERP: 50–55 characters
- Maximum before truncation: 60 characters (580px pixel width)
- Google rewrites if: Title doesn't match page content or is < 10 characters
Per-Page Checklist
For each key page, verify:
- [ ] Unique across the entire site? (Screaming Frog → Title → duplicates)
- [ ] Primary keyword in first 5 words?
- [ ] 50–60 characters?
- [ ] Location included for all service/location pages?
- [ ] Brand name at end (after
|or—)? - [ ] Contains action word, number, or value prop for CTR?
- [ ] No keyword stuffing (same keyword repeated)?
Optimal title formats: | Page Type | Format | Example | |-----------|--------|---------| | Service page | [Service] in [City] \| [Brand] | Emergency Plumber in Chicago \| Acme Plumbing | | Homepage | [Brand] — [Service] in [City, State] | Acme Plumbing — Plumber in Chicago, IL | | Blog post | [Question/Keyword] [Year] — [Brand] | How to Fix a Leaky Faucet 2025 — Acme Plumbing | | Location page | [Service] in [City, ST] \| [Brand] | Drain Cleaning in Evanston, IL \| Acme |
AI Overviews Title Optimization
Titles that appear in AIO tend to:
- Directly match conversational query intent
- Include "How", "What", "Best", or specific quantifiers
- Signal definitive authority: "Complete Guide", "Expert Guide", "[Year] Guide"
Competitor Title Comparison
| Page | Client Title | Competitor #1 Title | Gap | |------|-------------|--------------------|----| | Homepage | | | | | Primary service | | | | | Location page | | | |
Section 2: Meta Descriptions
Character limits: 150–160 characters (desktop) | 130–145 characters (mobile) If Google rewrites 90%+ of meta descriptions: Page content doesn't match intent — rewrite lead paragraph first.
Per-page checklist:
- [ ] Unique across site? (Screaming Frog → Meta Description → duplicates)
- [ ] 150–160 characters?
- [ ] Contains primary keyword + location (local pages)?
- [ ] Clear value proposition (WHY click this result)?
- [ ] CTA: "Call today", "Get a free quote", "Book online"?
- [ ] Phone number on high-conversion service pages?
- [ ] No passive language ("We provide..." → "Get same-day service...")?
Section 3: Header Tag Hierarchy (H1–H6)
Per-page checks:
- [ ] Exactly ONE H1 per page? (Screaming Frog → H1 → filter "Multiple H1")
- [ ] H1 contains primary keyword?
- [ ] H1 is unique across the site?
- [ ] Logical hierarchy — no level skipping (H1 → H2 → H3, NOT H1 → H3)?
- [ ] H2s structure main sections with secondary keywords?
- [ ] H3s for subtopics under H2s?
- [ ] Headers descriptive, not generic ("Our Services" → "Plumbing Services in Chicago")?
- [ ] Question-format H2s/H3s for AIO citation potential?
AIO-optimized header pattern (2025):
H1: [Primary Keyword in City] — [Benefit]
H2: What Is [Service]? ← AIO extraction target
H2: How Much Does [Service] Cost in [City]? ← AIO + featured snippet
H3: Factors Affecting [Service] Cost
H2: Our [Service] Process ← HowTo schema opportunity
H2: Frequently Asked Questions ← FAQPage schema target
H3: [Question 1]?
H3: [Question 2]?
Section 4: Content Optimization
Keyword Density & Distribution
- Primary keyword in first 100 words: ✅/❌
- Natural density: 1–2% (not stuffed, not absent)
- LSI/NLP entities used (not just exact match): ✅/❌
- Synonyms and related variants included: ✅/❌
Word Count Benchmarks (2025 HCS Standards)
| Page Type | Minimum | Competitive Target | Red Flag | |-----------|---------|-------------------|---------|- | Homepage | 600 words | 800–1,200 | < 400 | | Service page | 800 words | 1,200–2,000 | < 500 | | Location page | 600 words | 900–1,500 | < 400 | | Pillar blog | 2,500 words | 3,500–5,000 | < 1,200 | | Cluster blog | 1,200 words | 1,500–2,500 | < 600 | | FAQ answer | 150 words | 250–400 | < 50 |
Search Intent Satisfaction
| Intent | Content Required | Conversion Rate | |--------|----------------|----------------| | Informational | Comprehensive guide, all related questions answered | 1–3% | | Commercial | Service description, pricing signals, reviews, comparison | 3–8% | | Transactional | Clear path to contact/book, click-to-call, urgency | 8–20% | | Navigational | Gets user to destination immediately | Brand intent |
Competitor comparison (Surfer/Clearscope): | Page | Client Word Count | Surfer Score | Comp #1 Words | Comp #1 Score | Gap | |------|-----------------|------------|--------------|---------------|-----| | Homepage | | | | | | | [Service] page | | | | | |
Content Freshness
- Date visible on time-sensitive pages (updated YYYY)? ✅/❌
- Statistics current (< 2 years old)? ✅/❌
- Seasonal pages updated for current year? ✅/❌
- 2025 context: ChatGPT cites content updated within 30 days at 76.4% rate — freshness = AIO signal.
Section 5: E-E-A-T On-Page Signals
E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) — Google's quality framework, critical since HCS integration into core algorithm (March 2024).
Experience Signals (NEW "first E" since Dec 2022)
- Real photos of team doing actual work? ✅/❌
- Case studies with before/after + specific outcomes? ✅/❌
- Project galleries with client permission? ✅/❌
- Video content showing expertise in action? ✅/❌
- Real project examples with specifics (location, problem, solution, outcome)? ✅/❌
Expertise Signals
- Author name + bio on all blog posts? ✅/❌
- Author page with credentials at
/about/[name]? ✅/❌ - Certifications, licenses, professional memberships stated? ✅/❌
- Years of experience stated with specific projects? ✅/❌
Authoritativeness
- External links to authoritative sources (not competitors)? ✅/❌
- Industry data cited with sources + dates? ✅/❌
- Awards or recognition mentioned with links? ✅/❌