On-page SEO optimization expertise. Activates for title tags, meta descriptions, header tags, content optimization, internal linking, image SEO, E-E-A-T signals, CTAs, AI Overviews optimization, entity optimization, or any page-level SEO analysis. Phase 3. Output: {AUDIT_DIR}/onpage-findings.md
From local-seo-auditnpx claudepluginhub anthropics/claude-plugins-community --plugin local-seo-audit-systemThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
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.
| 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) |
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.
Audit in this order (highest business impact first):
For each key page, verify:
| or —)?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 |
Titles that appear in AIO tend to:
| Page | Client Title | Competitor #1 Title | Gap |
|---|---|---|---|
| Homepage | |||
| Primary service | |||
| Location page |
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:
Per-page checks:
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]?
| 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 |
| 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 |
E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) — Google's quality framework, critical since HCS integration into core algorithm (March 2024).
/about/[name]? ✅/❌| Check | Target | Client |
|---|---|---|
| Orphan pages (0 internal links) | 0 | |
| Pages requiring > 3 clicks from homepage | 0 | |
| Max internal links per page | < 100 | |
| Homepage internal links | 25–75 |
| Check | Target | Impact |
|---|---|---|
| Alt text: descriptive, 5–15 words, keyword-inclusive | All images | AIO image citation + accessibility |
| Alt text max length | 150 characters | Screen reader UX |
Filename: descriptive (not IMG_1234.jpg) | All images | Image search ranking |
| Format: WebP or AVIF | All non-hero images | Page speed |
Dimensions width/height specified | All images | CLS prevention |
loading="lazy" on below-fold images | All below-fold | LCP improvement |
| Geo-tagged EXIF data | Location-relevant images | Local SEO signal |
| Image in XML sitemap | Significant images | Image search visibility |
Pages cited in AIO score 4× the impressions of position 1 organic when AIO appears. AIO appears for 20–35% of local service queries (SparkToro 2025).
AIO citation requirements — checklist per page:
Test: Search target keyword → does AIO appear? Is client cited? If competitor cited but not client → content gap in answer structure.
| Check | High-Intent Pages | Blog Posts |
|---|---|---|
| At least 1 CTA per page | Required | Required |
| CTA above fold on mobile | Required | Optional |
Click-to-call <a href="tel:..."> | Required | Recommended |
| Service-specific CTA (not generic "Contact Us") | Required | N/A |
| CTA visual contrast (color + size) | Required | Required |
| Multiple CTAs on long pages (top/mid/bottom) | Required | Recommended |
| Sticky CTA header/bar on mobile | High priority | Optional |
| Category | Weight | Score |
|---|---|---|
| Title tags (uniqueness, optimization, length) | 15% | /15 |
| Meta descriptions (uniqueness, CTR optimization) | 10% | /10 |
| Header hierarchy (H1 uniqueness, keyword use, AIO structure) | 10% | /10 |
| Content depth + intent satisfaction vs. competitors | 20% | /20 |
| E-E-A-T signals (all 4 components) | 20% | /20 |
| Internal linking (hub-and-spoke, orphans, anchor text) | 10% | /10 |
| Image SEO (alt text, format, dimensions) | 5% | /5 |
| AI Overviews optimization (FAQPage, direct answers) | 10% | /10 |
Veto: > 50% of service pages missing FAQPage schema → maximum AI visibility score capped at 40/100.
Write complete findings to {AUDIT_DIR}/onpage-findings.md with YAML frontmatter:
---
skill: audit/onpage-seo
phase: 3
date: [YYYY-MM-DD]
business: [Business Name]
url: [URL]
score: [X/100]
pages_audited: [X]
title_issues: [X]
missing_faqpage: [X]
eeat_score: [X/20]
aio_citations: [X]
---
Include:
Output files:
{AUDIT_DIR}/onpage-findings.md — on-page audit findings with score{REPORTS_DIR}/phase-3-onpage-seo.pdf — auto-generated PDF after phase completesKey consumers:
research/content-gaps — reads for content quality gaps to addressstrategy/ux-cro-audit — reads for CTA gaps and conversion opportunitiescross-cutting/serp-trust-auditor — Ranking Signals (R) dimensionai-visibility/ai-seo — AIO readiness signals feed AI audit| Issue Type | Impact | Feasibility | Priority | Avg Effort | Expected Lift |
|---|---|---|---|---|---|
| Missing FAQPage schema on service pages | 5 | 5 | 25 | 30 min/page | 3.2× AIO citation rate |
| Title tag missing primary keyword | 4 | 5 | 20 | 5 min/page | +5–15% CTR |
| Missing or duplicate H1 | 4 | 5 | 20 | 5 min/page | Crawl clarity |
| Meta description too long (>155 chars) or missing | 3 | 5 | 15 | 5 min/page | +3–8% CTR |
| Thin page content (<500 words on service page) | 5 | 3 | 15 | 4–8 hrs/page | Rankings lift |
| Missing HowTo schema on process pages | 4 | 4 | 16 | 30 min/page | Featured snippet + AIO |
| Internal links: orphaned pages (<3 inbound links) | 4 | 5 | 20 | 15 min/page | PageRank distribution |
| Image alt text missing | 3 | 5 | 15 | 30 min (bulk) | Accessibility + image search |
| Keyword cannibalization (2+ pages targeting same keyword) | 4 | 4 | 16 | 1–2 hrs | Consolidates ranking power |