Best for
- Use when someone needs a blog post, article, SEO page, or wants content that drives search traffic.
MoizIbnYousaf/marketing-cli/skills/seo-content/SKILL.md
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 s
Decision brief
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.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/seo-content"Inspect the Agent Skill "seo-content" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/seo-content/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Use Exa MCP or firecrawl for live SERP research. Analyze top 5 results.
Use Exa MCP or firecrawl for live SERP research. Analyze top 5 results.
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.
Structure based on content type. See references/content-structures.md for templates (Pillar Guide, How-To, Comparison, Listicle).
Voice calibration: Match voice-profile.md if loaded. Default: direct, conversational, specific, opinionated.
Permission review
The documentation asks the agent to read local files, directories, or repositories.
Read `brand/` directory: load `voice-profile.md`, `keyword-plan.md`,The documentation asks the agent to create, modify, or delete local files.
**Always save to disk** -- the file IS the deliverableEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 86/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 27 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
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.
brand/ directory: load voice-profile.md, keyword-plan.md,
audience.md, positioning.md, competitors.md, learnings.md if present.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
./campaigns/content/{keyword-slug}.md.
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.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.
| 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 |
| 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 |
Pre-fill from brand memory when available. Ask the user only for what's missing.
RESEARCH --> BRIEF --> OUTLINE --> DRAFT --> HUMANIZE --> OPTIMIZE --> SCHEMA --> REVIEW --> SAVE
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.
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.
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.
Voice calibration: Match voice-profile.md if loaded. Default: direct, conversational, specific, opinionated.
Rules:
This is the soul of the skill. See references/anti-ai-detection.md for the
full detection pattern guide.
Summary checklist:
The Read-Aloud Test: If you stumble reading it aloud, rewrite it.
[ ] 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.
Generate for EVERY article:
Include schema in article frontmatter. See references/schema-templates.md.
Run all checklists before saving:
See references/eeat-examples.md for 20 top-performing human content examples.
Triggered when content file already exists for the target keyword.
last_updated and serp_snapshot_date in frontmatterTriggered when user wants template-driven pages at scale ("programmatic SEO", "pages at scale", "100 pages for...", "location pages", etc.).
| 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.
| 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").
Target keyword: 'is doordash organic' SERP gap: Top 5 results are forum posts and outdated blog articles. No definitive guide exists.
Article outline:
Word count: 1,800 (benchmark: top 3 results average 1,200 — we go deeper)
./campaigns/content/{keyword-slug}.md
Slug: lowercase kebab-case, remove stop words if over 60 chars.
---
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}
---
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| 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. |
./brand/assets.mdAlternatives
MoizIbnYousaf/marketing-cli
Creates high-converting 'X vs Y' and 'X alternatives' SEO pages that capture comparison search traffic. Researches competitors, writes honest comparison content, and adds schema markup (FAQPage, ItemList). Use when someone needs alternatives pages, comparison content, or says 'alternatives page', 'vs page', 'comparison', 'competitor alternatives', 'X vs Y page', or wants to capture competitor brand search traffic with SEO content. Also trigger when someone wants to rank for competitor brand name
MoizIbnYousaf/marketing-cli
Deep-dive ONE competitor's organic footprint — exact ranking keywords and URLs, content themes, backlink profile, and exploitable gaps — with findings written into brand/competitors.md. Use this skill when the user names a competitor and wants to know what to learn from them, counter, or outrank, including head-to-head comparisons against the user's own domain. For market-level mapping first, use openseo-competitive-landscape. Triggers: "analyze competitor", "competitor keywords", "competitor ba
MoizIbnYousaf/marketing-cli
Discover keyword opportunities with MEASURED volume, keyword difficulty, CPC, and intent from OpenSEO, then write them into brand/keyword-plan.md. Use this skill whenever someone asks for keyword difficulty, KD, search volume, keyword ideas with metrics, striking-distance opportunities from Search Console, or SERP-validated keyword priorities. For qualitative research without an OpenSEO connection, use mktg's keyword-research instead (metrics will be unknown). Triggers: "keyword difficulty", "se
MoizIbnYousaf/marketing-cli
Map who is winning an SEO market with measured data — recurring SERP domains, organic footprints, winning content themes, backlink authority, and the gaps worth attacking. Use this skill for market-level questions ("who ranks for X", "how competitive is this space", "where are the SEO openings") before committing to keyword targets or content themes. For one named competitor, use openseo-competitor-analysis instead. Triggers: "competitive landscape seo", "who ranks for", "seo market map", "how c