SEO Content Production
Complete workflow from keyword research to publication. This skill orchestrates other skills - it does not duplicate their functionality.
Workflow Overview
RESEARCH → STRUCTURE → SOURCES → DRAFT → QUALITY → PUBLISH │ │ │ │ │ │ seomachine outline proprietary write quality webflow content -loop -publish
Phase 1: Research
Use seomachine for Data
All SEO data comes from the seomachine skill. DO NOT hardcode credentials.
Credentials: Stored in vault .env file:
-
DATAFORSEO_LOGIN , DATAFORSEO_PASSWORD
-
Keyword research
-
GA4_PROPERTY_ID , GOOGLE_SERVICE_ACCOUNT_PATH
-
Traffic data
-
GSC_SITE_URL
-
Search Console data
Common research tasks:
Keyword research
import sys sys.path.insert(0, ".claude/skills/seomachine/modules") from dataforseo import DataForSEO
dfs = DataForSEO() ideas = dfs.get_keyword_ideas("waldorf vs montessori", limit=50) questions = dfs.get_questions("homeschool curriculum", limit=20) serp = dfs.get_serp_data("best homeschool math curriculum")
Generate content brief with competitor analysis
python3 .claude/skills/seomachine/scripts/content_brief_generator.py "keyword phrase"
Find keyword gaps vs competitors
python3 .claude/skills/seomachine/scripts/competitor_gap_finder.py --batch --min-volume 200
Validation Criteria
Before proceeding:
-
Search volume > 500/month
-
Keyword difficulty < 30 (winnable)
-
Topic aligns with OpenEd expertise
-
We have (or can create) proprietary perspective
Phase 2: Structure
Identify OpenEd's Unique Angle
Before outlining, answer:
-
What does OpenEd believe about this topic? (Check opened-identity skill)
-
What can we say that competitors can't? (Podcast quotes, staff expertise)
-
What do most articles get wrong or avoid?
Content Type Templates
Templates are in references/content-templates.md . Common types:
Type Length When to Use
Comparison 2000-3000 X vs Y searches
Pillar Guide 2500-3500 "Complete guide to X"
How-To 2000-2500 "How to X" searches
Listicle 1500-2500 "Best X for Y" searches
Phase 3: Source Compilation
Search Order (Priority)
-
OpenEd Book - .claude/references/OpenEdBook/
-
Published Content - Search Master Content Index
-
Podcast Transcripts - Grep Published Content/Podcasts/
-
Staff Knowledge - Tag relevant team members
-
External Research - Fill remaining gaps
Source Search Commands
Search published content
grep -rli "topic" "Published Content/" | head -20
Check Master Content Index
grep -B5 "Tags:.*homeschool" ".claude/references/Master_Content_Index.md"
Phase 4: Draft
Before Writing
-
Research brief complete (from seomachine)
-
Unique angle identified
-
Sources compiled
-
Internal links planned (3+ minimum)
Writing Constraints
Apply these skills automatically:
-
ai-tells
-
Patterns to avoid
-
ghostwriter
-
Authentic voice techniques
Key rules:
-
BLUF first - lead with the answer, not the backstory (see references/bluf-rewrite-pattern.md )
-
Table early (for skimmers)
-
5+ internal links, 2-3 external
-
Use spaced hyphens - not em dashes
AI-isms to Eliminate
See references/ai-tells-quick-reference.md for full list.
Kill words: delve, comprehensive, crucial, leverage, landscape, navigate, foster, facilitate, realm, paradigm, journey, tapestry, myriad, seamless
Kill patterns:
-
"It's not just X - it's Y" (correlative constructions)
-
"In today's fast-paced world..."
-
"Let's dive in..."
-
"The best part? ..."
Phase 5: Quality Control
Use quality-loop Skill
Run every draft through 5 judges:
Judge Type Checks
Human Detector BLOCKING AI tells, correlative constructions
Accuracy Checker BLOCKING Facts verified against sources
OpenEd Voice BLOCKING Brand alignment, not preachy
Reader Advocate BLOCKING Engaging, logical flow
SEO Advisor ADVISORY Keywords, links, meta elements
Quick Checks (Grep Patterns)
Forbidden words
grep -inE "delve|comprehensive|crucial|leverage|landscape" DRAFT*.md
Correlative constructions
grep -inE "isn't just|not just .* - it's" DRAFT*.md
Em dashes (should be hyphens with spaces)
grep -n "—" DRAFT*.md
Internal link count
grep -oE '(https://opened\.co[^)]*\)|\(/[^)]*\)' DRAFT*.md | wc -l
Phase 6: Visuals
Use nano-banana-image-generator Skill
Asset Dimensions Style
Thumbnail 16:9 watercolor-line
Social card 1:1, 4:5 brand colors
Comparison article concepts:
-
Two hands offering different gifts
-
Split path through two environments
-
Same tree with different root systems
Phase 7: Publish
Use webflow-publish Skill
Pre-publish checklist:
-
All blocking judges passed
-
Thumbnail created
-
Meta elements finalized
-
Internal/external links verified
Post-Publish
-
Update articles that should link TO this piece
-
Sync Master Content Index
-
Schedule social promotion via newsletter-to-social
Skill Dependencies
Phase Primary Skill Purpose
Research seomachine
DataForSEO, GSC, GA4 data
Structure opened-identity
Brand perspective
Draft ai-tells , ghostwriter
Writing quality
Quality quality-loop
5-judge review
Visuals nano-banana-image-generator
Thumbnails
Publish webflow-publish
CMS upload
Social newsletter-to-social
Derivative posts
Project Folder Structure
Studio/SEO Content Production/[Topic]/ ├── SEO_RESEARCH_BRIEF.md # From seomachine ├── SOURCES.md # Compiled proprietary sources ├── OUTLINE.md # Approved structure ├── DRAFT_v1.md # First draft ├── DRAFT_v2.md # Post-quality-loop └── thumbnail-final.png # Header image
Quick Start
-
Validate topic with seomachine → Volume > 500, KD < 30, OpenEd has perspective
-
Create folder: Studio/SEO Content Production/[Topic]/
-
Run research: seomachine content brief + competitor gap
-
Compile sources: OpenEd book → Published → Podcasts → External
-
Get outline approved: Structure + unique angle
-
Draft with constraints: ai-tells + ghostwriter + internal links
-
Quality loop: 5 judges, fix blocking issues
-
Create thumbnail: nano-banana-image-generator
-
Publish: webflow-publish → newsletter-to-social
Refactored: 2026-01-29 (consolidated from seo-content-writer, removed credential exposure)