skills/blog-rewrite/SKILL.md
Rewrite and optimize existing blog posts for Google rankings (December 2025 Core Update, E-E-A-T) and AI citations (GEO/AEO). Full rewrite for both Google rankings AND AI citations. For AI-citation-only audit (no Google work), use blog-geo instead. Replaces fabricated statistics with sourced data, applies answer-first formatting, adds Pixabay/Unsplash images, generates built-in SVG charts, injects FAQ schema, performs AI content detection, adds citation capsules and information gain markers, and updates freshness signals. Works with any blog format (MDX, markdown, HTML). Use when user says "rewrite blog", "optimize blog", "update blog", "improve blog", "fix blog", "refresh blog post", "blog optimization".
npx skillsauth add agricidaniel/claude-blog blog-rewriteInstall 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.
Rewrites and optimizes existing blog posts for dual ranking: Google search and AI citation platforms. Preserves the author's voice while applying the 6 pillars of optimization.
Key references:
references/quality-scoring.md - 5-category scoring (Content 30, SEO 25, E-E-A-T 15, Technical 15, AI Citation 15)references/eeat-signals.md - Experience, expertise, authority, trust markersreferences/internal-linking.md - Linking strategy and anchor text rulesreferences/visual-media.md - Image sourcing and chart stylingskills/blog/references/synthesis-contract.md - 6 LAWs for re-citation hygiene during rewrite (v1.8.0; cross-skill ref lives in the orchestrator's references dir)skills/blog/references/research-quality.md - cross-source clustering for replacement-statistic research (v1.8.0)For 21 evidence-led optimization prompts (AI-detector test, CTR audit, schema, PAA rewording, technical audit, ChatGPT visibility) directly applicable to rewrite work, see /blog flow optimize.
references/quality-scoring.md:
agents/blog-writer.mdskills/blog/references/ai-slop-detection.md. Flag at minimum:
skills/blog/references/ai-slop-detection.md for
why the labels diverged in v1.8.1.Wait for user approval before proceeding.
[topic] study 2025 2026 data statisticssite:pixabay.com [topic keywords]site:unsplash.com [topic keywords]blog-imageWhen the post needs more visual elements, invoke the blog-chart sub-skill:
<figure> wrapperSee references/visual-media.md for chart type selection and styling rules.
Apply changes in this order:
lastUpdated: "YYYY-MM-DD" (today's date)date unchangedcoverImage + coverImageAlt + ogImage if missing
blog-chart (text-on-gradient with key stat)blog-image sub-skill (if nanobanana-mcp configured)Every H2 section MUST open with a 40-60 word paragraph containing:
([Source Name](url), year)blog-image sub-skill via Task)If the post lacks YouTube video embeds:
references/video-embeds.mdFor each H2 section, generate (or improve existing) a citation 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" category (15 points) in
references/quality-scoring.md.
Apply these transformations to reduce AI-detectable writing patterns:
If the post lacks a summary box, add one immediately after the introduction:
> **Key Takeaways**
> - [Core finding with statistic and source]
> - [Second key insight or recommendation]
> - [Third actionable takeaway]
> (3-5 bullets, 40-60 words combined. Self-contained - reader gets
> the core value without reading the full article.)
Default label is "Key Takeaways", but this is configurable per persona or brand voice (e.g., "The Bottom Line", "Quick Summary", "What You Need to Know").
If an existing TL;DR box is present, convert it to the bullet-point Key Takeaways format. Verify it meets the 40-60 word requirement and contains at least one statistic with source attribution.
Review the post for original value and tag it:
[ORIGINAL DATA] - Any proprietary data, survey results, experiments, or
case study metrics the author collected first-hand[PERSONAL EXPERIENCE] - First-hand observations, lessons learned[UNIQUE INSIGHT] - Novel analysis, contrarian perspectives backed by dataIf the post lacks original value markers:
Use HTML comments (<!-- [ORIGINAL DATA] -->) or visible callouts depending
on the post's style.
After rewriting, verify all quality gates pass:
## Blog Optimization Complete: [Title]
### Score Change
- Before: [X]/100 ([Rating])
- Content Quality: [X]/30
- SEO Optimization: [X]/25
- E-E-A-T Signals: [X]/15
- Technical Elements: [X]/15
- AI Citation Readiness: [X]/15
- After: [Y]/100 ([Rating])
- Content Quality: [Y]/30
- SEO Optimization: [Y]/25
- E-E-A-T Signals: [Y]/15
- Technical Elements: [Y]/15
- AI Citation Readiness: [Y]/15
### AI Detection
- Before: ~[X]% AI-detected content
- After: ~[Y]% AI-detected content
- Phrases replaced: [N]
- Burstiness improved: [before SD] -> [after SD]
### Cannibalization
- [Status: none found / flagged N posts / resolved]
### Changes Made
- [X] statistics replaced with sourced data
- [X] SVG charts added (types: ...)
- [X] images added from Pixabay/Unsplash
- Answer-first formatting applied to [N] H2 sections
- FAQ schema injected with [N] questions
- TL;DR box: [added/updated]
- Information gain markers: [N] ([types])
- Citation capsules: [N] across H2 sections
- AI phrases replaced: [N]
- lastUpdated set to [date]
- Self-promotion reduced to [N] mentions
### Visual Elements
- Charts: [count] ([types])
- Images: [count]
- YouTube videos: [count] ([titles])
### Ready for
- `/blog analyze <file>` to verify final score
- Publishing / deploying
Before presenting the rewritten draft, run the 5-gate delivery contract per skills/blog/references/blog-delivery-contract.md. The contract applies to rewrites the same way it applies to new posts: the user is never the first reviewer.
Steps:
python scripts/generate_hero.py --topic "<new title>" --tags "<tags>" --out <folder>.python scripts/blog_render.py --md <slug>.md --out-dir <folder> to refresh the .html and .pdf from the updated .md.blog-reviewer agent against the rendered .html. Threshold: score 90/100 or higher AND zero P0 issues.python scripts/blog_preflight.py --draft <folder> --strict. Exit 0 = ship; exit 1 = block.<folder>/preflight-report.json.Rewrites have a higher implicit threshold because the existing draft was presumably already published. Re-presenting something worse than the original is not acceptable. If the rewritten score is lower than the original score, that itself is a P0 condition.
When invoked as /blog update <file>, focus on freshness:
lastUpdated in frontmatterdevelopment
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".