Blog Analyzer -- Quality Audit & Scoring
Scores blog posts on a 0-100 scale across 5 categories and provides prioritized
improvement recommendations. Includes AI content detection analysis. Works with
local files or published URLs.
Reference documents:
references/quality-scoring.md -- full scoring checklist
references/eeat-signals.md -- E-E-A-T evaluation criteria
Input Handling
- Local file: Read the file directly
- URL: Fetch with WebFetch, extract content
- Directory: Scan for blog files, audit all (batch mode)
- Flags:
--format json|table, --batch, --sort score
Scoring Process
Step 1: Content Extraction
Read the blog post and extract:
- Frontmatter (title, description, date, lastUpdated, author, tags)
- Heading structure (H1, H2, H3 with hierarchy)
- Paragraph count and word counts per paragraph
- Statistics (any number claims with or without sources)
- Images (count, alt text presence, format)
- Charts/SVGs (count, type diversity)
- Links (internal, external, broken)
- FAQ section presence
- Schema markup (types present)
- Meta tags (title, description, OG tags, twitter cards)
- Sentence lengths for burstiness analysis
- Vocabulary tokens for diversity scoring
Step 2: Score Each Category
Load references/quality-scoring.md for the full checklist. Score each:
Content Quality (30 points)
| Check |
Points |
Pass Criteria |
| Depth/comprehensiveness |
7 |
Covers topic thoroughly, no major gaps |
| Readability (Flesch 60-70) |
7 |
Flesch 60-70 ideal, 55-75 acceptable; Grade 7-8; Gunning Fog 7-8 |
| Originality/unique value markers |
5 |
Original data, case studies, first-hand experience |
| Sentence & paragraph structure |
4 |
Avg sentence 15-20 words, ≤25% over 20; paragraphs 40-80 words; H2 every 200-300 words |
| Engagement elements |
4 |
Summary box, callouts, varied content blocks. Accepts: "TL;DR", "Key Takeaways", "The Bottom Line", "What You'll Learn", "At a Glance", "In Brief" |
| Grammar/anti-pattern |
3 |
Passive voice ≤10%, AI trigger words ≤5/1K, transition words 20-30%, clean prose |
Readability Bands (apply per persona, or use default):
| Audience |
Flesch Grade |
Flesch Ease |
Scoring Impact |
| Consumer |
6-8 |
60-80 |
Full points if in range |
| Professional |
8-10 |
50-60 |
Full points if in range |
| Technical |
10-12 |
30-50 |
Full points if in range |
| Default (no persona) |
7-8 |
60-70 |
Current scoring unchanged |
Content clarity is the #2 factor for AI citation probability (+32.83%
score differential). Average US adult reads at 7th-8th grade level.
SEO Optimization (25 points)
| Check |
Points |
Pass Criteria |
| Heading hierarchy with keywords |
5 |
H1 -> H2 -> H3, no skips, keyword in 2-3 headings |
| Title tag (40-60 chars, keyword, power word) |
4 |
Front-loaded keyword, positive sentiment |
| Keyword placement/density |
4 |
Natural integration, no stuffing, in first 100 words |
| Internal linking (3-10 contextual) |
4 |
Descriptive anchor text, bidirectional |
| URL structure |
3 |
Short, keyword-rich, no stop words, lowercase |
| Meta description (150-160 chars, stat) |
3 |
Fact-dense, includes one statistic |
| External linking (tier 1-3) |
2 |
3-8 outbound links to authoritative sources |
E-E-A-T Signals (15 points)
| Check |
Points |
Pass Criteria |
| Author attribution (named, with bio) |
4 |
Real name, credentials, not sales pitch |
| Source citations (tier 1-3, inline) |
4 |
8+ unique stats, zero fabricated |
| Trust indicators |
4 |
Contact page, about page, editorial policy |
| Experience signals |
3 |
"When we tested...", original photos/data |
Technical Elements (15 points)
| Check |
Points |
Pass Criteria |
| Schema markup (3+ types = bonus) |
4 |
BlogPosting + FAQ + Person minimum |
| Image optimization |
3 |
AVIF/WebP, descriptive alt text, lazy except LCP |
| Structured data elements |
2 |
Tables, lists, comparison blocks |
| Page speed signals |
2 |
LCP < 2.5s, no render-blocking JS |
| Mobile-friendliness |
2 |
Responsive, tap targets 48px+ |
| OG/social meta tags |
2 |
og:title, og:description, og:image, twitter:card |
AI Citation Readiness (15 points)
| Check |
Points |
Pass Criteria |
| Passage-level citability (120-180 words) |
4 |
Self-contained sections with stat + source |
| Q&A formatted sections |
3 |
60-70% of H2s as questions, FAQ present |
| Entity clarity |
3 |
Unambiguous topic entity, consistent terminology |
| Content structure for extraction |
3 |
Answer-first, tables with thead, comparison formats |
| AI crawler accessibility |
2 |
SSR/SSG, no JS-gated content |
Step 3: AI Content Detection
Analyze the post for AI-generated content risk:
Burstiness Score (sentence length variance):
- Calculate standard deviation of sentence lengths across the post
- Human writing: high variance (short punchy + long complex sentences)
- AI writing: low variance (consistently medium-length sentences)
- Score: 0-10 scale (10 = very human-like burstiness)
Known AI Phrase Detection -- flag occurrences of these 17 phrases:
- "It's important to note"
- "In today's digital landscape"
- "Delve into"
- "Navigating the complexities"
- "Let's explore"
- "Furthermore"
- "In conclusion"
- "It is worth mentioning"
- "Embark on"
- "Cutting-edge"
- "Leverage" (as a verb, non-financial context)
- "Game-changer"
- "Revolutionize"
- "Streamline"
- "Harness the power"
- "Dive deep"
- "Unlock the potential"
- Em dashes (-) - count all instances, flag as AI writing pattern
Vocabulary Diversity (Type-Token Ratio):
- Calculate unique words / total words
- Human writing: TTR typically 0.4-0.6 for long-form
- AI writing: TTR often below 0.35 (repetitive vocabulary)
AI Content Risk Assessment:
- Flag if AI probability > 50% based on combined signals
- Provide specific passages that triggered the flag
- Recommend humanization: personal anecdotes, varied sentence rhythm, domain jargon
Step 4: Determine Rating
| Score |
Rating |
Action |
| 90-100 |
Exceptional |
Publish as-is, flagship content |
| 80-89 |
Strong |
Minor polish, ready for publication |
| 70-79 |
Acceptable |
Targeted improvements needed |
| 60-69 |
Below Standard |
Significant rework required |
| < 60 |
Rewrite |
Fundamental issues, start from outline |
Step 5: Generate Report
Default output format (Markdown):
## Blog Quality Report: [Title]
**Score: [X]/100** -- [Rating]
### Score Breakdown
| Category | Score | Max | Notes |
|----------|-------|-----|-------|
| Content Quality | X | 30 | [1-line summary] |
| SEO Optimization | X | 25 | [1-line summary] |
| E-E-A-T Signals | X | 15 | [1-line summary] |
| Technical Elements | X | 15 | [1-line summary] |
| AI Citation Readiness | X | 15 | [1-line summary] |
| **Total** | **X** | **100** | |
### AI Content Risk
- **Burstiness score**: [X]/10 ([human-like / moderate / flat])
- **AI phrases detected**: [N] ([list phrases found])
- **Vocabulary diversity (TTR)**: [X] ([high / acceptable / low])
- **AI probability**: [X]% -- [No concern / Review recommended / High risk]
- **Flagged passages**: [quote specific flat or formulaic sections, if any]
### Issues Found
#### Critical (Must Fix)
- [ ] [Issue with specific location and fix]
#### High Priority
- [ ] [Issue with specific location and fix]
#### Medium Priority
- [ ] [Issue with specific location and fix]
#### Low Priority
- [ ] [Issue with specific location and fix]
### Quick Stats
- Word count: [N]
- Paragraphs: [N] (X over 150 words)
- H2 sections: [N] (X as questions, X with answer-first formatting)
- Statistics: [N] sourced / [N] unsourced
- Images: [N] (X with alt text, formats: ...)
- Charts: [N] (types: ...)
- Internal links: [N]
- External links: [N] (tier breakdown: ...)
- Schema types: [list]
- OG/social tags: [present/missing]
### Recommended Actions
1. [Most impactful fix -- Critical items first]
2. [Second most impactful]
3. [Third]
Run `/blog rewrite <file>` to apply these optimizations automatically.
Export Formats
Default: Markdown Report
Standard detailed report as shown above.
JSON Export (--format json)
Machine-readable output for integration with CI/CD or dashboards:
{
"file": "post.md",
"title": "...",
"score": 78,
"rating": "Acceptable",
"categories": {
"content_quality": { "score": 22, "max": 30 },
"seo_optimization": { "score": 18, "max": 25 },
"eeat_signals": { "score": 12, "max": 15 },
"technical_elements": { "score": 13, "max": 15 },
"ai_citation_readiness": { "score": 13, "max": 15 }
},
"ai_detection": {
"burstiness": 6.2,
"ai_phrases_found": ["Furthermore", "Let's explore"],
"ttr": 0.44,
"ai_probability": 32
},
"issues": {
"critical": [],
"high": [],
"medium": [],
"low": []
}
}
Table Export (--format table)
Compact summary for quick review:
File | Score | Rating | Content | SEO | EEAT | Tech | AI-Ready | AI Risk
post.md | 78 | Acceptable | 22/30 | 18/25 | 12/15 | 13/15 | 13/15 | 32%
Batch Mode
When given a directory or --batch flag, scan for blog files and produce a
summary table. Use --sort score to order by score (ascending by default).
## Blog Audit Summary: [N] Posts Analyzed
| File | Score | Rating | Content | SEO | EEAT | Tech | AI-Ready | AI Risk | Top Issue |
|------|-------|--------|---------|-----|------|------|----------|---------|-----------|
| post-1.md | 85 | Strong | 26/30 | 20/25 | 13/15 | 14/15 | 12/15 | 18% | Missing OG tags |
| post-2.md | 42 | Rewrite | 10/30 | 8/25 | 5/15 | 9/15 | 10/15 | 71% | 12 fabricated stats |
| post-3.md | 71 | Acceptable | 20/30 | 16/25 | 10/15 | 12/15 | 13/15 | 25% | No answer-first |
### Priority Queue (Lowest Scoring First)
1. post-2.md (42) -- Full rewrite needed, high AI content risk
2. post-3.md (71) -- Answer-first formatting + stats needed
3. post-1.md (85) -- Add OG tags, minor polish
Run `/blog rewrite <file>` on each, starting from lowest score.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: agricidaniel-claude-blog-blog-analyze3description: Blog Analyzer -- Quality Audit & Scoring4---56# Blog Analyzer -- Quality Audit & Scoring78Scores blog posts on a 0-100 scale across 5 categories and provides prioritized9improvement recommendations. Includes AI content detection analysis. Works with10local files or published URLs.1112Reference documents:13- `references/quality-scoring.md` -- full scoring checklist14- `references/eeat-signals.md` -- E-E-A-T evaluation criteria1516## Input Handling1718- **Local file**: Read the file directly19- **URL**: Fetch with WebFetch, extract content20- **Directory**: Scan for blog files, audit all (batch mode)21- **Flags**: `--format json|table`, `--batch`, `--sort score`2223## Scoring Process2425### Step 1: Content Extraction2627Read the blog post and extract:28- Frontmatter (title, description, date, lastUpdated, author, tags)29- Heading structure (H1, H2, H3 with hierarchy)30- Paragraph count and word counts per paragraph31- Statistics (any number claims with or without sources)32- Images (count, alt text presence, format)33- Charts/SVGs (count, type diversity)34- Links (internal, external, broken)35- FAQ section presence36- Schema markup (types present)37- Meta tags (title, description, OG tags, twitter cards)38- Sentence lengths for burstiness analysis39- Vocabulary tokens for diversity scoring4041### Step 2: Score Each Category4243Load `references/quality-scoring.md` for the full checklist. Score each:4445#### Content Quality (30 points)46| Check | Points | Pass Criteria |47|-------|--------|---------------|48| Depth/comprehensiveness | 7 | Covers topic thoroughly, no major gaps |49| Readability (Flesch 60-70) | 7 | Flesch 60-70 ideal, 55-75 acceptable; Grade 7-8; Gunning Fog 7-8 |50| Originality/unique value markers | 5 | Original data, case studies, first-hand experience |51| Sentence & paragraph structure | 4 | Avg sentence 15-20 words, ≤25% over 20; paragraphs 40-80 words; H2 every 200-300 words |52| Engagement elements | 4 | Summary box, callouts, varied content blocks. Accepts: "TL;DR", "Key Takeaways", "The Bottom Line", "What You'll Learn", "At a Glance", "In Brief" |53| Grammar/anti-pattern | 3 | Passive voice ≤10%, AI trigger words ≤5/1K, transition words 20-30%, clean prose |5455**Readability Bands** (apply per persona, or use default):5657| Audience | Flesch Grade | Flesch Ease | Scoring Impact |58|----------|-------------|-------------|----------------|59| Consumer | 6-8 | 60-80 | Full points if in range |60| Professional | 8-10 | 50-60 | Full points if in range |61| Technical | 10-12 | 30-50 | Full points if in range |62| Default (no persona) | 7-8 | 60-70 | Current scoring unchanged |6364Content clarity is the #2 factor for AI citation probability (+32.83%65score differential). Average US adult reads at 7th-8th grade level.6667#### SEO Optimization (25 points)68| Check | Points | Pass Criteria |69|-------|--------|---------------|70| Heading hierarchy with keywords | 5 | H1 -> H2 -> H3, no skips, keyword in 2-3 headings |71| Title tag (40-60 chars, keyword, power word) | 4 | Front-loaded keyword, positive sentiment |72| Keyword placement/density | 4 | Natural integration, no stuffing, in first 100 words |73| Internal linking (3-10 contextual) | 4 | Descriptive anchor text, bidirectional |74| URL structure | 3 | Short, keyword-rich, no stop words, lowercase |75| Meta description (150-160 chars, stat) | 3 | Fact-dense, includes one statistic |76| External linking (tier 1-3) | 2 | 3-8 outbound links to authoritative sources |7778#### E-E-A-T Signals (15 points)79| Check | Points | Pass Criteria |80|-------|--------|---------------|81| Author attribution (named, with bio) | 4 | Real name, credentials, not sales pitch |82| Source citations (tier 1-3, inline) | 4 | 8+ unique stats, zero fabricated |83| Trust indicators | 4 | Contact page, about page, editorial policy |84| Experience signals | 3 | "When we tested...", original photos/data |8586#### Technical Elements (15 points)87| Check | Points | Pass Criteria |88|-------|--------|---------------|89| Schema markup (3+ types = bonus) | 4 | BlogPosting + FAQ + Person minimum |90| Image optimization | 3 | AVIF/WebP, descriptive alt text, lazy except LCP |91| Structured data elements | 2 | Tables, lists, comparison blocks |92| Page speed signals | 2 | LCP < 2.5s, no render-blocking JS |93| Mobile-friendliness | 2 | Responsive, tap targets 48px+ |94| OG/social meta tags | 2 | og:title, og:description, og:image, twitter:card |9596#### AI Citation Readiness (15 points)97| Check | Points | Pass Criteria |98|-------|--------|---------------|99| Passage-level citability (120-180 words) | 4 | Self-contained sections with stat + source |100| Q&A formatted sections | 3 | 60-70% of H2s as questions, FAQ present |101| Entity clarity | 3 | Unambiguous topic entity, consistent terminology |102| Content structure for extraction | 3 | Answer-first, tables with thead, comparison formats |103| AI crawler accessibility | 2 | SSR/SSG, no JS-gated content |104105### Step 3: AI Content Detection106107Analyze the post for AI-generated content risk:108109**Burstiness Score** (sentence length variance):110- Calculate standard deviation of sentence lengths across the post111- Human writing: high variance (short punchy + long complex sentences)112- AI writing: low variance (consistently medium-length sentences)113- Score: 0-10 scale (10 = very human-like burstiness)114115**Known AI Phrase Detection** -- flag occurrences of these 17 phrases:1161. "It's important to note"1172. "In today's digital landscape"1183. "Delve into"1194. "Navigating the complexities"1205. "Let's explore"1216. "Furthermore"1227. "In conclusion"1238. "It is worth mentioning"1249. "Embark on"12510. "Cutting-edge"12611. "Leverage" (as a verb, non-financial context)12712. "Game-changer"12813. "Revolutionize"12914. "Streamline"13015. "Harness the power"13116. "Dive deep"13217. "Unlock the potential"13318. Em dashes (-) - count all instances, flag as AI writing pattern134135**Vocabulary Diversity** (Type-Token Ratio):136- Calculate unique words / total words137- Human writing: TTR typically 0.4-0.6 for long-form138- AI writing: TTR often below 0.35 (repetitive vocabulary)139140**AI Content Risk Assessment**:141- Flag if AI probability > 50% based on combined signals142- Provide specific passages that triggered the flag143- Recommend humanization: personal anecdotes, varied sentence rhythm, domain jargon144145### Step 4: Determine Rating146147| Score | Rating | Action |148|-------|--------|--------|149| 90-100 | Exceptional | Publish as-is, flagship content |150| 80-89 | Strong | Minor polish, ready for publication |151| 70-79 | Acceptable | Targeted improvements needed |152| 60-69 | Below Standard | Significant rework required |153| < 60 | Rewrite | Fundamental issues, start from outline |154155### Step 5: Generate Report156157Default output format (Markdown):158159```160## Blog Quality Report: [Title]161162**Score: [X]/100** -- [Rating]163164### Score Breakdown165| Category | Score | Max | Notes |166|----------|-------|-----|-------|167| Content Quality | X | 30 | [1-line summary] |168| SEO Optimization | X | 25 | [1-line summary] |169| E-E-A-T Signals | X | 15 | [1-line summary] |170| Technical Elements | X | 15 | [1-line summary] |171| AI Citation Readiness | X | 15 | [1-line summary] |172| **Total** | **X** | **100** | |173174### AI Content Risk175- **Burstiness score**: [X]/10 ([human-like / moderate / flat])176- **AI phrases detected**: [N] ([list phrases found])177- **Vocabulary diversity (TTR)**: [X] ([high / acceptable / low])178- **AI probability**: [X]% -- [No concern / Review recommended / High risk]179- **Flagged passages**: [quote specific flat or formulaic sections, if any]180181### Issues Found182183#### Critical (Must Fix)184- [ ] [Issue with specific location and fix]185186#### High Priority187- [ ] [Issue with specific location and fix]188189#### Medium Priority190- [ ] [Issue with specific location and fix]191192#### Low Priority193- [ ] [Issue with specific location and fix]194195### Quick Stats196- Word count: [N]197- Paragraphs: [N] (X over 150 words)198- H2 sections: [N] (X as questions, X with answer-first formatting)199- Statistics: [N] sourced / [N] unsourced200- Images: [N] (X with alt text, formats: ...)201- Charts: [N] (types: ...)202- Internal links: [N]203- External links: [N] (tier breakdown: ...)204- Schema types: [list]205- OG/social tags: [present/missing]206207### Recommended Actions2081. [Most impactful fix -- Critical items first]2092. [Second most impactful]2103. [Third]211212Run `/blog rewrite <file>` to apply these optimizations automatically.213```214215## Export Formats216217### Default: Markdown Report218Standard detailed report as shown above.219220### JSON Export (`--format json`)221Machine-readable output for integration with CI/CD or dashboards:222```json223{224 "file": "post.md",225 "title": "...",226 "score": 78,227 "rating": "Acceptable",228 "categories": {229 "content_quality": { "score": 22, "max": 30 },230 "seo_optimization": { "score": 18, "max": 25 },231 "eeat_signals": { "score": 12, "max": 15 },232 "technical_elements": { "score": 13, "max": 15 },233 "ai_citation_readiness": { "score": 13, "max": 15 }234 },235 "ai_detection": {236 "burstiness": 6.2,237 "ai_phrases_found": ["Furthermore", "Let's explore"],238 "ttr": 0.44,239 "ai_probability": 32240 },241 "issues": {242 "critical": [],243 "high": [],244 "medium": [],245 "low": []246 }247}248```249250### Table Export (`--format table`)251Compact summary for quick review:252```253File | Score | Rating | Content | SEO | EEAT | Tech | AI-Ready | AI Risk254post.md | 78 | Acceptable | 22/30 | 18/25 | 12/15 | 13/15 | 13/15 | 32%255```256257## Batch Mode258259When given a directory or `--batch` flag, scan for blog files and produce a260summary table. Use `--sort score` to order by score (ascending by default).261262```263## Blog Audit Summary: [N] Posts Analyzed264265| File | Score | Rating | Content | SEO | EEAT | Tech | AI-Ready | AI Risk | Top Issue |266|------|-------|--------|---------|-----|------|------|----------|---------|-----------|267| post-1.md | 85 | Strong | 26/30 | 20/25 | 13/15 | 14/15 | 12/15 | 18% | Missing OG tags |268| post-2.md | 42 | Rewrite | 10/30 | 8/25 | 5/15 | 9/15 | 10/15 | 71% | 12 fabricated stats |269| post-3.md | 71 | Acceptable | 20/30 | 16/25 | 10/15 | 12/15 | 13/15 | 25% | No answer-first |270271### Priority Queue (Lowest Scoring First)2721. post-2.md (42) -- Full rewrite needed, high AI content risk2732. post-3.md (71) -- Answer-first formatting + stats needed2743. post-1.md (85) -- Add OG tags, minor polish275276Run `/blog rewrite <file>` on each, starting from lowest score.277```278279---280> Converted and distributed by [TomeVault](https://tomevault.io/claim/agricidaniel) — claim your Tome and manage your conversions.281<!-- tomevault:4.0:skill_md:2026-04-14 -->