| name | seo-content |
| description | Create high-quality, SEO-optimized content that ranks AND reads like a human wrote it. Performs live SERP gap analysis, writes with anti-AI detection techniques, and adds schema markup. Use when someone needs a blog post, article, SEO page, or wants content that drives search traffic. Triggers on 'SEO content', 'blog post', 'article', 'SERP', 'programmatic SEO', 'content at scale', 'write a post about', 'rank for', or 'search-optimized content'. Two modes: single article or programmatic SEO at scale.
|
| category | copy-content |
| tier | must-have |
| reads | ["brand/voice-profile.md","brand/keyword-plan.md","brand/audience.md"] |
| writes | ["assets.md"] |
| triggers | ["blog post","SEO article","long-form content","rankable content","programmatic SEO","pages at scale","write SEO content for X","create article for keyword","refresh article","update blog post"] |
/seo-content -- Publication-Ready SEO Content
SEO content has a reputation problem. Most of it is low-value -- keyword-stuffed,
AI-sounding, says nothing new. It ranks for a month, then dies.
This skill creates content that ranks AND builds trust. Content that sounds like
an expert sharing what they know, not a content mill churning out filler.
The goal: Would someone bookmark this? Would they share it? Would they come back?
If yes, Google will reward it. If no, no amount of optimization saves it.
On Activation
- Read
brand/ directory: load voice-profile.md, keyword-plan.md,
audience.md, positioning.md, competitors.md, learnings.md if present.
- Show what loaded:
Brand context loaded:
├── Voice Profile ✓ "{tone summary}"
├── Keyword Plan ✓ {N} pillars, {N} briefs
├── Audience ✓ "{audience summary}"
├── Positioning ✓ "{primary angle}"
├── Competitors ✓ {N} competitors profiled
└── Learnings ✓ {N} entries
- If files missing, note suggestions at the end (e.g., run /brand-voice).
- Check for existing content file at
./campaigns/content/{keyword-slug}.md.
- If exists --> Content Refresh Mode (see below).
- If not --> Full Creation Mode.
- Determine mode: Single article or Scale mode (programmatic SEO).
- Read
brand/landscape.md if it exists — check the Claims Blacklist before making ecosystem or competitive claims. If stale (>14 days) or missing, warn that market claims may be outdated.
Prioritization (defer to seo-machine's publishing order)
When the user asks "what should I write next?" — the answer follows seo-machine's conversion-intent-first publishing order, not "whatever has highest volume":
| Order | Pattern | Why |
|---|
| 1 | /alternatives/[competitor] | Highest conversion intent — reader is already in market |
| 2 | /compare/[a]-vs-[b] | Be the third option in any two-vendor comparison |
| 3 | /for/[use-case] and /for/[audience] | JTBD without competitor name — high TP/volume ratio |
| 4 | Long-form playbooks (this skill's wheelhouse) | Authority + AI-citation + inbound link draw |
| 5 | Generic blog posts | Lowest conversion — defer until ~10 indexed pages exist |
If docs/seo-machine.md exists at the project root, route the user to that skill's Resume mode instead of writing standalone articles — the roadmap there already encodes the priority order. seo-content is the right tool for single articles and playbook-pattern long-form; alternatives/compare/use-case pages belong in seo-machine's programmatic sprint.
Brand Memory
Reads (if they exist)
| File | What it provides | How it shapes output |
|---|
| voice-profile.md | Tone, personality, vocabulary, rhythm | Directly shapes writing style |
| keyword-plan.md | Prioritized keywords, content briefs, SERP data | Target keyword, cluster, intent, content type |
| audience.md | Buyer profiles, sophistication level, pain points | How technical to write, what examples to use |
| positioning.md | Market angles, differentiators | Unique angle for the piece |
| competitors.md | Named competitors, their positioning | What angle competitors take |
| learnings.md | Past performance data | What content approaches worked before |
Writes
| File | What it contains |
|---|
| ./campaigns/content/{keyword-slug}.md | Publication-ready article with frontmatter |
| ./brand/assets.md | Appends entry for the created content piece |
| ./brand/learnings.md | Appends findings after feedback collection |
Required Inputs
- Target keyword -- Primary keyword to rank for
- Keyword cluster -- Related keywords to include naturally
- Search intent -- Informational / Commercial / Transactional
- Content type -- Pillar guide / How-to / Comparison / Listicle / etc.
- Brand voice profile -- (from voice-profile.md, if available)
- Unique angle -- What perspective makes this different?
Pre-fill from brand memory when available. Ask the user only for what's missing.
The Workflow (Single Article)
RESEARCH --> BRIEF --> OUTLINE --> DRAFT --> HUMANIZE --> OPTIMIZE --> SCHEMA --> REVIEW --> SAVE
Phase 1: Research (SERP Analysis)
Use Exa MCP or firecrawl for live SERP research. Analyze top 5 results.
For each result capture: Title/URL, content type, word count, structure,
unique angles, gaps, recency, domain type.
Extract SERP features: People Also Ask (ALL of them), Featured Snippet
format, AI Overview presence.
Gap analysis: What's missing? What's outdated? What's generic? What's your edge?
Present findings in structured format. See references/serp-analysis-format.md.
If web search unavailable: flag to user, prefix SERP claims with ~, skip to
Phase 2 using brand context instead.
Phase 2: Content Brief
Create or enhance an existing brief from /keyword-research. Include: target
keyword, secondary keywords, search intent, content type, target word count,
audience, unique angle, key points, PAA questions, competitor gaps, internal
links, CTA.
Phase 3: Outline
Structure based on content type. See references/content-structures.md for
templates (Pillar Guide, How-To, Comparison, Listicle).
Map PAA questions: depth-worthy ones become H2s, brief ones go to FAQ section.
Phase 4: Draft
Voice calibration: Match voice-profile.md if loaded. Default: direct,
conversational, specific, opinionated.
Rules:
- Answer the search query in the first 2-3 sentences
- Apply the "So What?" chain -- write from the bottom, not the top
- Specificity over generality (numbers, examples, always)
- Show your work (how you know, not just what you claim)
- Use positioning angle from positioning.md to shape perspective
Phase 5: Humanize (Critical)
This is the soul of the skill. See references/anti-ai-detection.md for the
full detection pattern guide.
Summary checklist:
- Kill AI words (delve, comprehensive, crucial, leverage, landscape, etc.)
- Kill AI phrases ("In today's...", "It's important to note...", "Let's dive in")
- Break the triple pattern -- humans are messier
- Inject: personal experience, opinions with reasoning, admitted limitations,
specific examples, honest uncertainty, tangents and asides
- Vary rhythm: short punches, long explanations, fragments, questions
The Read-Aloud Test: If you stumble reading it aloud, rewrite it.
Phase 6: Optimize (On-Page SEO)
[ ] Primary keyword in title (front-loaded), H1, first 100 words, 1+ H2, meta, URL slug
[ ] Secondary keywords in H2s naturally
[ ] Meta description: 150-160 chars, compelling, includes keyword
[ ] Internal links: 4-8 per piece
[ ] External links: 2-4 authoritative sources
[ ] Featured snippet optimization (definition/list/table format)
[ ] Image alt text with relevant keywords
Title format: [Primary Keyword]: [Benefit or Hook] ([Year] if relevant)
Under 60 characters, front-load keyword.
Phase 7: Schema Markup (JSON-LD)
Generate for EVERY article:
- Article schema -- headline, description, author, dates, publisher, keywords
- FAQ schema -- from PAA questions answered in the article
- HowTo schema -- if content type is how-to tutorial
Include schema in article frontmatter. See references/schema-templates.md.
Phase 8: Quality Review
Run all checklists before saving:
- Content quality: Answers title in first 300 words, 3+ specific examples,
unique angle present, all PAA answered, SERP gaps addressed
- Voice quality: No AI-isms, personality present, matches voice-profile.md
- SEO quality: Keywords placed, meta compelling, links included, schema valid
- E-E-A-T: Experience shown, expertise demonstrated, sources cited
See references/eeat-examples.md for 20 top-performing human content examples.
Content Refresh Mode
Triggered when content file already exists for the target keyword.
- Present existing content summary with options: Refresh / Rewrite / Expand / Start Fresh
- If Refresh: Re-run SERP analysis, compare against article:
- New competitors since publication?
- New PAA questions not covered?
- Featured Snippet format changed?
- Search intent shifted?
- Generate specific, actionable update recommendations (not "update the content"
but "add section on {topic} after {section} because {evidence}")
- Apply updates, bump
last_updated and serp_snapshot_date in frontmatter
Scale Mode (Programmatic SEO)
Triggered when user wants template-driven pages at scale ("programmatic SEO",
"pages at scale", "100 pages for...", "location pages", etc.).
Core Principles
- Unique value per page -- not just swapped variables in a template
- Proprietary data wins -- hierarchy: proprietary > product-derived >
user-generated > licensed > public
- Clean URL structure -- use subfolders, not subdomains
- Search intent match -- pages must answer what people are searching
- Quality over quantity -- 100 great pages beat 10,000 thin ones
The 12 Playbooks
| Playbook | Pattern | Example |
|---|
| Templates | "[Type] template" | "resume template" |
| Curation | "best [category]" | "best website builders" |
| Conversions | "[X] to [Y]" | "$10 USD to GBP" |
| Comparisons | "[X] vs [Y]" | "webflow vs wordpress" |
| Examples | "[type] examples" | "landing page examples" |
| Locations | "[service] in [location]" | "dentists in austin" |
| Personas | "[product] for [audience]" | "crm for real estate" |
| Integrations | "[product A] + [product B]" | "slack asana integration" |
| Glossary | "what is [term]" | "what is pSEO" |
| Translations | Content in multiple languages | Localized content |
| Directory | "[category] tools" | "ai copywriting tools" |
| Profiles | "[entity name]" | "stripe ceo" |
See references/pseo-playbooks.md for detailed implementation of each playbook.
Choosing a Playbook
| If you have... | Consider... |
|---|
| Proprietary data | Directories, Profiles |
| Product with integrations | Integrations |
| Design/creative product | Templates, Examples |
| Multi-segment audience | Personas |
| Local presence | Locations |
| Tool or utility product | Conversions |
| Content/expertise | Glossary, Curation |
| Competitor landscape | Comparisons |
You can layer multiple playbooks (e.g., "Best coworking spaces in San Diego").
Scale Mode Implementation
- Keyword pattern research -- identify repeating structure, variables, combinations
- Data requirements -- what populates each page, how it's updated
- Template design -- page structure with conditional content for uniqueness
- Internal linking architecture -- hub and spoke model, no orphan pages
- Indexation strategy -- prioritize high-volume, noindex thin variations,
separate sitemaps by type
Scale Mode Quality Checks
Worked Example
Target keyword: 'is doordash organic'
SERP gap: Top 5 results are forum posts and outdated blog articles. No definitive guide exists.
Article outline:
- H1: Is DoorDash Organic? The Complete Guide for Health-Conscious Families
- Quick answer (Featured Snippet target): 'DoorDash itself doesn't verify verification status...'
- How to find verified-source restaurants on DoorDash (step-by-step with screenshots)
- The problem with DoorDash's verification filter (cross-contamination, no certification)
- Better alternatives for guaranteed verified meal delivery
- FAQ schema: 'Does DoorDash have verified-source options?' / 'How do I know if a restaurant is really verified?'
Word count: 1,800 (benchmark: top 3 results average 1,200 — we go deeper)
File Output Format
File Location
./campaigns/content/{keyword-slug}.md
Slug: lowercase kebab-case, remove stop words if over 60 chars.
Frontmatter
---
title: "{SEO-Optimized Title}"
meta_description: "{150-160 character meta description}"
primary_keyword: "{target keyword}"
secondary_keywords: ["{kw1}", "{kw2}", "{kw3}"]
content_type: "{pillar-guide / how-to / comparison / listicle}"
search_intent: "{informational / commercial / transactional}"
target_word_count: {number}
actual_word_count: {number}
author: "{author name}"
date_created: "{YYYY-MM-DD}"
last_updated: "{YYYY-MM-DD}"
status: "draft"
serp_snapshot_date: "{YYYY-MM-DD}"
paa_questions_answered: {number}
schema_article: |
{Article JSON-LD}
schema_faq: |
{FAQ JSON-LD}
---
Chain Offers
After saving, present:
/content-atomizer -- distribute across social (3-5 LinkedIn, 8-12 Twitter, 2-3 IG carousels)
/newsletter -- feature article in next edition
/email-sequences -- nurture readers into subscribers
/seo-content -- write next article from keyword plan
- "Refresh" to update this article later
Error States
- No web search: Skip Phase 1, note limitation, proceed with brand context
- No target keyword: Ask user or suggest /keyword-research
- No voice profile: Use defaults (direct, conversational), suggest /brand-voice
- Can't save: Display content for manual copy, suggest checking permissions
Anti-Patterns
| Anti-pattern | Instead | Why |
|---|
| Skipping Phase 5 (Humanize) to save time | Cut research depth before cutting humanization | Unhumanized content reads like AI slop — readers bounce, Google devalues it, and the brand takes a credibility hit. Content that sounds like a committee wrote it doesn't earn trust, links, or shares. |
| Skipping schema markup | Always add Article + FAQ JSON-LD — it takes minutes | Schema compounds over time: rich results, AI citations, and structured search features for the life of the content. Skipping it leaves free visibility on the table. |
| Keyword-stuffing headings | One keyword in H1, natural secondary keywords in H2s | Google detects keyword stuffing and users find it off-putting. If every heading reads like an SEO template, it's over-optimized. |
| Starting with a generic intro | Answer the search query in sentence one | "In today's digital world..." tells the reader nothing. The search query brought them here — if the value prop isn't instant, they bounce. |
Implementation Notes
- Never skip SERP analysis when web search is available -- it's the differentiator
- Always check for existing content first -- refresh mode is high value
- Always generate schema markup -- Article + FAQ JSON-LD minimum
- Always save to disk -- the file IS the deliverable
- PAA questions are mandatory -- every one appears as H2 or FAQ entry
- Phase 5 (Humanize) is non-negotiable -- run the full AI detection checklist
- Always offer chain to /content-atomizer -- one article = 10+ social assets
- Register every piece in
./brand/assets.md
- Feedback closes the loop -- always present, always log