skills/blog-write/SKILL.md
Write new blog articles from scratch optimized for Google rankings and AI citations. Generates full articles with template selection, answer-first formatting, Key Takeaways summary box, information gain markers, citation capsules, sourced statistics, Pixabay/Unsplash images, built-in SVG chart generation, FAQ schema, internal linking zones, and proper heading hierarchy. Supports MDX, markdown, and HTML output. Use when user says "write blog", "new blog post", "create article", "write about", "draft blog", "generate blog post".
npx skillsauth add agricidaniel/claude-blog blog-writeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Writes complete blog articles from a topic, brief, or outline. Every article follows the 6 pillars of dual optimization (Google rankings + AI citations).
Key references (paths relative to repo root; references live in the
main blog skill's references directory, not in blog-write/):
skills/blog/references/synthesis-contract.md: 6 LAWs for synthesis output (v1.8.0; applies whenever the article embeds research-synthesis prose)skills/blog/references/content-templates.md: Template selection guide and usageskills/blog/references/quality-scoring.md: 5-category scoring (Content 30, SEO 25, E-E-A-T 15, Technical 15, AI Citation 15)skills/blog/references/eeat-signals.md: Experience, expertise, authority, trust markersskills/blog/references/internal-linking.md: Linking strategy and anchor text rulesskills/blog/references/visual-media.md: Image sourcing and chart stylingDecide which of the FLOW 5 surfaces this post is meant to win. The choice shapes structure, length, citation density, and call-to-action. The 5 surfaces in 2026:
Most posts target surfaces 1, 2, and 3 by default. If the same query also
surfaces in a community (Reddit thread, YouTube comment), apply dual-surface
thinking: optimize the post for extraction AND plan a community echo (covered
in /blog repurpose).
For a deeper surface-by-surface workflow, see
skills/blog/references/flow-alignment.md and /blog flow find.
Select the appropriate content template from the 12 templates in
skills/blog/templates/ (the main blog skill owns the templates directory).
Auto-detect content type from the topic and search intent:
| Signal | Template |
|--------|----------|
| "How to...", process, steps | how-to-guide |
| "Best X", "Top N", list format | listicle |
| Client result, before/after, metrics | case-study |
| "X vs Y", comparison, alternatives | comparison |
| Broad topic, comprehensive guide | pillar-page |
| "Is X worth it", product evaluation | product-review |
| Opinion, prediction, industry take | thought-leadership |
| Expert quotes, multi-source collection | roundup |
| Code walkthrough, tool demo, technical | tutorial |
| Breaking news, algorithm update, event | news-analysis |
| Survey results, experiment, original data | data-research |
| Q&A, knowledge base, "What is X" | faq-knowledge |
Load the matching template: Read from skills/blog/templates/<type>.md
Adapt the outline - Use the template's section structure, heading patterns, and word count guidance to shape Phase 3's outline
Fallback - If no template clearly fits, use the generic outline structure in Phase 3 below. Inform the user which template was selected (or that none matched).
See skills/blog/references/content-templates.md for detailed selection criteria and intent mapping.
Spawn a blog-researcher agent (or do inline research with WebSearch):
[topic] study 2025 2026 data statisticsskills/blog/references/quality-scoring.md)site:pixabay.com [topic] wide banner (preferred)site:unsplash.com [topic] widesite:pexels.com [topic] wide bannerblog-chart (text-on-gradient with key stat)blog-image sub-skill (if nanobanana-mcp configured)skills/blog/references/visual-media.md for cover image sizing detailssite:pixabay.com [topic keywords]
https://cdn.pixabay.com/photo/YYYY/MM/DD/HH/MM/filename.jpgcurl -sI "<url>" | head -1 returns HTTP 200site:unsplash.com [topic keywords]
https://images.unsplash.com/photo-<id>?w=1200&h=630&fit=crop&q=80site:pexels.com [topic keywords]skills/blog/references/visual-media.md)blog-image sub-skillblog-notebooklm for source-grounded data from user-uploaded documentsblog-google youtube command or WebSearch site:youtube.com [topic] [year]skills/blog/references/video-embeds.md (min score 50/100)Create a structured outline before writing. If a template was loaded in Phase 1.5, adapt this skeleton to match the template's section structure:
# [Title as Question - Include Primary Keyword]
## Introduction (100-150 words)
- Hook with surprising statistic
- Problem/opportunity statement
- What the reader will learn
> **Key Takeaways**
> - [Core finding with statistic and source]
> - [Second key insight or recommendation]
> - [Third actionable takeaway]
> (3-5 bullets, 40-60 words combined)
## H2: [Question Format] (300-400 words)
- Answer-first paragraph (40-60 words with stat + source)
- Supporting evidence
- [Image placement]
- Practical advice
- [CITATION CAPSULE placeholder]
- [INTERNAL-LINK: anchor text → target description]
## H2: [Question Format] (300-400 words)
- Answer-first paragraph
- [Chart: type + data description]
- Analysis and implications
- [CITATION CAPSULE placeholder]
- [INTERNAL-LINK: anchor text → target description]
## H2: [Statement for Variety] (300-400 words)
- Answer-first paragraph
- Real-world example or case study
- [Image placement]
- [CITATION CAPSULE placeholder]
## H2: [Question Format] (300-400 words)
- Answer-first paragraph
- [Chart: type + data description]
- Step-by-step guidance
- [CITATION CAPSULE placeholder]
- [INTERNAL-LINK: anchor text → target description]
## H2: [Question Format] (200-300 words)
- Answer-first paragraph
- Forward-looking analysis
## [CTA Section or Inline Placement]
- See `skills/blog/references/cta-placement.md` for placement rules by content type
- Place CTA after value delivery, not at arbitrary positions
- Single focused CTA per post (266% more conversions)
- [CTA: contextual call-to-action matching article topic]
## FAQ Section (3-5 questions, 40-60 words each answer)
- [INTERNAL-LINK: anchor text → detailed content]
## Conclusion (100-150 words)
- Key takeaways (bulleted)
- Call to action
- [INTERNAL-LINK: anchor text → next logical content]
Present the outline to the user for approval before writing.
Visual element pacing: Insert [IMAGE], [CHART], [VIDEO], or [CALLOUT] markers
every 300-500 words. Alternate types (no consecutive same-type). See
skills/blog/references/content-rules.md Visual Rhythm section and
skills/blog/references/cta-placement.md for CTA positioning.
When the researcher identifies chart-worthy data (3+ comparable metrics, trend data, before/after comparisons):
blog-chart sub-skill with: chart type, title, data values, source, platform format<figure> wrapperSee skills/blog/references/visual-media.md for chart type selection and styling rules.
Write the full article following these rules:
---
title: "[Question-format title with primary keyword]"
description: "[Fact-dense, 150-160 chars, includes 1 statistic]"
coverImage: "[URL from Pixabay/Unsplash/Pexels or generated SVG path]"
coverImageAlt: "[Descriptive sentence about the cover image]"
ogImage: "[Same as coverImage, or custom OG image URL]"
date: "YYYY-MM-DD"
lastUpdated: "YYYY-MM-DD"
author: "[Author name]"
tags: ["keyword1", "keyword2", "keyword3"]
---
If the platform uses a different field name (e.g., image, hero, thumbnail),
adapt to match the project's existing frontmatter convention.
Immediately after the introduction (before the first H2 body section), add a summary box:
> **Key Takeaways**
> - [Core finding with statistic] ([Source], year)
> - [Second key insight or recommendation]
> - [Third actionable takeaway]
Requirements:
Every H2 section MUST open with a 40-60 word paragraph containing:
Pattern:
## How Does X Impact Y in 2026?
[Stat from source] ([Source Name](url), year). [Direct answer to the heading
question in 1-2 more sentences, explaining the implication and what this means
for the reader.]
FLOW evidence triple (drafting requirement, not just audit):
Every public statistic must carry three components AT DRAFTING TIME:
Year anchor in prose. Write "In 2026," or "As of Q1 2026," BEFORE the statistic, in the sentence body. Year buried inside parentheses does not count. Example:
Inline citation with publisher and title. Name both the publisher and the document title (or report name), not just a brand. Example:
URL plus retrieval date in the source block at the bottom of the post. Provenance discipline lets future readers and AI crawlers verify the source still says what was claimed. Format:
FLOW quality bar (drop or replace): Public claims must use verified sources OR stay qualitative. If a statistic cannot be verified, drop it. If it is contradicted by a more recent source, replace it with the verified alternative. Do not soften vague language to keep an unsourceable number.
For evidence-led optimization prompts (CTR audit, AI detector test, schema,
PAA rewording, ChatGPT visibility), see /blog flow optimize.
Distribute at least 2-3 information gain markers throughout the article. These signal to search engines and AI systems that the content contains original value not available elsewhere.
Tag each with a comment or visible marker:
[ORIGINAL DATA] - Proprietary surveys, experiments, A/B test results, case
study metrics the author collected first-hand[PERSONAL EXPERIENCE] - First-hand observations, lessons learned from direct
involvement, "when we tried X, Y happened" narratives[UNIQUE INSIGHT] - Analysis others haven't made, contrarian perspectives
backed by data, novel connections between existing researchPlacement:
<!-- [ORIGINAL DATA] --> before the relevant paragraph> **Our finding:** [original observation backed by specific data]
These markers map directly to the "Originality/unique value markers" criterion
in the Content Quality scoring category (see skills/blog/references/quality-scoring.md).
For each major H2 section, generate a citation capsule - a 40-60 word self-contained passage designed so AI systems can extract and quote it directly.
Requirements per capsule:
Example:
According to a 2026 Gartner study, 58% of enterprise buyers now consult AI
assistants before contacting a vendor ([Gartner](https://www.gartner.com), 2026).
This shift means B2B content must answer specific questions concisely enough
for AI systems to extract and cite in their responses.
Capsules map to the "AI Citation Readiness" scoring category (15 points) in
skills/blog/references/quality-scoring.md.
Mark internal linking opportunities throughout the article using placeholder notation. The user (or a follow-up pass) will resolve these to actual URLs.
Zone placement:
Format:
[INTERNAL-LINK: anchor text → target description]
Example:
For a deeper dive into keyword clustering, see our
[INTERNAL-LINK: complete guide to keyword clustering → pillar page on keyword research methodology].
Target 5-10 internal link zones per 2,000-word post. Use descriptive anchor text
(never "click here" or "read more"). See skills/blog/references/internal-linking.md for
anchor text rules and linking strategy.
Standard markdown:

MDX with Next.js Image (if detected):

Standard markdown/HTML:
<figure>
<svg viewBox="0 0 560 380" ...>...</svg>
<figcaption>Source: [Source Name], [Year]</figcaption>
</figure>
MDX format:
<figure className="chart-container" style={{margin: '2.5rem 0', textAlign: 'center', padding: '1.5rem', borderRadius: '12px'}}>
<svg viewBox="0 0 560 380" ...>...</svg>
</figure>
Embed YouTube videos using srcdoc lazy-loading pattern from skills/blog/references/video-embeds.md.
Include aria-label, noscript fallback for AI crawlers. Place after relevant H2, 500+ words apart.
Inline attribution (always):
Organic CTR declined 61% with AI Overviews ([Seer Interactive](https://www.seerinteractive.com/), 2025).
Add 3-5 FAQ items with 40-60 word answers. Each answer must contain a statistic.
For MDX with FAQSchema component:
<FAQSchema faqs={[
{ question: "Question?", answer: "40-60 word answer with statistic and source." },
]} />
For standard markdown:
## Frequently Asked Questions
### Question text here?
Answer with statistic and source attribution (40-60 words).
Before delivering, verify:
[ORIGINAL DATA], [PERSONAL EXPERIENCE], or [UNIQUE INSIGHT])agents/blog-writer.md)agents/blog-writer.mdskills/blog/references/video-embeds.md)Before Phase 7, run the 5-gate delivery contract per skills/blog/references/blog-delivery-contract.md. The user is never the first reviewer; the gates are.
Steps:
Capability discovery + hero: run python scripts/blog_preflight.py --draft <folder> --gate 1 to enumerate available paths. If nanobanana-mcp is loaded, generate the hero via the MCP tool. Otherwise run python scripts/generate_hero.py --topic "<title>" --tags "<tags>" --out <folder> (uses the Gemini, Unsplash, Pexels, Pixabay, Openverse ladder).
Format completeness: render the canonical .md to .html and .pdf via python scripts/blog_render.py --md <slug>.md --out-dir <folder>. All three artifacts plus hero.<ext> must end up in the draft folder.
Content review (blocking): dispatch the blog-reviewer agent (Task tool) against the rendered .html. The agent emits its scorecard to <folder>/review.md ending with BLOCKING: true|false (reason). Threshold: overall score 90/100 or higher AND zero P0 issues per editorial-heuristics.md.
Visual + asset gates: run python scripts/blog_preflight.py --draft <folder> --strict. This runs Gate 3 (visual verification via patchright at 3 viewport widths), Gate 4 (reads review.md BLOCKING line), and Gate 5 (asset + link integrity). Exit 0 = ship; exit 1 = block.
Iteration: on any block, capture the failure diagnostic from <folder>/preflight-report.json, re-dispatch the blog-writer agent with the diagnostic as input, and re-run from step 1. Maximum 3 iterations. On the 3rd failure, STOP and present the failure diagnostic instead of the draft.
The orchestrator holds the loop counter; this sub-skill never loops itself.
Present the completed article ONLY after Phase 6.5 returns all gates passing. Include the screenshots from <folder>/preview/*.png in the summary so the user can see what they are getting before reading the prose.
Summary template:
## Blog Post Complete: [Title]
### Template Used
- [Template name] (or "generic outline - no template matched")
### Statistics
- [N] sourced statistics from tier 1-3 sources
- [N] unique sources cited
### Visual Elements
- Cover image: [source - Pixabay/Unsplash/Pexels or generated SVG]
- [N] inline images (Pixabay/Unsplash/Pexels)
- [N] SVG charts (types: bar, lollipop, donut, line)
- [N] YouTube video embeds (titles: ...)
### Dual-Optimization Elements
- TL;DR box: present (N words)
- Information gain markers: [N] ([types used])
- Citation capsules: [N] across H2 sections
- Internal linking zones: [N] marked
### Structure
- [N] H2 sections with answer-first formatting
- [N] FAQ items with schema
- Word count: ~[N] words
- Estimated reading time: [N] min
### Naturalness
- Sentence length variance: [pass/fail]
- AI phrase scan: [pass/fail]
- Contractions used: [yes/no]
- Rhetorical questions: [N] (target: 1 per 200-300 words)
### Next Steps
- Review and customize for your brand voice
- Resolve [INTERNAL-LINK] placeholders with actual URLs
- Add internal links to your existing content
- Run `/blog analyze <file>` to verify quality score
- Generate VideoObject schema: `/blog schema <file>` (includes video markup)
- Generate audio narration: `/blog audio generate <file>` (optional)
development
Research what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms. API-free; uses WebSearch with platform-targeted site operators plus recency filters. Produces DISCOURSE.md (a structured brief) and JSON output the writer can consume. Complements blog-researcher (which focuses on authority sources) with a recency-and-engagement lens. Use when user says "blog discourse", "discourse research", "what are people saying about", "research what people are saying", "voice of customer", "social listening", "30-day research", "trend research", "what's the discussion on", "real-time research", "practitioner discourse", "/blog discourse".
documentation
Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't editorial rules, taboo phrases, competitor differentiation) and VOICE.md (existing persona JSON re-expressed as readable prose), both written to the project root. When present, all blog sub-skills auto-load these files before writing or reviewing. Pairs with blog-persona, which manages the structured persona JSON. Use when user says "blog brand", "create brand context", "brand voice doc", "BRAND.md", "VOICE.md", "establish editorial brand", "brand guidelines for blog".
testing
Translate existing blog posts into one or more target languages with SEO-optimized localization. Produces native-quality translations that preserve markdown structure, frontmatter, schema JSON-LD, image and chart embeds, and citation capsules. Localizes keywords, meta tags, numbers, dates, currencies, and quote styles per locale. Flags machine-translation artifacts for review. Run BEFORE blog-localize: this handles language conversion; localize handles cultural adaptation after translation completes. Use when user says "translate blog", "blog translate", "uebersetzen", "traduire", "traducir", "translate post", "blog auf Deutsch", "blog en espanol".
testing
One-command multilingual blog creation. Writes a blog post, translates it into user-specified languages, applies cultural adaptation, and emits hreflang tags, sitemap entries, and a CMS-ready language map. The complete write-to-publish pipeline for international content. Orchestrates blog-write, blog-translate, blog-localize, and (optionally) seo-hreflang. Use when user says "multilingual blog", "blog multilingual", "write in multiple languages", "international blog", "mehrsprachiger Blog", "blog multilingue", "blog multilingue", "create blog in German and French".