1---2name: ai-seo-articles-23description: AI-powered SEO article production pipeline. Researches keywords, writes high-quality articles with branded hero images and inline visuals, scores quality at 110 pts, processes images via script, and publishes at scale. Configurable for any company via config/ subfolder. Currently configured for: Blink (blink.new). Commands: "run seo", "write seo articles", "seo run", "run seo 8 articles", "run seo b7 sprint", "run seo [market] focus".4---56# ai-seo-articles — Master Skill78One skill, one source of truth for AI-powered SEO article production. Configurable for any project.910---1112## Active Project1314> **Change this section to switch projects.** Everything else reads from these paths automatically.1516| Setting | Value |17|---|---|18| **Project** | Blink (blink.new) |19| **Config path** | `.cursor/skills/ai-seo-articles/config/blink/` |20| **Runtime data** | `.todo/seo/` (SEO_PROFILE.md, MANIFEST.md, briefs/, drafts/) |2122**To use this skill for a different project:**231. Create `.cursor/skills/ai-seo-articles/config/[project-name]/`242. Copy `config/blink/` as a template, update all 5 files (COMPANY, MARKETS, CLUSTERS, COPY, IMAGES)253. Update the "Active Project" table above to point to `config/[project-name]/`264. Create `.todo/seo-[project-name]/` with SEO_PROFILE.md, MANIFEST.md, briefs/, drafts/275. Update ORCHESTRATOR.md Phase 0 config file paths to reference the new config and runtime paths2829---3031## How to Invoke3233| Command | What runs |34|---|---|35| `run seo` | Standard run — 5 articles across top 5 priority clusters |36| `run seo 8 articles` | Extended run — 8 articles |37| `run seo b7 sprint` | 5-6 "How to Build X" articles + 2-3 other priorities |38| `run seo claude code focus` | Prioritise Market C clusters (C1-C6) |39| `run seo openclaw focus` | Prioritise Market A clusters (A7, A9, A1) |40| `run seo vibe coding focus` | Prioritise Market B clusters (B2, B4, B7, B8, B9) |4142---4344## Execution: read and run the orchestrator4546When invoked, immediately:47481. Read `.cursor/skills/ai-seo-articles/prompts/ORCHESTRATOR.md` — the full 6-phase pipeline492. The orchestrator reads config files (Phase 0) before any other action503. Execute the orchestrator phases 0-6 exactly as written5152---5354## Config Files (what each contains)5556| File | Contains |57|---|---|58| `config/blink/COMPANY.md` | Company name, website, blog URL, products, brand voice, key differentiators, CDN token |59| `config/blink/MARKETS.md` | Three content markets (A/B/C), products per market, exact CTA strings, detection signals |60| `config/blink/CLUSTERS.md` | All keyword clusters, Global Priority Stack, competitor intelligence per market, strategic rules |61| `config/blink/COPY.md` | Exact CTA strings verbatim, pricing anchors, product advantage phrases, brand language dos/don'ts |62| `config/blink/IMAGES.md` | CHARACTER ANCHOR, scene table by article type, 6 validated prompts, inline image system, CDN upload |6364---6566## Directory Index6768| Path | What it contains |69|---|---|70| `SKILL.md` | **This file.** Entry point with Active Project config section. |71| `config/blink/COMPANY.md` | Company identity — name, URLs, products, brand voice, CDN config |72| `config/blink/MARKETS.md` | Content markets A/B/C — products, CTAs, detection signals |73| `config/blink/CLUSTERS.md` | Keyword clusters, Global Priority Stack, competitor intel |74| `config/blink/COPY.md` | Exact CTA copy, pricing anchors, brand language rules |75| `config/blink/IMAGES.md` | Clay character system, scene table, 6 example prompts, inline image system |76| `prompts/ORCHESTRATOR.md` | **The brain.** Generic 6-phase pipeline — loads config at Phase 0 |77| `reference/ARTICLES.md` | **Writing standards.** Step 2 generic image section, article templates, blueprints A-E, style rules 1-10, SEO rules, frontmatter schema, publishing checklist |78| `reference/GEO.md` | **GEO + technical SEO.** AI citation optimization, schema markup, robots.txt, sitemap, llms.txt, verification commands |79| `scripts/process-inline-images.mjs` | **Run after writing.** Replaces INLINE_IMAGE comments with CDN-hosted images. Exit 0=ok, 2=no comments, 3=partial, 1=fatal |80| `scripts/audit-seo-health.sh` | **Technical audit.** Checks noindex, robots.txt, sitemap, schema, llms.txt, OG images |81| `scripts/check-competitor-serps.sh` | **SERP monitoring.** Checks SERP position for key keywords |8283---8485## Runtime Data (in .todo/seo/ — not in this skill)8687| Path | Purpose | Who writes it |88|---|---|---|89| `.todo/seo/SEO_PROFILE.md` | Markets, clusters, Global Priority Stack, live scores | Human + orchestrator |90| `.todo/seo/MANIFEST.md` | Run history — append after every run | Orchestrator |91| `.todo/seo/briefs/BRIEF_[slug].md` | Per-article research briefs | Research worker |92| `.todo/seo/drafts/DRAFT_[slug].mdx` | Article drafts in-flight | Writer worker |9394---9596## Quick Scripts9798```bash99# Process inline images (run after writing, before publishing):100node .cursor/skills/ai-seo-articles/scripts/process-inline-images.mjs .todo/seo/drafts/DRAFT_[slug].mdx101102# Technical SEO audit:103bash .cursor/skills/ai-seo-articles/scripts/audit-seo-health.sh104bash .cursor/skills/ai-seo-articles/scripts/audit-seo-health.sh http://localhost:3000 # against localhost105106# SERP presence check:107bash .cursor/skills/ai-seo-articles/scripts/check-competitor-serps.sh108```109110---111112## Hard Stops (always enforced)113114- **B11 Customer Stories**: never write without real customer data provided by a human115- **B10 AI Comparisons**: cap at 5 total; never prioritise over P1-P14116- **Score gate**: nothing publishes below 90/110; three revision passes max, then hold117- **No duplicate keywords**: check MANIFEST.md before any brief118- **No fabricated data**: invented stats or quotes → editor rejects, writer rewrites with sources119- **Slug rules**: no year suffix (`-2026`). Timeless slugs. Exception: changelogs only120- **No manual CTAs**: auto-injected by rendering engine. DO NOT write CTA sections.121122---123124## End-of-Run Report Format1251261. Articles published (count + full production URLs, e.g. https://blink.new/blog/[slug])1272. Clusters worked + new coverage scores1283. One M2 backlink opportunity flagged for human action1294. What to prioritise next run1305. Articles held (with reason and score)