Blog quality scoring checklist skill
Score each blog post against this checklist.
by AgriciDaniel·MIT license·★ 2,219 Stars on the repo·GitHub ↗
Use now
Files of Blog quality scoring checklist
AgriciDaniel/
quality-scoring.md
Show the full text165 lines
Blog Quality Scoring Checklist
Score each blog post against this checklist. Used by /blog analyze.
Content Quality (30 points)
| Check | Points | Pass Criteria |
|---|---|---|
| Depth/comprehensiveness | 7 | Covers topic thoroughly, no major gaps |
| Readability | 7 | Match the audience; default Flesch 60-70, 55-75 acceptable; technical/YMYL topics may justify denser prose |
| 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 near the top, callouts, varied content blocks |
| Grammar/anti-pattern | 3 | Passive voice ≤10%, AI trigger words ≤5/1K, transition words 20-30%, clean prose |
SEO Optimization (25 points)
| Check | Points | Pass Criteria |
|---|---|---|
| Heading hierarchy with keywords | 5 | H1 → H2 → H3, no skips, keyword in 2-3 headings, H2 every 200-300 words |
| Title tag (40-60 chars, keyword, power word) | 4 | Front-loaded keyword, positive sentiment, brackets if applicable |
| Keyword placement/density | 4 | Natural integration (0.5-2%), no stuffing, present in first 100 words |
| Internal linking (3-10 contextual) | 4 | Descriptive anchor text, bidirectional, related content |
| URL structure | 3 | Short, keyword-rich, no stop words, lowercase |
| Meta description (150-160 chars) | 3 | Fact-dense, clear value prop; include a sourced statistic only when central to the page |
| 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 (accountable, with bio) | 4 | Named author/editor preferred; organization attribution acceptable with clear editorial ownership |
| Source citations (tier 1-3, inline format) | 4 | ([Source](url), year) format, 8+ unique stats, zero fabricated |
| Trust indicators (contact, about, transparency) | 4 | Site has contact page, about page, editorial policy |
| Experience signals (first-person markers) | 3 | "When we tested...", "In our experience...", original photos/data |
Source citations gating rule: Sources must follow the FLOW evidence triple: year anchor in prose, inline citation with publisher and title, AND URL with retrieval date in compact retrieval notes, footnotes, or a bibliography. Sources without retrieval dates do not pass this criterion. Reference: flow-alignment.md.
Technical Elements (15 points)
| Check | Points | Pass Criteria |
|---|---|---|
| Schema markup priority baseline | 4 | Article/BlogPosting + Person + Organization + BreadcrumbList; FAQPage optional only for visible Q&A entity support; dateModified current |
| Image optimization (alt text, format, lazy load) | 3 | AVIF/WebP, descriptive alt text, lazy except LCP |
| Structured data elements | 2 | Tables, lists, comparison blocks for AI extraction |
| Page speed signals (no render-blocking) | 2 | LCP < 2.5s, no render-blocking JS, fetchpriority on hero |
| Mobile-friendliness | 2 | Responsive, tap targets 48px+, no horizontal scroll, paragraphs ≤100 words |
| OG/social meta tags | 2 | og:title, og:description, og:image (1200x630), twitter:card |
AI Citation Readiness (15 points)
| Check | Points | Pass Criteria |
|---|---|---|
| Passage-level citability (120-180 word passages) | 4 | About 50-word direct-answer sentence followed by self-contained passage with stat + source |
| Q&A formatted sections | 3 | 60-70% of H2s as questions, visible FAQ section when template calls for it |
| 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, robots.txt allows AI bots |
Total: 100 points
Scoring Bands
| 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 before publish |
| 60-69 | Below Standard | Significant rework required |
| < 60 | Rewrite | Fundamental issues, start from outline |
Priority Classification
When reporting issues, classify by priority:
Critical (Must Fix Before Publishing)
- Fabricated statistics (zero tolerance)
- Broken heading hierarchy (H1 → H3 skip)
- Paragraphs > 200 words (Yoast red)
- No source attribution on claims
- Missing author attribution
- Content behind JavaScript (invisible to AI crawlers)
- Missing summary box near the top
High Priority
- Missing answer-first formatting on H2 sections
- Missing Article/Person/Organization/BreadcrumbList schema baseline
- Missing visible Q&A section when the selected template calls for FAQ
- Fewer than 8 sourced statistics
- Missing meta description or lastUpdated
- Title tag outside 40-60 character range
- No internal links
- Flesch score outside 55-75 range
- No OG/social meta tags
- Paragraphs > 150 words
- Passive voice > 15%
- AI trigger words > 8 per 1,000
Medium Priority
- Fewer than 2 charts
- Fewer than 3 images
- Tier 4-5 sources present
- Self-promotion > 1 mention
- Sections exceeding 300 words between headings
- Missing experience signals (no first-person markers)
- Images not in AVIF/WebP format
loading="lazy"on LCP image- Average sentence length > 22 words
- Transition words < 15% or > 35%
Low Priority
- Paragraph length slightly above 80 words (but under 150)
- Question-format H2 ratio outside 60-70%
- Missing chart type diversity
- Images without alt text
- Missing external links to tier 1-3 sources
- Entity terminology inconsistency
Quick Automated Checks
These can be detected programmatically:
Content Quality
- Word count per paragraph (split on double newlines, flag > 150, critical > 200)
- Sentence count per paragraph (flag > 3 sentences)
- Flesch-Kincaid score (default target 60-70, acceptable 55-75; adjust for audience)
- Heading frequency (flag gaps > 300 words between H2s)
- Summary box presence in first 500 characters (accept "TL;DR", "Key Takeaways", "Summary", or "Quick Answer")
- Average sentence length (target 15-20, flag > 22)
- Sentences over 20 words (flag if > 25% of total)
- Passive voice percentage (flag > 10%, high priority > 15%)
- AI trigger word density (flag > 5 per 1,000 words)
- Transition word percentage (target 20-30%, flag < 15% or > 35%)
SEO Optimization
- Title tag length (frontmatter, target 40-60 chars)
- Heading hierarchy (regex for
^#{1,6}, no skipped levels) - Meta description length (frontmatter, target 150-160 chars)
- Internal link count (regex for relative URLs or same-domain links)
- External link count and tier classification
- URL structure check (lowercase, no stop words)
E-E-A-T Signals
- Author attribution presence (frontmatter
authorfield) - Citation format (regex for
\([^)]+\(http) - Unsourced statistics (numbers without attribution nearby)
- Self-promotion patterns (brand name frequency, max 1)
- First-person markers ("we tested", "in our experience")
Technical Elements
- Image count (regex for
!\[or<img) - Image alt text presence (images without alt attribute)
- Chart count (regex for
<svgor<figure) - Schema presence (search for structured data markers)
- OG meta tags (frontmatter
ogImage,coverImage) loading="lazy"on first image (flag as LCP issue)- lastUpdated presence (frontmatter check)
AI Citation Readiness
- Opening citable passage after each H2 (target 120-180 words after about 50-word answer sentence)
- Question-format heading ratio (target 60-70% of H2s)
- Visible Q&A presence when template calls for FAQ
- Table presence with
<thead>(for AI extraction) - robots.txt AI bot allowance (site-level check)
| 1 | # Blog Quality Scoring Checklist |
| 2 | |
| 3 | Score each blog post against this checklist. Used by `/blog analyze`. |
| 4 | |
| 5 | ## Content Quality (30 points) |
| 6 | |
| 7 | | Check | Points | Pass Criteria | |
| 8 | |-------|--------|---------------| |
| 9 | | Depth/comprehensiveness | 7 | Covers topic thoroughly, no major gaps | |
| 10 | | Readability | 7 | Match the audience; default Flesch 60-70, 55-75 acceptable; technical/YMYL topics may justify denser prose | |
| 11 | | Originality/unique value markers | 5 | Original data, case studies, first-hand experience | |
| 12 | | Sentence & paragraph structure | 4 | Avg sentence 15-20 words, ≤25% over 20; paragraphs 40-80 words; H2 every 200-300 words | |
| 13 | | Engagement elements | 4 | Summary box near the top, callouts, varied content blocks | |
| 14 | | Grammar/anti-pattern | 3 | Passive voice ≤10%, AI trigger words ≤5/1K, transition words 20-30%, clean prose | |
| 15 | |
| 16 | ## SEO Optimization (25 points) |
| 17 | |
| 18 | | Check | Points | Pass Criteria | |
| 19 | |-------|--------|---------------| |
| 20 | | Heading hierarchy with keywords | 5 | H1 → H2 → H3, no skips, keyword in 2-3 headings, H2 every 200-300 words | |
| 21 | | Title tag (40-60 chars, keyword, power word) | 4 | Front-loaded keyword, positive sentiment, brackets if applicable | |
| 22 | | Keyword placement/density | 4 | Natural integration (0.5-2%), no stuffing, present in first 100 words | |
| 23 | | Internal linking (3-10 contextual) | 4 | Descriptive anchor text, bidirectional, related content | |
| 24 | | URL structure | 3 | Short, keyword-rich, no stop words, lowercase | |
| 25 | | Meta description (150-160 chars) | 3 | Fact-dense, clear value prop; include a sourced statistic only when central to the page | |
| 26 | | External linking (tier 1-3) | 2 | 3-8 outbound links to authoritative sources | |
| 27 | |
| 28 | ## E-E-A-T Signals (15 points) |
| 29 | |
| 30 | | Check | Points | Pass Criteria | |
| 31 | |-------|--------|---------------| |
| 32 | | Author attribution (accountable, with bio) | 4 | Named author/editor preferred; organization attribution acceptable with clear editorial ownership | |
| 33 | | Source citations (tier 1-3, inline format) | 4 | `([Source], year)` format, 8+ unique stats, zero fabricated | |
| 34 | | Trust indicators (contact, about, transparency) | 4 | Site has contact page, about page, editorial policy | |
| 35 | | Experience signals (first-person markers) | 3 | "When we tested...", "In our experience...", original photos/data | |
| 36 | |
| 37 | **Source citations gating rule:** Sources must follow the FLOW evidence triple: year anchor in prose, inline citation with publisher and title, AND URL with retrieval date in compact retrieval notes, footnotes, or a bibliography. Sources without retrieval dates do not pass this criterion. Reference: `flow-alignment.md`. |
| 38 | |
| 39 | ## Technical Elements (15 points) |
| 40 | |
| 41 | | Check | Points | Pass Criteria | |
| 42 | |-------|--------|---------------| |
| 43 | | Schema markup priority baseline | 4 | Article/BlogPosting + Person + Organization + BreadcrumbList; FAQPage optional only for visible Q&A entity support; dateModified current | |
| 44 | | Image optimization (alt text, format, lazy load) | 3 | AVIF/WebP, descriptive alt text, lazy except LCP | |
| 45 | | Structured data elements | 2 | Tables, lists, comparison blocks for AI extraction | |
| 46 | | Page speed signals (no render-blocking) | 2 | LCP < 2.5s, no render-blocking JS, fetchpriority on hero | |
| 47 | | Mobile-friendliness | 2 | Responsive, tap targets 48px+, no horizontal scroll, paragraphs ≤100 words | |
| 48 | | OG/social meta tags | 2 | og:title, og:description, og:image (1200x630), twitter:card | |
| 49 | |
| 50 | ## AI Citation Readiness (15 points) |
| 51 | |
| 52 | | Check | Points | Pass Criteria | |
| 53 | |-------|--------|---------------| |
| 54 | | Passage-level citability (120-180 word passages) | 4 | About 50-word direct-answer sentence followed by self-contained passage with stat + source | |
| 55 | | Q&A formatted sections | 3 | 60-70% of H2s as questions, visible FAQ section when template calls for it | |
| 56 | | Entity clarity | 3 | Unambiguous topic entity, consistent terminology | |
| 57 | | Content structure for extraction | 3 | Answer-first, tables with `<thead>`, comparison formats | |
| 58 | | AI crawler accessibility | 2 | SSR/SSG, no JS-gated content, robots.txt allows AI bots | |
| 59 | |
| 60 | ## Total: 100 points |
| 61 | |
| 62 | ### Scoring Bands |
| 63 | |
| 64 | | Score | Rating | Action | |
| 65 | |-------|--------|--------| |
| 66 | | 90-100 | Exceptional | Publish as-is, flagship content | |
| 67 | | 80-89 | Strong | Minor polish, ready for publication | |
| 68 | | 70-79 | Acceptable | Targeted improvements needed before publish | |
| 69 | | 60-69 | Below Standard | Significant rework required | |
| 70 | | < 60 | Rewrite | Fundamental issues, start from outline | |
| 71 | |
| 72 | ## Priority Classification |
| 73 | |
| 74 | When reporting issues, classify by priority: |
| 75 | |
| 76 | ### Critical (Must Fix Before Publishing) |
| 77 | Fabricated statistics (zero tolerance) |
| 78 | Broken heading hierarchy (H1 → H3 skip) |
| 79 | Paragraphs > 200 words (Yoast red) |
| 80 | No source attribution on claims |
| 81 | Missing author attribution |
| 82 | Content behind JavaScript (invisible to AI crawlers) |
| 83 | Missing summary box near the top |
| 84 | |
| 85 | ### High Priority |
| 86 | Missing answer-first formatting on H2 sections |
| 87 | Missing Article/Person/Organization/BreadcrumbList schema baseline |
| 88 | Missing visible Q&A section when the selected template calls for FAQ |
| 89 | Fewer than 8 sourced statistics |
| 90 | Missing meta description or lastUpdated |
| 91 | Title tag outside 40-60 character range |
| 92 | No internal links |
| 93 | Flesch score outside 55-75 range |
| 94 | No OG/social meta tags |
| 95 | Paragraphs > 150 words |
| 96 | Passive voice > 15% |
| 97 | AI trigger words > 8 per 1,000 |
| 98 | |
| 99 | ### Medium Priority |
| 100 | Fewer than 2 charts |
| 101 | Fewer than 3 images |
| 102 | Tier 4-5 sources present |
| 103 | Self-promotion > 1 mention |
| 104 | Sections exceeding 300 words between headings |
| 105 | Missing experience signals (no first-person markers) |
| 106 | Images not in AVIF/WebP format |
| 107 | `loading="lazy"` on LCP image |
| 108 | Average sentence length > 22 words |
| 109 | Transition words < 15% or > 35% |
| 110 | |
| 111 | ### Low Priority |
| 112 | Paragraph length slightly above 80 words (but under 150) |
| 113 | Question-format H2 ratio outside 60-70% |
| 114 | Missing chart type diversity |
| 115 | Images without alt text |
| 116 | Missing external links to tier 1-3 sources |
| 117 | Entity terminology inconsistency |
| 118 | |
| 119 | ## Quick Automated Checks |
| 120 | |
| 121 | These can be detected programmatically: |
| 122 | |
| 123 | ### Content Quality |
| 124 | Word count per paragraph (split on double newlines, flag > 150, critical > 200) |
| 125 | Sentence count per paragraph (flag > 3 sentences) |
| 126 | Flesch-Kincaid score (default target 60-70, acceptable 55-75; adjust for audience) |
| 127 | Heading frequency (flag gaps > 300 words between H2s) |
| 128 | Summary box presence in first 500 characters (accept "TL;DR", "Key Takeaways", "Summary", or "Quick Answer") |
| 129 | Average sentence length (target 15-20, flag > 22) |
| 130 | Sentences over 20 words (flag if > 25% of total) |
| 131 | Passive voice percentage (flag > 10%, high priority > 15%) |
| 132 | AI trigger word density (flag > 5 per 1,000 words) |
| 133 | Transition word percentage (target 20-30%, flag < 15% or > 35%) |
| 134 | |
| 135 | ### SEO Optimization |
| 136 | Title tag length (frontmatter, target 40-60 chars) |
| 137 | Heading hierarchy (regex for `^#{1,6} `, no skipped levels) |
| 138 | Meta description length (frontmatter, target 150-160 chars) |
| 139 | Internal link count (regex for relative URLs or same-domain links) |
| 140 | External link count and tier classification |
| 141 | URL structure check (lowercase, no stop words) |
| 142 | |
| 143 | ### E-E-A-T Signals |
| 144 | Author attribution presence (frontmatter `author` field) |
| 145 | Citation format (regex for `\([^)]+\(http`) |
| 146 | Unsourced statistics (numbers without attribution nearby) |
| 147 | Self-promotion patterns (brand name frequency, max 1) |
| 148 | First-person markers ("we tested", "in our experience") |
| 149 | |
| 150 | ### Technical Elements |
| 151 | Image count (regex for `!\[` or `<img`) |
| 152 | Image alt text presence (images without alt attribute) |
| 153 | Chart count (regex for `<svg` or `<figure`) |
| 154 | Schema presence (search for structured data markers) |
| 155 | OG meta tags (frontmatter `ogImage`, `coverImage`) |
| 156 | `loading="lazy"` on first image (flag as LCP issue) |
| 157 | lastUpdated presence (frontmatter check) |
| 158 | |
| 159 | ### AI Citation Readiness |
| 160 | Opening citable passage after each H2 (target 120-180 words after about 50-word answer sentence) |
| 161 | Question-format heading ratio (target 60-70% of H2s) |
| 162 | Visible Q&A presence when template calls for FAQ |
| 163 | Table presence with `<thead>` (for AI extraction) |
| 164 | robots.txt AI bot allowance (site-level check) |
| 165 |
Discussion
Alternatives
Browse more free Claude skills or everything in Content creator.