skills/seo-forge/SKILL.md
Matt Berman's custom SEO content engine. Learns your brand through a smart interview, then creates content that ranks AND converts using Puppet Strings, Scroll Traps, and Care To Click psychology. Anti-AI-Overview by design. DataForSEO integrated. The content your competitors can't copy because it requires real experience.
npx skillsauth add themattberman/seo-kit seo-forgeInstall 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.
Most SEO content is dead on arrival. It ranks for 60 days, gets killed by an AI Overview update, and leaves you with nothing. No authority. No trust. No brand.
SEO Forge is built differently.
It starts by learning who you are. Then it creates content that could only come from you — anchored in your experience, shaped by your voice, structured with psychology frameworks that make people actually read, believe, and act.
Google's AI Overview can summarize any generic article. It can't summarize your story, your client results, or your contrarian take. That's the moat. That's what this builds.
What makes this different from every other SEO skill:
Before writing a single word, SEO Forge checks your brand context. The mode it chooses shapes everything.
Triggers when: No workspace/brand/ directory exists, or voice-profile.md is empty.
The agent runs an 8-question brand interview. This is the differentiator. Other SEO skills assume you're generic. SEO Forge assumes you're not.
The interview questions:
After the interview, the agent auto-generates:
workspace/brand/voice-profile.mdworkspace/brand/audience.mdworkspace/brand/positioning.mdworkspace/brand/competitors.mdThe agent shows what was generated, asks if anything's off, then saves. Then proceeds to content creation.
Why this matters: Every article after this will carry your brand DNA. The content compounds. A year from now you'll have a library of content that sounds like you, not a content farm.
Triggers when: Brand context exists AND it's been 7+ days since last refinement (tracked in workspace/brand/learnings.md).
The agent runs a quick check-in before writing:
"Quick brand check-in before we write. Takes 2 minutes:"
- What content performed well recently?
- Any new products, features, or offers?
- Questions customers keep asking you?
- Anything that changed about your audience or positioning?
The agent updates brand files, logs the refinement date, and proceeds.
User can always say "skip" — content creation never blocks on refinement. The check-in is a prompt, not a gate.
Why this matters: Brand context that doesn't update becomes stale. The weekly refinement is what makes SEO Forge compound. The longer you use it, the sharper it gets.
Triggers when: User explicitly skips the interview, or just wants content fast with no brand setup.
The agent uses sensible defaults:
At the end, the agent notes:
"This would hit harder with your brand voice loaded. Run
/seo-forge interviewanytime to set that up."
Every article runs through all three. This isn't optional. The frameworks are what make the content convert, not just rank.
Every article targets one primary human drive. This shapes the hook, the framing, the examples, and the CTA.
| Drive | What It Promises | |-------|-----------------| | Wealth | Financial freedom, income, options, security | | Health | Physical wellness, mental health, longevity | | Status/Access | Recognition, power, exclusive circles | | Escape | Relief from the grind, pain, boredom | | Romance | Connection, attraction, belonging |
Fear is NOT a drive. It's an amplifier. "You're losing wealth" hits harder than "gain wealth."
Before outlining, the agent declares:
"Primary drive: Wealth. Fear amplification: Yes — framed as 'your competitors are already doing this.' Here's why this shapes the article..."
This isn't ceremony. It's the decision that makes everything downstream sharper.
Bad: An article about "how to increase revenue" that never commits to a primary drive. It mentions money, success, freedom, and stress all at once. The reader feels nothing.
Good: An article that commits to Wealth + fear amplification. Every section reinforces a specific financial outcome. The intro costs them something if they don't keep reading.
The intro must use at least 2-3 of these techniques. The first 300 words are everything. If they don't stay, the ranking is worthless.
1. Term Branding Name the concept. Give it a proper noun. Named ideas spread.
2. Embedded Truths Remove all hedge words. Replace "if" with "when", "maybe" with "the reason why."
3. Thought Narration Say what the reader is thinking right now. Instant trust.
4. Pattern Interrupt Break the expected flow. Short sentence. Then longer ones. Question left hanging.
5. Specificity "47 brands" not "many brands." "$2,400/month" not "significant cost."
6. Tribal Signaling "If you've ever X, this is for you."
Every article follows this emotional progression. Map each section to a stage before drafting.
| Stage | Goal | What It Does | |-------|------|-------------| | Care | Make them feel the problem | Intro. Twist the knife. Make the cost of ignoring this real. | | Believe | Make them trust you | Data, specific results, your real experience. | | See | Make them see the path | Examples, case studies, numbered systems. | | Want | Make them want the outcome | Benefits made personal. "Here's what your life looks like after." | | Stay | Make them keep reading | Loop openers. "But here's where it gets interesting." | | Click | Make them act | Native CTA. Closes the loop opened in the intro. |
Short articles cover Care, Believe, and Click. Long-form articles run all six.
The mapping is shown before drafting:
"Care → Click Arc:
- Care: Open with the cost of bad SEO content. Specific dollar amount.
- Believe: Client result. 3 months, first page, exact keyword.
- See: The 8-phase process with real examples for each.
- Want: What their content library looks like 12 months from now.
- Stay: Loop openers at sections 3, 5, and 7.
- Click: Free content audit CTA that ties back to the intro."
This replaces every generic quality checklist.
The question: "What sentence in this article could ONLY come from someone with real experience? If there isn't one, the article will lose to the next person who has one."
Every article must have at least 3 experience anchors — specific stories, numbers, or insights that couldn't be synthesized from other articles on the internet.
If brand interview revealed experience areas: Use them. Pull specifics from the interview.
If no brand context exists: Flag it:
"This article needs your personal touch in sections 2 and 5. Here are prompts to help you add your experience:
- Section 2: What's the worst-performing piece of content you've ever published? What happened?
- Section 5: What result surprised you most using this approach with a real client or project?"
Bad experience anchor: "Many marketers have found that consistency is key."
Good experience anchor: "I ran this strategy for a spirits brand in 2022. We went from zero organic traffic to 40K monthly visitors in 8 months. The one change that did it wasn't the keyword strategy — it was adding the founder's actual opinions to every article."
Google's AI Overview can answer any generic query before a user clicks. Your content has to go where AIO can't.
AIO can't touch:
At each major section, the agent checks:
"Could Google's AI Overview answer this section from publicly available sources? If yes, go deeper or go personal."
This isn't a box-checking exercise. It's the editorial standard. Any section that AIO could fully answer gets flagged for either deeper specificity or a personal angle.
When DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD are set in your environment, the agent pulls live data before writing.
What it pulls:
If DataForSEO is not configured: Falls back to web_search for SERP analysis and PAA extraction. Never blocks. Notes the data source at the top.
Research quality signal:
"Research mode: DataForSEO live data" or "Research mode: Web search (DataForSEO not configured)"
Use scripts/seo-research.sh to run the data pull independently.
These apply to ALL content, on top of whatever brand voice is configured. Non-negotiable.
Never use:
Always use:
CHECK MODE → RESEARCH → BRIEF → OUTLINE → DRAFT → HUMANIZE → OPTIMIZE → SCHEMA → REVIEW → SAVE
Run scripts/seo-check.sh to determine operating mode:
Load brand context per the _vibe-system protocol. SEO Forge reads: voice-profile.md, audience.md, positioning.md, competitors.md, keyword-plan.md, learnings.md.
This phase is not optional when web tools are available.
If DataForSEO is configured: Run scripts/seo-research.sh "[keyword]" to pull live SERP data, PAA, volume, and related keywords.
If DataForSEO is not configured: Run web searches for the target keyword. Capture the top 5 results: titles, URLs, content types, structure, angles, gaps.
What to capture:
Gap analysis:
Before outlining, declare the psychology:
"Primary drive: [X] Fear amplification: [Yes/No] Why this drive fits this keyword: [2-3 sentences] How it shapes the article: [Hook will..., Examples will..., CTA will...]"
This isn't ceremony. It determines every creative decision in the draft.
Target Keyword: [keyword]
Secondary Keywords: [from PAA + related]
Search Intent: [Informational / Commercial / Transactional]
Content Type: [Pillar Guide / How-To / Comparison / Listicle]
Target Word Count: [based on competitor analysis]
Primary Drive: [Puppet Strings assignment]
Fear Amplification: [Yes/No]
Unique Angle: [what makes our take different — informed by positioning.md]
AIO Blind Spot: [what Google's AI Overview can't cover here]
Care To Click Arc: [mapped]
Experience Anchors Needed: [3 specific areas]
PAA Questions to Cover: [list]
Competitor Gaps: [list]
CTA: [what action should readers take]
Structure the outline with the Care To Click arc mapped to sections.
Every outline includes:
Write with voice-profile.md loaded. If no profile exists, use: direct, conversational, specific, opinionated.
The first paragraph rule: Answer the search query in the first 2-3 sentences. Don't make them scroll.
At each experience anchor callout: Pause and inject personal experience. If no brand interview data exists, write a placeholder: [EXPERIENCE ANCHOR: Add your story/result about X here]
At each AIO checkpoint: Ask: "Could an AI Overview answer this from public sources?" If yes, go deeper or inject a specific data point / personal story.
The "So What?" chain: For every point made, ask "so what?" until you hit something the reader actually cares about. Write from the bottom of the chain up.
Run every draft through this list before moving on.
Kill on sight:
Inject:
Scroll Trap audit:
Generate JSON-LD for every article. Included in the file's YAML frontmatter.
Article schema: Always. Includes headline, description, author, dates, publisher, keywords.
FAQ schema: Always (every article has a FAQ section). Each PAA question becomes a schema entry.
HowTo schema: For how-to tutorial content. Each step becomes a schema entry.
The "Only I Can Write This" test: Run the test on the full draft. Count experience anchors. If fewer than 3, flag the gaps and provide prompts.
AIO audit: Read through every major section. For each one: could an AI Overview fully answer this? If yes, it needs to go deeper.
Content quality:
Voice quality:
SEO quality:
File location: workspace/campaigns/content/{keyword-slug}.md
Create workspace/campaigns/content/ if it doesn't exist.
Append to: workspace/brand/assets.md
Log refinement date in: workspace/brand/learnings.md
---
title: "[Article Title]"
keyword: "[primary keyword]"
secondary_keywords: ["kw1", "kw2", "kw3"]
intent: "[informational|commercial|transactional]"
content_type: "[pillar-guide|how-to|comparison|listicle]"
word_count: [N]
puppet_string: "[primary drive]"
fear_amplification: [true|false]
scroll_traps_used: ["Term Branding", "Embedded Truths", "..."]
experience_anchors: 3
aio_blind_spots: ["...", "..."]
meta_description: "[under 160 chars]"
created: "[YYYY-MM-DD]"
status: "draft"
schema: |
[Article JSON-LD here]
[FAQ JSON-LD here]
---
[Article body here]
SEO Forge doesn't work alone. It's one piece of a content system.
Input from:
Chains to:
The full flow:
/seo-forge [keyword]
/seo-forge interview → Force brand interview (Mode A)
/seo-forge check → Check brand context status
/seo-forge refresh [keyword] → Refresh existing article
Examples:
/seo-forge "how to scale a spirits brand"/seo-forge "AI marketing tools for agencies" --intent commercial/seo-forge interview (set up brand context before writing)/seo-forge refresh "liquor brand marketing" (update an existing article)When executing this skill as an agent, follow these rules exactly:
Run the mode check first. Always check brand context status before doing anything else. The operating mode shapes everything.
Never skip SERP research. When web tools are available, Phase 1 is mandatory. The differentiation comes from knowing what's already ranking and going further.
Declare Puppet Strings before outlining. The drive assignment is not flavor text. It determines the hook, the framing, the examples, and the CTA. Show it explicitly.
Map the Care To Click arc before drafting. Every section should map to a stage. Show the mapping.
Flag experience anchor gaps. If the draft has fewer than 3 experience anchors, surface it. Don't paper over it with generic content. Give the user specific prompts to fill the gaps.
Run AIO checkpoints on every major section. Could an AI Overview answer this? If yes, it needs to go deeper or go personal.
Apply Matt's voice rules after every draft phase. No em dashes. No hedge words. No AI-isms. Contractions throughout. Specific numbers always.
Save to disk. The file is the deliverable, not the terminal output. Create directories if needed.
Generate schema markup. Article + FAQ JSON-LD for every piece. HowTo schema for tutorial content. Include in frontmatter.
Log the refinement date. After every article, append to workspace/brand/learnings.md with the date, keyword, and key decisions made.
Offer content-atomizer chain. After saving, always offer to atomize the article into social posts.
Offer image generation. After the draft is complete, ask: "Want me to generate images for this? I can create a hero image, inline section images, and a social share card." Use the seo-images skill with vertical routing from styles/verticals.json. Match the article's vertical (SaaS, DTC, newsletter, AI/tech, agency, finance) to the right style+preset combos. If the user says yes, generate 2-4 images: hero (16:9), 1-2 inline images, and a social card (16:9 for OG). Save to the same output directory as the article.
Show brand context working. When voice-profile.md is loaded, mention specifically how it shaped the writing. When positioning.md is loaded, name the angle used.
Before publishing, every article answers yes to all of these:
If any answer is no, revise before calling it done.
After saving:
"How did this land? Shipped as-is, minor edits, or major rewrite?"
/positioning-angles for a sharper angle.After writing the article, SEO Forge offers to generate matching images. This uses the seo-images skill which provides 6 visual styles and vertical-specific routing.
seo-images/styles/verticals.jsonThe agent reads the article and extracts:
Then builds the full structured JSON prompt per the style's schema — camera model, lens, aperture, lighting rig, color grade, negative prompts — and flattens it for the API call.
Article vertical → Hero style → Social card style
─────────────────────────────────────────────────────────────
SaaS/Software → dark_data → social_card (neon)
DTC/E-commerce → product_lifestyle → social_card (warm)
Newsletter/Creator → founder_editorial → social_card (dark bold)
Agency/Marketing → cinematic_scene → social_card (gradient)
AI/Automation → cinematic_scene → social_card (neon)
Finance/Revenue → dark_data → social_card (dark bold)
REPLICATE_API_TOKEN environment variable (or GOOGLE_AI_API_KEY for Google AI Studio)seo-images skill must be available in the skills directoryseo-images/references/ for style consistencydevelopment
Backlink acquisition engine. Mines competitor backlinks, finds unlinked brand mentions, discovers broken link opportunities, audits internal linking, and prospects resource pages. Turns link building from guesswork into a repeatable system.
testing
Generate premium SEO article images using Nano Banana 2. Six locked-in visual styles with cinema-grade JSON prompts. No stock photo slop.
development
Technical SEO monitoring. Weekly PageSpeed audits, Core Web Vitals tracking, crawl health checks, image optimization, and mobile usability. Catches problems before they tank your rankings.
development
SEO technical checklist and publishing reference. Meta tags, schema markup, llms.txt, topical authority, internal linking rules, Core Web Vitals targets, and image optimization. The agent uses this when publishing content. You can use it to audit existing pages.