Skip to main content
skill CX Codex

write-blog — Claude Code skill: full SEO blog posts

Drafts a complete blog post: keyword research, an outline built from the SERP, then the article with meta tags. Useful when you need copy for a specific query.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add OpenClaudia/openclaudia-skills --skill write-blog -a claude-code
Open on GitHub

What write-blog does

The skill turns the agent into an SEO writer. It starts by pinning down the target keyword, secondary terms, search intent and audience, then builds an outline: H1, meta title, meta description, URL slug and a section structure with H2s and H3s. Only after that does it write.

When SEMRUSH_API_KEY is set, the skill pulls keyword metrics through the SemRush API — volume, CPC, competition index and organic result count. Those numbers steer the draft: keywords above 5,000 monthly searches typically call for 2,500+ words, and a CPC over $5 means readers are close to buying, so comparisons and product mentions get added. No key, no metrics step.

The writing rules are baked in: paragraphs of 2–4 sentences, an H2 every 200–300 words, tables for comparisons, the primary keyword in the H1 and the first 100 words, density between 0.5% and 1.5%. A separate section covers E-E-A-T signals. If you have no SemRush access, the structural rules still carry the draft on their own.

What it helps with

  • draft an article targeting one search query
  • break a topic into sections before writing a word
  • size the post to the search volume of the keyword
  • write a meta title and description inside the character limits
  • check the keyword landed in the H1 and opening paragraph

Example prompts for the agent

  • write a blog post about picking hosting for a side project
  • create an SEO article for the keyword "how to start a blog"
  • outline and draft a post comparing Notion and Obsidian

How to install write-blog

1Skills CLI (Vercel)

npx skills add OpenClaudia/openclaudia-skills --skill write-blog -a claude-code

2Manually: put the files in place

~/.claude/skills/write-blog/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/write-blog/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about write-blog

How do I install write-blog in Claude?

Run npx skills add OpenClaudia/openclaudia-skills --skill write-blog -a claude-code. The skill lands at ~/.claude/skills/write-blog/SKILL.md.

What does write-blog do?

It walks the agent through the whole cycle: keyword and intent analysis, an outline with meta tags, then the article itself with readability and keyword-placement rules.

Do I need a SemRush key for it to work?

No. Metrics are fetched only when SEMRUSH_API_KEY is set. Without it the skill still writes the post from the structure and style rules, minus volume and competition data.

Source text

SKILL.md · MIT
---
name: write-blog
description: Generate a full SEO-optimized blog post. Use when the user says "write a blog post", "blog article", "write about", "create content for", "SEO article", "blog content", "write a post about", or provides a keyword and asks for a written article.
---

# Write Blog Post Skill

You are an expert SEO content writer. Create comprehensive, well-researched blog posts optimized for both search engines and readers. Follow the E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness).

## Blog Writing Process

### Step 1: Research & Briefing

Before writing a single word, gather intelligence:

**1A. Understand the keyword**
Ask or infer:
- **Target keyword:** Primary keyword to rank for
- **Secondary keywords:** 3-5 related terms to include naturally
- **Search intent:** What does the searcher want? (Answer, comparison, tutorial, list)
- **Target audience:** Who is reading this? (Beginner/intermediate/expert, role, industry)
- **Business goal:** What should the reader do after? (Sign up, buy, share, learn)

**1B. Get Keyword Data (if SemRush API available)**

If `SEMRUSH_API_KEY` is set, pull real keyword metrics to inform the content strategy:

```bash
# Get keyword data for the target keyword
curl -s "https://api.semrush.com/?type=phrase_all&key=${SEMRUSH_API_KEY}&phrase={keyword}&database=us&export_columns=Ph,Nq,Cp,Co,Nr"
```

The response is semicolon-delimited with columns:
- **Ph** - Keyword phrase
- **Nq** - Monthly search volume (use this to gauge content depth: higher volume = more comprehensive article)
- **Cp** - CPC in dollars (high CPC signals strong commercial intent - emphasize CTAs and product mentions)
- **Co** - Competition index 0-1 (high competition means you need stronger E-E-A-T signals)
- **Nr** - Number of organic results (more results = more competitive SERP)

Use these insights to:
- **Calibrate word count:** Keywords with volume >5,000 typically need 2,500+ word articles
- **Adjust commercial angle:** CPC > $5 means readers have buying intent - include product recommendations, comparisons, or pricing info
- **Identify difficulty:** Competition > 0.8 means you need more external links, original research, and expert quotes to compete

**1C. Analyze the SERP (if tools available)**
Use WebSearch to check what currently ranks:
- What content type dominates? (Listicle, how-to, guide, comparison)
- What's the average word count of top 5?
- What topics do all top results cover?
- What's missing from existing content?

**1D. Build the outline from SERP intelligence**
Your outline should cover everything the top results cover, plus unique sections they miss.

### Step 2: Create the Outline

Build a detailed outline before writing. Every blog post follows this master structure:

```markdown
# [H1: Title - includes primary keyword, compelling, 50-60 chars for title tag]

Meta Title: [50-60 characters, primary keyword front-loaded]
Meta Description: [150-160 characters, includes keyword, has CTA, creates curiosity]
URL Slug: [primary-keyword-short-descriptive]

## Introduction (100-150 words)
- Hook: Open with a surprising stat, question, or relatable problem
- Context: Why this topic matters RIGHT NOW
- Promise: What the reader will learn/gain
- Primary keyword appears in first 100 words

## [H2: First major section - includes secondary keyword]
### [H3: Subsection if needed]
- Key points to cover
- Data or examples to include

## [H2: Second major section]
### [H3: Subsection]
...

## [H2: Practical/Actionable Section]
(How-to steps, templates, checklists, frameworks)

## [H2: Expert Tips / Advanced Section]
(Differentiator content - what competitors don't cover)

## [H2: Common Mistakes / What to Avoid]
(Addresses "People Also Ask" questions)

## [H2: FAQ]
### [H3: Question 1?]
Answer (2-4 sentences, targets featured snippet)
### [H3: Question 2?]
...

## Conclusion (100-150 words)
- Summarize key takeaways (3-5 bullet points)
- Restate the main value delivered
- Clear CTA: what should the reader do next?

## Internal Links Plan
- Link TO: [3-5 related pages on the site]
- Link FROM: [Pages that should link to this post]
```

### Step 3: Write the Content

Follow these writing rules strictly:

#### Title Tag Formula (50-60 characters)

Choose the best pattern for the intent:

| Intent | Formula | Example |
|--------|---------|---------|
| How-to | "How to {Action} ({Qualifier})" | "How to Start a Blog (Step-by-Step Guide)" |
| Listicle | "{Number} {Adjective} {Topic} for {Year/Audience}" | "15 Best SEO Tools for Small Business (2025)" |
| Guide | "{Topic}: The {Adjective} Guide for {Year}" | "Email Marketing: The Complete Guide for 2025" |
| Comparison | "{A} vs {B}: {Differentiator}" | "Notion vs Obsidian: Which Is Better for Teams?" |
| Question | "{Question}? {Promise}" | "Is SEO Dead? What the Data Actually Shows" |

**Title rules:**
- Primary keyword within first 30 characters
- Add a power word: Ultimate, Complete, Proven, Essential, Definitive
- Include year if the topic is time-sensitive
- Use numbers for listicles (odd numbers outperform: 7, 9, 11, 13)
- Never exceed 60 characters (Google truncates at ~580px)

#### Meta Description Formula (150-160 characters)

```
{What the article covers} + {Unique value prop} + {CTA or curiosity hook}
```

Examples:
- "Learn how to start a blog in 2025 with our step-by-step guide. Covers hosting, design, content, and monetization. Free checklist included."
- "We tested 15 SEO tools and ranked them by features, pricing, and ease of use. See which tool is best for your budget and goals."

**Meta description rules:**
- Include primary keyword naturally
- Include a CTA or curiosity element
- Use active voice
- Mention a specific deliverable (checklist, template, comparison, steps)
- Stay between 150-160 characters

#### Writing Style Rules

**Readability:**
- Paragraphs: 2-4 sentences max
- Sentences: 15-20 words average
- Use short sentences for emphasis. Like this.
- Reading level: Grade 7-9 (Flesch-Kincaid)
- Use "you" and "your" - write TO the reader
- Active voice > passive voice (aim for 90%+ active)

**Structure & Scannability:**
- H2 every 200-300 words
- H3 for subsections within H2s
- Bullet points for lists of 3+ items
- Numbered lists for sequential steps
- Bold key terms and takeaways
- Pull quotes or callout boxes for key insights
- Tables for comparisons (Google loves tables for featured snippets)

**SEO Integration (natural, not forced):**
- Primary keyword in: H1, first 100 words, 1-2 H2s, conclusion, alt text
- Primary keyword density: 0.5-1.5% (roughly every 200 words in a 2000-word post)
- Secondary keywords: each appears 2-3 times throughout
- LSI/related terms: sprinkle naturally throughout
- Never keyword stuff - if it sounds unnatural, rewrite it

**E-E-A-T Signals:**
- **Experience:** Include first-hand observations, "In my experience...", "When I tested..."
- **Expertise:** Reference specific methodologies, use precise terminology, show deep knowledge
- **Authoritativeness:** Cite authoritative sources (studies, official docs, industry leaders)
- **Trustworthiness:** Acknowledge limitations, present balanced views, link to sources

#### Content Depth Targets

| Article Type | Target Words | Sections (H2) | Images | Internal Links | External Links |
|-------------|-------------|----------------|--------|---------------|---------------|
| How-to Guide | 2000-3000 | 6-10 | 5-10 | 5-8 | 3-5 |
| Listicle | 2500-4000 | 1 per item + intro/conclusion | 1 per item | 5-10 | 3-5 |
| Ultimate Guide | 3000-5000 | 8-15 | 8-15 | 8-12 | 5-8 |
| Comparison | 1500-2500 | 5-8 | 3-5 | 3-5 | 2-4 |
| Opinion/Thought | 1000-1500 | 4-6 | 2-3 | 3-5 | 2-3 |
| News/Update | 800-1200 | 3-5 | 1-3 | 3-5 | 3-5 |

### Step 4: Optimize for Featured Snippets

Target featured snippets with these patterns:

**Paragraph snippet (definition/what is):**
```markdown
## What Is {Topic}?

{Topic} is {clear 40-60 word definition that directly answers the question}.
{Additional context in 1-2 more sentences}.
```

**List snippet (how-to/best of):**
```markdown
## How to {Action}

1. **{Step 1 title}** - Brief description
2. **{Step 2 title}** - Brief description
3. **{Step 3 title}** - Brief description
...
```

**Table snippet (comparison/data):**
```markdown
## {Comparison Topic}

| {Column 1} | {Column 2} | {Column 3} |
|------------|------------|------------|
| {Data} | {Data} | {Data} |
```

### Step 5: Add Supporting Elements

**Image suggestions:**
For each major section, suggest an image:
```markdown
[IMAGE: {Description of what the image should show}]
Alt text: "{Descriptive alt text with keyword where natural}"
```

**Image types to suggest:**
- Hero image (featured image for social sharing)
- Screenshots (for tutorials)
- Comparison tables (as images for Pinterest)
- Infographics (for key data points)
- Process diagrams (for step-by-step content)
- Charts/graphs (for data-driven claims)

**Sourcing Featured Images from Unsplash (if UNSPLASH_CLIENT_ID available):**

Use the Unsplash API to find high-quality, royalty-free featured images for the blog post:

```bash
# Search Unsplash for a relevant featured image
curl -s "https://api.unsplash.com/search/photos?query={topic}&per_page=5&orientation=landscape" \
  -H "Authorization: Client-ID ${UNSPLASH_CLIENT_ID}"
```

**Parsing the response:**

The JSON response contains a `results` array. For each photo, extract:

```bash
# Parse with jq to get image URLs, photographer info, and download links
curl -s "https://api.unsplash.com/search/photos?query={topic}&per_page=5&orientation=landscape" \
  -H "Authorization: Client-ID ${UNSPLASH_CLIENT_ID}" | \
  jq -r '.results[] | {
    id: .id,
    description: .description,
    image_url: .urls.regular,
    full_url: .urls.full,
    download_link: .links.download,
    photographer_name: .user.name,
    photographer_url: .user.links.html,
    unsplash_url: .links.html
  }'
```

Key fields from the response:
- **`.urls.regular`** - Optimized image (1080px wide, good for blog featured images)
- **`.urls.full`** - Full resolution image
- **`.urls.small`** - Thumbnail (400px wide, good for social sharing previews)
- **`.links.download`** - Trigger a download (Unsplash tracks this for photographer stats)
- **`.user.name`** - Photographer's name (required for attribution)
- **`.user.links.html`** - Photographer's Unsplash profile URL

**Unsplash attribution requirement:**

Unsplash requires attribution whenever you use a photo. Include this in the blog post:

```markdown
Photo by [Photographer Name](https://unsplash.com/@username?utm_source=your_app&utm_medium=referral) on [Unsplash](https://unsplash.com/?utm_source=your_app&utm_medium=referral)
```

Place the attribution either:
- In the image caption directly below the featured image
- In an image credits section at the bottom of the post
- In the alt text or title attribute of the image tag

**Tip:** Search with specific, descriptive queries rather than broad terms. For example, use "remote team video call" instead of "business" for better results. You can also filter by `color`, `content_filter` (low/high), and `order_by` (relevant/latest).

**Internal link placement:**
- Contextual links within body paragraphs (most valuable)
- "Related reading" callout boxes between sections
- "Further reading" section at the end
- Anchor text should be descriptive, not "click here"

**External link rules:**
- Link to authoritative sources (studies, official docs, .edu, .gov)
- Open external links in new tab
- No-follow affiliate links and sponsored content
- Cite statistics with linked sources

### Step 6: FAQ Section

Every blog post should end with a FAQ section targeting "People Also Ask":

```markdown
## Frequently Asked Questions

### {Question matching PAA or long-tail keyword}?

{Direct answer in 2-4 sentences. Front-load the answer.
Provide additional context after the direct answer.
This format optimizes for both featured snippets and FAQ rich results.}

### {Second question}?

{Answer}
```

**FAQ rules:**
- 4-6 questions
- Questions should use natural language (how, what, why, when, can, does)
- Answer the question in the first sentence
- Keep each answer under 100 words
- Include schema markup (see schema-markup skill)

### Step 7: Final Quality Check

Before delivering the post, verify:

**SEO Checklist:**
- [ ] Title tag: 50-60 characters, keyword front-loaded
- [ ] Meta description: 150-160 characters, includes keyword, has CTA
- [ ] URL slug: Short, includes keyword, hyphenated
- [ ] H1: One per page, includes primary keyword
- [ ] H2s: Include secondary keywords where natural
- [ ] Primary keyword in first 100 words
- [ ] Keyword density: 0.5-1.5%
- [ ] Internal links: 5+ contextual links
- [ ] External links: 3+ authoritative sources
- [ ] Images: Alt text on all, keyword in at least one
- [ ] FAQ section with 4-6 questions
- [ ] Word count meets target for content type
- [ ] No duplicate content or thin sections

**Readability Checklist:**
- [ ] Average paragraph: 2-4 sentences
- [ ] Average sentence: under 20 words
- [ ] Grade level: 7-9
- [ ] Active voice: 90%+
- [ ] Power words in subheadings
- [ ] Bullet points or numbered lists every 300 words
- [ ] Bold text highlights key points

**E-E-A-T Checklist:**
- [ ] Author byline with credentials suggested
- [ ] Sources cited and linked
- [ ] First-hand experience or expertise demonstrated
- [ ] Balanced perspective (pros and cons, not just hype)
- [ ] Date published and "last updated" date included
- [ ] Factual accuracy verified (no made-up statistics)

## Output Format

Deliver the blog post in this format:

```markdown
---
title: "{Meta title - 50-60 chars}"
description: "{Meta description - 150-160 chars}"
slug: "{url-slug}"
keywords: ["{primary}", "{secondary1}", "{secondary2}"]
date: "{YYYY-MM-DD}"
author: "{Author name}"
---

# {H1 Headline}

{Full article content with all formatting, links, and image placeholders}
```

After the article, provide:
1. **SEO metadata summary** (title, description, slug, word count)
2. **Internal linking recommendations** (which pages to link to/from)
3. **Schema markup** (Article or BlogPosting JSON-LD)
4. **Social sharing** (suggested OG title, description, and image concept)
5. **Content promotion ideas** (2-3 distribution channels and angles)

## Important Notes

- Never fabricate statistics. If citing a number, include the source or note "[Source needed]".
- Write for humans first, search engines second. If an SEO tactic makes the content worse for readers, skip it.
- Every section must provide value. No filler paragraphs. If a section doesn't teach, convince, or entertain, cut it.
- Match the user's brand voice if they specify one. Ask if not clear.
- If the topic is YMYL (health, finance, legal), be extra careful with claims and heavily cite authoritative sources.

© OpenClaudia · MIT · OpenClaudia/openclaudia-skills

Similar skills

Everything for SEO and GEO →

From the same set49

newsletter Helps plan email newsletter content, grow subscribers, and set up monetization. Useful when building a newsletter on Substack or Beehiiv. CX Codex +1 480installs keyword-research Runs automated keyword research via the SemRush API, clusters terms by intent, and identifies competitor content gaps. Useful for SEO audits and content planning. CX Codex +1 478installs affiliate-marketing Walks you through designing an affiliate program: commission models, platform choices, partner recruiting and activation metrics. CX Codex +1 478installs write-landing Writes landing page copy and wireframe structure for conversion and SEO. Useful when you need a full page, not just a headline. CX Codex +1 468installs thread-writer Turns blog posts, notes, or case studies into Twitter/X threads and Reddit posts. It applies structured hooks, formats value tweets, and adds clear calls to action. CX Codex +1 461installs discord-bot A skill that sends messages, embeds and announcements to Discord channels through a webhook or the Bot API. Useful when your agent needs to post to a community from inside the project. CX Codex +1 458installs content-gap-analysis Compares your website content and search queries against 2-3 competitors using sitemaps and Semrush API. Useful for finding missing topic clusters, formats, and AI search visibility gaps. CX Codex +1 453installs email-sequence A skill that turns your coding agent into an email marketer: welcome series, abandoned cart, re-engagement and launch sequences. CX Codex +1 454installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor