seo-article-writing
When to Use
- Setting up a blog section for SEO
- Writing blog articles for organic traffic
- Creating comparison/review content
- Building content marketing assets
- Any project needing a file-based blog CMS
Prerequisites
Before writing articles, ensure:
- Blog infrastructure is set up (see Blog Setup)
- AI image generation capability is available
- MDX support is configured in your bundler
Quick Start
# 1. Set up blog infrastructure (first time only)
# Copy assets from this skill to your project
# 2. Create article folder
mkdir -p src/content/blog/{slug}
# 3. Generate unique article image using AI
# See Image Generation section below
# 4. Write article using template
# Use assets/templates/article.mdx as base
Workflow Overview
┌─────────────────────────────────────────────────────────────────┐
│ 1. SETUP (One-time) │
│ └─> Blog infrastructure │
├─────────────────────────────────────────────────────────────────┤
│ 2. RESEARCH │
│ └─> Keywords → Competitors → Content gaps │
├─────────────────────────────────────────────────────────────────┤
│ 3. OUTLINE │
│ └─> Structure → Tables → FAQs │
├─────────────────────────────────────────────────────────────────┤
│ 4. IMAGE GENERATION │
│ └─> AI-generate unique image for article content │
├─────────────────────────────────────────────────────────────────┤
│ 5. WRITE │
│ └─> Draft → Optimize → Review │
├─────────────────────────────────────────────────────────────────┤
│ 6. PUBLISH │
│ └─> MDX file → Sitemap → Verify │
└─────────────────────────────────────────────────────────────────┘
Image Generation (CRITICAL)
Philosophy
Every article MUST have a unique, content-specific image. Do NOT use generic pattern backgrounds. Generate a custom image that:
- Visually represents the article topic
- Includes relevant text/title overlay
- Has a consistent brand style (dark theme, orange accents)
- Is sized 1200x630 pixels for OG sharing
Image Generation Process
For EACH article, use AI image generation with this template:
A sophisticated hero image for "[ARTICLE TITLE]" blog article.
[DESCRIBE VISUAL CONCEPT THAT MATCHES CONTENT]
Dark background (#0f172a or #1e293b) with orange (#f97316) accents.
Modern, minimalist, professional SaaS style like Linear or Vercel.
Include text overlay: "[TITLE]" and optional subtitle.
1200x630 pixels.
Example Prompts by Article Type
Comparison Article
A sophisticated hero image for "Sunsama Alternatives" comparison article.
Modern minimalist design with floating app icons and comparison cards.
Deep navy background (#0f172a) with orange (#f97316) gradient accents.
Show multiple tools being compared with visual hierarchy.
Include title text overlay. Professional SaaS marketing style.
1200x630 pixels.
Guide/Tutorial Article
A sophisticated hero image for "Time Blocking Guide" tutorial article.
Modern minimalist design showing calendar grid with colorful time blocks.
Dark slate background (#1e293b) with vibrant orange (#f97316) blocks.
Clean 3D floating elements suggesting productivity and organization.
Include title: "TIME BLOCKING GUIDE" and subtitle "Master Your Day".
1200x630 pixels.
VS/Comparison Article
A sophisticated hero image for "Time Blocking vs To-Do Lists" comparison.
Split design: left side shows organized calendar blocks, right side shows
scattered checklist items. Visual contrast between order and chaos.
Dark background with orange (#f97316) and blue (#3b82f6) accents.
Include title text. Editorial style. 1200x630 pixels.
Self-Hosted/Technical Article
A sophisticated hero image for "Self-Hosted Productivity Apps" article.
Server/cloud icon with data flowing to personal devices.
Emphasizes privacy and control with lock/shield symbols.
Dark navy background with green (#22c55e) security accents and orange highlights.
Include title and tagline about privacy/control. 1200x630 pixels.
Routine/Habit Article
A sophisticated hero image for "Daily Planning Routine" habit article.
Morning scene with coffee, notebook, and digital calendar interface.
Soft gradient from deep purple to warm orange (#f97316).
Floating UI elements showing checklist items.
Calm, productive, aspirational mood. Include title. 1200x630 pixels.
Image Naming Convention
Save images with descriptive names:
public/blog-{slug}.png
Examples:
- blog-sunsama-alternatives.png
- blog-time-blocking-guide.png
- blog-self-hosted.png
- blog-daily-planning-routine.png
Updating Frontmatter
After generating, update the article frontmatter:
export const frontmatter = {
// ...other fields
image: "/blog-{slug}.png"
};
Blog Infrastructure Setup
Required Files
Copy these from assets/ to your project:
your-project/
├── src/
│ ├── content/
│ │ └── blog/ # MDX articles go here
│ │ └── {slug}/
│ │ └── index.mdx
│ ├── types/
│ │ └── blog.ts # Copy from assets/templates/
│ ├── lib/
│ │ └── blog.ts # Copy from assets/templates/
│ ├── components/
│ │ └── blog/
│ │ ├── blog-card.tsx
│ │ └── blog-layout.tsx
│ └── routes/
│ ├── blog.tsx # Blog listing
│ └── blog.$slug.tsx # Individual post
└── public/
└── blog-{slug}.png # Generated images per article
Vite/React Setup
For Vite projects, use import.meta.glob to load MDX files:
// src/lib/blog.ts
const modules = import.meta.glob('../content/blog/*/index.mdx', { eager: true });
Next.js Setup
For Next.js projects, use @next/mdx or contentlayer:
// next.config.js
import mdx from '@next/mdx';
const withMDX = mdx({ extension: /\.mdx?$/ });
export default withMDX({ pageExtensions: ['ts', 'tsx', 'mdx'] });
Keyword Research
Step 1: Primary Keyword Selection
Use web search to research your topic:
Search queries to run:
- "[topic] 2026"
- "best [topic]"
- "[topic] alternative"
- "[topic] vs [competitor]"
Step 2: Classify Search Intent
| Intent | Indicators | Content Type | Priority |
|---|---|---|---|
| Transactional | "best", "alternative", "buy" | Comparison, review | HIGH |
| Informational | "how to", "what is", "guide" | Tutorial, explainer | MEDIUM |
| Navigational | Brand names, specific tools | Feature page | LOW |
Subagent Prompt: Keyword Research
You are an SEO expert. Research keywords for [TOPIC].
Use web search to find:
1. Primary keyword with highest search intent
2. 5 secondary keywords (long-tail variations)
3. Top 5 competitor URLs for analysis
4. Content gaps competitors are missing
Return:
- Prioritized keyword list with intent classification
- Recommended content angle
- Estimated search volume (HIGH/MEDIUM/LOW)
Article Structure
Frontmatter Template
export const frontmatter = {
title: "SEO Title Under 60 Characters with Primary Keyword",
description: "Meta description 150-160 chars with keyword and compelling hook.",
date: "2026-01-30",
author: "Team Name",
tags: ["primary-tag", "secondary-tag", "category"],
readingTime: 10,
image: "/blog-your-article-slug.png" // UNIQUE image per article!
};
Article Outline Template
# [Primary Keyword in H1 Title]
## Introduction
- Hook with statistic or pain point
- What reader will learn
- Establish credibility (1-2 paragraphs)
## [Section 2: Definition/Background]
- What is [topic]?
- Why it matters (2-3 paragraphs)
## [Section 3: Core Content / How-To]
- Main value proposition
- Step-by-step if tutorial
- Numbered list for scanability
## [Section 4: Comparison Table]
| Feature | Option A | Option B | Option C |
|---------|----------|----------|----------|
| Price | Free | $10/mo | $25/mo |
| Feature | ✅ | ✅ | ❌ |
## [Section 5: Detailed Analysis]
- 3-4 paragraphs per option
- Pros and cons
- Best use cases
## Frequently Asked Questions
### What is [primary keyword]?
[2-3 sentence answer targeting featured snippet]
### Is [option A] better than [option B]?
[Honest comparison with recommendation]
## Conclusion
- Summary of key points
- Clear CTA with link to action
Writing Guidelines
SEO Best Practices
| Element | Guideline |
|---|---|
| Title | Primary keyword, under 60 characters |
| Meta description | 150-160 chars, keyword, compelling hook |
| H2 headers | Include secondary keywords naturally |
| Keyword density | 1-2% for primary keyword |
| Internal links | 2-3 links to relevant pages |
| External links | 1-2 authoritative sources |
Word Count Targets
| Content Type | Minimum Words | Optimal |
|---|---|---|
| Comparison/Review | 2,000 | 2,500 |
| Complete Guide | 2,500 | 3,500 |
| How-To Tutorial | 1,500 | 2,000 |
| Thought Leadership | 1,800 | 2,200 |
Complete Article Creation Workflow
Step 1: Research
Use keyword research agent to identify:
- Primary keyword
- Secondary keywords
- Top 5 competitors
- Content gaps
Step 2: Generate Image
Use AI image generation with article-specific prompt.
Save to public/blog-{slug}.png
Step 3: Create Article Folder
mkdir -p src/content/blog/{slug}
touch src/content/blog/{slug}/index.mdx
Step 4: Write Content
Use article writer agent with:
- Keyword targets
- Word count requirement
- Comparison tables
- FAQ section
Step 5: Update Frontmatter
export const frontmatter = {
title: "...",
description: "...",
date: "YYYY-MM-DD",
author: "Team Name",
tags: ["..."],
readingTime: X,
image: "/blog-{slug}.png" // Your generated image
};
Step 6: Add to Sitemap
<url>
<loc>https://yoursite.com/blog/{slug}</loc>
<lastmod>{date}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
Step 7: Verify
- Image displays correctly on blog listing
- Article renders properly
- All links work
- Sitemap is valid
Subagent Prompts
Image Generation Agent
Generate a unique blog hero image for: "[ARTICLE TITLE]"
Topic: [brief description]
Style: Dark background, orange accents, modern SaaS aesthetic
Include: Title text overlay, relevant visual elements
Size: 1200x630 pixels
Save as: blog-{slug}.png
Article Writer Agent
Write a [WORD_COUNT]+ word SEO article on [TOPIC].
Primary keyword: [KEYWORD]
Secondary keywords: [KEYWORD_LIST]
Include:
1. Frontmatter with all required fields
2. Introduction with hook/statistic
3. Comparison table with 4+ options
4. Detailed breakdown (3-4 paragraphs per option)
5. FAQ section with 5+ questions using h3 headers
6. Conclusion with CTA linking to [PAGE]
Image has been generated at: /blog-{slug}.png
Include this in frontmatter.
FAQ Writer Agent
Write 7 FAQ questions for article about [TOPIC].
Target keywords:
- [keyword 1]
- [keyword 2]
- [keyword 3]
Use h3 headers (###) for each question.
Each answer should be 2-3 sentences.
Target featured snippet format (direct, concise).
Publishing Checklist
- Unique image generated for this specific article
- Image saved to
public/blog-{slug}.png - Image path in frontmatter matches file
- Primary keyword in title
- Meta description optimized (150-160 chars)
- At least 1 comparison table
- At least 5 FAQ questions
- Internal links added (2-3)
- Reading time calculated
- Tags assigned (2-4)
- Date set correctly
- Article added to sitemap.xml
File References
See assets/ folder for:
| File | Purpose |
|---|---|
templates/blog-types.ts |
TypeScript interfaces |
templates/blog-utils.ts |
Utility functions for loading MDX |
templates/article.mdx |
Article template |
components/blog-card.tsx |
Card component for listing |
components/blog-layout.tsx |
Layout for individual posts |
scripts/setup-blog.sh |
Quick setup script |
Updates
- v1.1 (2026-01-31): Updated to require unique AI-generated images per article
- v1.0 (2026-01-30): Initial skill with complete workflow
More from blink-new/claude
saas-sidebar
Build a modern, collapsible sidebar for SaaS dashboards following the ChatGPT/Notion design pattern
77pg-boss
Implement reliable PostgreSQL-based job queues with PG Boss. Use when implementing background jobs, scheduled tasks, cron-like functionality, task rollover, or email notifications in Node.js/TypeScript projects.
57kanban-dnd
Build world-class kanban board drag-and-drop with @dnd-kit. Linear-quality UX with proper collision detection, smooth animations, and visual feedback
57datafast
Accelerate adoption of DataFast analytics across any stack by codifying the installation, attribution, event, proxy, and API patterns that drive reliable conversion intelligence
54wysiwyg-editor
Build production-grade WYSIWYG editors using Tiptap v3 with proper markdown-style formatting, instant rendering, and bullet/numbered list support
51team-saas
Build production-grade multi-tenant SaaS applications with team workspaces, member invitation, authentication, and modern UI
51