$npx -y skills add AgriciDaniel/claude-blog --skill blog-auditFull-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Spawns parallel subagents for comprehensive analysis. Produces per-post scores and a prioritized action queue. Use when user
| 1 | # Blog Audit: Full-Site Health Assessment |
| 2 | |
| 3 | Performs a comprehensive blog health assessment across all posts in the project. |
| 4 | Scans for quality scores, orphan pages, topic cannibalization, stale content, |
| 5 | and AI citation readiness. Uses parallel subagents for efficient analysis and |
| 6 | produces a prioritized action queue. |
| 7 | |
| 8 | ## Audit Process |
| 9 | |
| 10 | ### Step 1: Discover Blog Files |
| 11 | |
| 12 | Scan the project for all blog content files: |
| 13 | |
| 14 | - Glob for `*.md`, `*.mdx`, `*.html` in common blog directories |
| 15 | - Common paths to check: |
| 16 | - `content/` |
| 17 | - `posts/` |
| 18 | - `blog/` |
| 19 | - `src/content/` |
| 20 | - `_posts/` |
| 21 | - `pages/blog/` |
| 22 | - `articles/` |
| 23 | - `src/pages/blog/` |
| 24 | - Filter out non-blog files: README, CHANGELOG, LICENSE, config files, |
| 25 | SKILL.md, package.json, node_modules |
| 26 | - Report: "Found N blog files in [directories]" |
| 27 | |
| 28 | If no blog files are found in standard locations, search the entire project |
| 29 | root for markdown files with blog-like frontmatter (title, date, description). |
| 30 | |
| 31 | ### Step 2: Parallel Analysis |
| 32 | |
| 33 | Spawn subagents via the Task tool for parallel processing across all |
| 34 | discovered blog files: |
| 35 | |
| 36 | #### Content Quality Agent |
| 37 | - Score each post on the 30-point content quality scale |
| 38 | - Check paragraph length (target 40-80 words, hard limit 150) |
| 39 | - Check sentence length (target 15-20 words) |
| 40 | - Evaluate heading structure and question-format headings |
| 41 | - Assess readability (Flesch Reading Ease 60-70 target) |
| 42 | |
| 43 | #### SEO Optimization Agent |
| 44 | - Check on-page SEO elements per post: |
| 45 | - Title tag length (50-60 chars) |
| 46 | - Meta description (150-160 chars, includes statistic) |
| 47 | - H1 presence and uniqueness |
| 48 | - Image alt text coverage |
| 49 | - Internal and external link counts |
| 50 | - URL slug quality |
| 51 | |
| 52 | #### Schema Validation Agent |
| 53 | - Detect structured data across all posts |
| 54 | - Validate BlogPosting schema completeness |
| 55 | - Check FAQ schema presence and format |
| 56 | - Verify dateModified matches lastUpdated frontmatter |
| 57 | - Flag missing or malformed schema |
| 58 | |
| 59 | #### Link Health Agent |
| 60 | - Map internal links across all posts |
| 61 | - Build a directed link graph |
| 62 | - Detect orphan pages (zero inbound internal links) |
| 63 | - Detect dead-end pages (zero outbound internal links) |
| 64 | - Check for broken internal link targets |
| 65 | - Recommend bidirectional link opportunities |
| 66 | |
| 67 | #### Freshness Check Agent |
| 68 | - Read lastUpdated or dateModified from each post's frontmatter |
| 69 | - Calculate days since last update |
| 70 | - Flag posts not updated in 90+ days |
| 71 | - Categorize by refresh priority |
| 72 | |
| 73 | #### AI Readiness Agent |
| 74 | - Score each post for AI citation readiness |
| 75 | - Check passage-level citability (120-180 word sections) |
| 76 | - Evaluate Q&A formatting and entity clarity |
| 77 | - Check for TL;DR boxes and citation capsules |
| 78 | - Assess AI crawler accessibility |
| 79 | |
| 80 | ### Step 3: Topic Cannibalization Detection |
| 81 | |
| 82 | Analyze across all posts for keyword competition: |
| 83 | |
| 84 | 1. Extract primary keyword/topic from each post: |
| 85 | - Title text |
| 86 | - H1 heading |
| 87 | - Meta description |
| 88 | - First paragraph |
| 89 | 2. Normalize keywords (lowercase, remove stop words) |
| 90 | 3. Detect multiple posts targeting the same primary keyword |
| 91 | 4. Flag competing posts with one of these recommendations: |
| 92 | - **Merge**: Combine two weak posts into one strong post |
| 93 | - **Redirect**: 301 redirect the weaker post to the stronger one |
| 94 | - **Differentiate**: Adjust focus so posts target distinct intents |
| 95 | |
| 96 | ### Step 4: Orphan Page Detection |
| 97 | |
| 98 | Build and analyze the internal link graph: |
| 99 | |
| 100 | 1. For each blog post, extract all internal links (relative and absolute) |
| 101 | 2. Build an adjacency map: `{ page -> [pages it links to] }` |
| 102 | 3. Build a reverse map: `{ page -> [pages linking to it] }` |
| 103 | 4. Identify orphan pages: posts with zero inbound internal links |
| 104 | 5. Identify dead-end pages: posts with zero outbound internal links |
| 105 | 6. For each orphan, recommend 2-3 existing posts that should link to it |
| 106 | based on topic relevance |
| 107 | |
| 108 | ### Step 5: Stale Content Detection |
| 109 | |
| 110 | Audit content freshness across all posts: |
| 111 | |
| 112 | 1. Read frontmatter fields: `lastUpdated`, `dateModified`, `date`, `updated` |
| 113 | 2. Calculate days since last update for each post |
| 114 | 3. Categorize by refresh priority: |
| 115 | - **High** (>180 days): Likely outdated, statistics may be stale |
| 116 | - **Medium** (90-180 days): Review for accuracy, update statistics |
| 117 | - **Low** (<90 days): Recently updated, no immediate action |
| 118 | 4. Estimate refresh effort per post: |
| 119 | - Light refresh: Update statistics, check links (1-2 hours) |
| 120 | - Moderate refresh: Rewrite sections, add new data (3-4 hours) |
| 121 | - Heavy refresh: Full rewrite recommended (5+ hours) |
| 122 | |
| 123 | ### Step 6: Generate Site-Wide Report |
| 124 | |
| 125 | Aggregate all results into a comprehensive report: |
| 126 | |
| 127 | #### Summary Dashb |