Content quality and strategy assessment. Activates when auditing content, reviewing pages, assessing content quality, checking for thin content, duplicate content, content cannibalization, AI-generated low-quality content, service pages, location pages, blog posts, or FAQ content. Phase 4. Output: {AUDIT_DIR}/content-inventory.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.
Content quality is the primary differentiator between sites that rank and sites that don't in 2025. Google's Helpful Content System (HCS), integrated into the core algorithm in March 2024, actively penalizes template-based, AI-generated-without-expert-review, and thin location pages. The key thresholds: ≥60% unique content per location page (hard floor — below this risks HCS penalty), ≥80% unique (competitive target). FAQPage schema on service pages triggers AIO citations at 3.2× the rate of pages without it (Amsive 2025). Content decay (>20% YoY impressions decline) now affects most sites that haven't refreshed since 2022–2023 — ChatGPT cites pages updated within 30 days at 76.4% vs. 31.2% for 90+ day old content. The fastest wins: add FAQPage schema (30 min/page), refresh decayed content with updated stats, and fix service pages below 800 words.
2025 content benchmarks:
Read {AUDIT_DIR}/intake-data.md — business name, services, location, goals.
Read {AUDIT_DIR}/technical-findings.md — indexation data, duplicate content flags.
# Run crawler if not already done (from technical-seo or here)
python3 scripts/site_crawler.py --url [URL] --max-pages 150 --output {DATA_DIR}/crawl/ --csv
Tools for this phase:
| Tool | Purpose | Cost |
|---|---|---|
| Screaming Frog | Word counts, title/meta duplicates, thin pages (<300 words), canonicals | Paid/Free (≤500 URLs) |
| Siteliner | Duplicate content % across site, most-linked pages (free up to 250 pages) | Free |
| SEMrush | GSC import — traffic per page, keyword ranking per page, content decay analysis | Paid |
| Surfer SEO | Content Score per page vs. competitors — targets 70+ (cluster) / 80+ (pillar) | Paid |
| Clearscope | Content grade per page — target A- (pillar) / B+ (cluster) | Paid |
| Copyscape | External duplicate content detection — scraped copies | Paid |
| Google Search Console | Page-level impressions/clicks — identify content decay (>20% YoY decline) | Free (requires access) |
| site_crawler.py | --csv output: word counts, status codes, title/meta data per page | Free (local) |
2025 Content Context: Google's Helpful Content System (HCS) was folded into the core ranking algorithm in March 2024. Since then:
Build a complete inventory of all indexed pages using crawler output:
| URL | Page Type | Title | Word Count | Primary Keyword | Quality (1–10) | Issues |
|---|---|---|---|---|---|---|
| /services/[slug] | Service | |||||
| /locations/[slug] | Location | |||||
| /blog/[slug] | Blog |
Page Types to Catalog:
Content Quality Score (1–10):
| Score | Description |
|---|---|
| 9–10 | Comprehensive (meets word count threshold), unique, expert-authored, well-structured, current-year data, optimized |
| 7–8 | Good — missing some depth, freshness, or schema optimization |
| 5–6 | Average — basic information, lacks differentiation or competitor-matching depth |
| 3–4 | Thin — <600 words, near-duplicate template, or outdated >2 years |
| 1–2 | Very poor — scraped, auto-generated, or near-empty |
Word count thresholds (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 post | 2,500 words | 3,500–5,000 | <1,200 |
| Cluster blog post | 1,200 words | 1,500–2,500 | <600 |
| FAQ entry | 150 words | 250–400 | <100 |
From crawler output: {DATA_DIR}/crawl/crawl-data.csv → filter by word count:
| URL | Page Type | Word Count | Traffic | Action |
|---|---|---|---|---|
| [URL] | Service | [count] | [visits] | Expand / Merge / Redirect |
Action criteria:
From Siteliner or Screaming Frog → filter by duplicate content %:
| Pages | Similarity % | Issue Type | Action |
|---|---|---|---|
| [URL1] vs. [URL2] | [%] | Template location pages | Differentiate or canonical |
| [URL1] vs. [URL2] | [%] | Category + post archive | Canonical to canonical URL |
Location page template check:
Multiple pages competing for the same primary keyword:
| Keyword | Competing Pages | Current Ranking | Action |
|---|---|---|---|
| [keyword] | [URL1], [URL2] | P[X], P[Y] | Consolidate / Redirect / Differentiate |
Detection: GSC → Performance → click on keyword → check if multiple URLs rank. Also Ahrefs → Site Explorer → Organic Keywords → filter for duplicate keyword targeting.
Export GSC Performance → compare last 90 days vs. same period last year (YoY):
| URL | Current Clicks | YoY Clicks | Change % | Action |
|---|---|---|---|---|
| [URL] | [X] | [Y] | -[%] | Refresh if >20% decline |
2025 rule: >20% YoY decline → refresh queue. >50% YoY decline → major rewrite or consolidate. ChatGPT cites content updated within 30 days at 76.4% rate — freshness directly affects AIO citation rate.
Google's Helpful Content System specifically targets:
Detection: Look for pages with uniform template structure across service/location variations. Check bounce rate and engagement time in GA4.
For EACH service offered (from intake-data.md):
| Service | Page Exists? | URL | Word Count | Unique? | FAQPage Schema? | Quality |
|---|---|---|---|---|---|---|
| [service 1] | Yes/No | [url] | [count] | Yes/No | Yes/No | [1-10] |
Ideal service page checklist (target ≥1,200 words):
| Service | Client Word Count | Surfer Score | Comp 1 Words | Comp 2 Words | Gap |
|---|---|---|---|---|---|
| [service] |
For EACH service area:
| Location | Page Exists? | URL | Word Count | Unique Content % | Map Embed? | FAQPage Schema? | Score |
|---|---|---|---|---|---|---|---|
| [city] | Yes/No | [url] | [count] | [%] | Yes/No | Yes/No | [1-10] |
Ideal location page checklist (target ≥900 words):
<address> tagareaServed for this locationPull GSC data (Page performance) + Screaming Frog (word counts):
| Title | URL | Word Count | Last Updated | Primary Keyword | SERP Position | Monthly Clicks | Score |
|---|---|---|---|---|---|---|---|
| [title] | [url] |
Flag and prioritize:
| Flag | Definition | Action | Priority |
|---|---|---|---|
| High impressions, low CTR (<2%) | Title/meta not compelling | Rewrite title + meta | High |
| Ranking P4–P10 | Quick win opportunity | Expand + add schema | High |
| >20% YoY clicks decline | Content decay | Refresh — new stats, examples | Critical |
| Zero internal links to service pages | Missed conversion opportunity | Add contextual CTAs | Medium |
| <1,200 words | Below competitive threshold | Expand or consolidate | High |
| No FAQPage schema | Missing AIO opportunity | Add FAQ section + schema | High |
Missing FAQ topics (cross-reference AlsoAsked.com PAA data):
| Question (from PAA) | Page It Should Be On | Currently Answered? |
|---|---|---|
| [question] | [service page] | Yes/No |
AIO and AI assistants cite content that is structured for direct extraction. Check each key page:
| Check | Homepage | Service Pages | Location Pages | Blog |
|---|---|---|---|---|
| Direct standalone answer in first 40–60 words | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Clear service/term definitions | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Specific data points (costs, timelines) stated precisely | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Numbered step-by-step processes | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Structured comparisons (tables) | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| FAQPage schema | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Content updated within 90 days | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ |
| Funnel Stage | Coverage | Pages Count | Quality |
|---|---|---|---|
| TOFU (Awareness — educational, informational) | Strong/Weak/None | ||
| MOFU (Consideration — comparison, how-to, case study) | Strong/Weak/None | ||
| BOFU (Decision — service pages, testimonials, pricing) | Strong/Weak/None |
| Type | Present? | Count | Quality | Frequency |
|---|---|---|---|---|
| Service pages | N/A | |||
| Location pages | N/A | |||
| How-to guides | ||||
| FAQ content (with schema) | ||||
| Case studies (with specifics) | ||||
| Cost/pricing guides | ||||
| Video content (with VideoObject schema) | ||||
| Comparison pages ("X vs. Y") | ||||
| Tool/calculator |
| Metric | Client | Comp 1 | Comp 2 | Comp 3 | Gap to Leader |
|---|---|---|---|---|---|
| Avg service page word count | |||||
| % service pages with FAQPage schema | |||||
| % location pages (HCS-unique ≥60%) | |||||
| Total blog posts | |||||
| Pillar pages (2,500+ words) | |||||
| Surfer Score avg (top service pages) | |||||
| AIO citations (core service queries) |
| Issue | Impact (1–5) | Feasibility (1–5) | Priority | Effort |
|---|---|---|---|---|
| Service pages <800 words | 5 | 4 | 20 | 3–5 hrs/page |
| Missing FAQPage schema on service pages | 4 | 5 | 20 | 30 min/page |
| No AIO-structured content (no direct answers) | 4 | 5 | 20 | 1–2 hrs/page |
| Content decay >20% YoY decline | 4 | 4 | 16 | 3–5 hrs/page |
| Cannibalization (2+ pages same keyword) | 4 | 4 | 16 | 1–2 hrs |
| Blog posts P4–P10 (quick wins) | 4 | 4 | 16 | 2–4 hrs/post |
| Location pages <60% unique | 5 | 3 | 15 | 3–5 hrs/page |
| Blog posts with no service page CTAs | 3 | 5 | 15 | 15 min/post |
| Missing location pages for served cities | 3 | 4 | 12 | 3–5 hrs/page |
| Category | Weight | Score |
|---|---|---|
| Content quality score average (1–10) | 20% | /20 |
| No thin/duplicate content | 20% | /20 |
| Service page completeness (word count + schema + FAQ) | 20% | /20 |
| Location page uniqueness (≥60% hard floor, ≥80% target) | 15% | /15 |
| Content type diversity (TOFU/MOFU/BOFU coverage) | 15% | /15 |
| AI-citable content structure (FAQPage, direct answers, tables) | 10% | /10 |
Veto: >50% of service pages <600 words → maximum score 50/100.
Write complete inventory to {AUDIT_DIR}/content-inventory.md with YAML frontmatter:
---
skill: audit/content-audit
phase: 4
date: [YYYY-MM-DD]
business: [Business Name]
url: [URL]
score: [X/100]
total_pages: [X]
thin_pages: [X]
decay_pages: [X]
service_pages: [X]
location_pages: [X]
---
Include:
Key consumers:
research/content-gaps — identifies missing content vs. competitorsresearch/topical-gaps — maps topical coverage using this inventorycross-cutting/serp-trust-auditor — Ranking Signals dimensionoutput/report-generation — content score in master report section 4| Page State | Signal | Decision | Action | Effort |
|---|---|---|---|---|
| <300 words, no unique value | Thin content | Noindex or delete + 301 | Redirect to stronger page | 15 min |
| 300–600 words, some value | Borderline thin | Expand or consolidate | Merge with related page | 2–4 hrs |
| 600–1,500 words, good content | Acceptable | Monitor | Add FAQPage schema, internal links | 30 min |
| 1,500–3,000 words, optimized | Good | Maintain | Refresh stats quarterly | 1 hr/quarter |
| 3,000+ words, original data | Excellent | Protect | Build cluster around it | Ongoing |
| Duplicate of another page | Duplicate | Canonical or 301 | Add canonical pointing to original | 15 min |
| AI-generated, no editorial review | HCS risk | Rewrite or add expert review | Add author byline + unique insights | 2–4 hrs |
GBP reviews contain keyword signals Google uses to understand business topics. During content audit:
Content-heavy pages (3,000+ words) with embedded images, videos, and widgets often have high INP — heavy DOM causes slow interactions. During content audit, flag pages that are both content-thin AND INP >500ms for dual-priority treatment (content expansion + performance fix simultaneously).
| Content Type | Decay Rate | Refresh Trigger | Update Frequency |
|---|---|---|---|
| Service pages (local) | Slow (12–24 mo) | >20% YoY click drop | Annually + on price/service change |
| Blog posts (news/trends) | Fast (3–6 mo) | >30% YoY click drop | Quarterly |
| FAQ pages | Medium (6–12 mo) | New PAA questions appear | Semi-annually |
| Location pages | Slow (18–24 mo) | Competitor adds stronger page | Annually |
| Comparison/alternative pages | Fast (4–8 mo) | New competitors enter market | Quarterly |