ccc-seo · diff
git:20260801.0de5ac7 to git:20261013.fbe187d
79 added, 65 removed. Audit A to A.
---
name: ccc-seo
- context: fork
- description: "complete SEO ecosystem — 20 skills in one. Technical SEO, AI search optimization, content strategy, analytics, and programmatic SEO at scale."
+ description: "Route SEO work to the right method: technical audit and fixes, AI search optimization (AEO, GEO, LLMO), content clusters and briefs, analytics, programmatic pages, backlinks and social previews. Use when the user asks to audit or improve SEO, rank in AI answers, plan SEO content, or types $ccc-seo."
allowed-tools:
- Read
+ - Write
+ - Edit
+ - Bash
+ - Glob
+ - Grep
+ - Skill
+ - WebFetch
- AskUserQuestion
+ argument-hint: "[audit | ai-search | content | more, or plain words]"
+ model: sonnet
+ effort: medium
---
- # $ccc-seo — SEO domain hub
+ # $ccc-seo — route the SEO job
- > Load ONE skill. Get the entire SEO domain. 20 skills in one.
+ **CC Commander** · $ccc-seo · one pick from intent to the right SEO method, for classic ranking and for citation in AI answers.
- ## What's Inside
+ The user's selected model is preserved unless they choose otherwise. SEO sub-skills (`seo-context`, `seo-optimizer`, `ai-seo`, `aaio` and the rest) ship with the Commander CLI toolkit under `skills/ccc-seo/<name>/`. Invoke one with the Skill tool when it is listed in this session; otherwise apply its one-line method from [references/routing.md](references/routing.md).
- | Category | Skills |
- |----------|--------|
- | Foundation | seo-router, seo-context |
- | Technical SEO | seo-optimizer, site-architecture |
- | AI Search | ai-seo, aaio |
- | Content | content-strategy, content-cluster, seo-content-brief, blog-engine, guest-blogger |
- | Analytics & Tracking | analytics-conversion, analytics-product, search-console, serp-analyzer |
- | Growth | bulk-page-generator, backlink-audit, social-integration |
- | Dashboard | seo-dashboard |
+ Codex: ask pickers as plain-text questions with the same options, and read a sub-skill's `SKILL.md` directly instead of using the Skill tool.
- > **No expressed intent?** Present the top 3 sub-skills + "More…" as an AskUserQuestion picker (≤4 options).
+ ## When to use / when not to
- ## Routing Matrix
+ - Use for technical SEO (meta, sitemaps, canonicals, Core Web Vitals, JSON-LD), site structure, AI-search optimization (answer engines, generative summaries, LLM citations), content clusters and briefs, Search Console and analytics setup, programmatic pages, backlink audits and Open Graph previews.
+ - Use `$ccc-marketing` for positioning, CRO and campaigns, `$ccc-content` for drafting the article itself, and `$ccc-design` for page visuals.
- | Your Intent | Route To |
- |-------------|----------|
- | "Fix technical SEO" / "Audit" | `seo-optimizer` |
- | "Site structure" / "URL strategy" | `site-architecture` |
- | "Rank in AI search" / "ChatGPT citations" | `ai-seo` + `aaio` |
- | "Content plan" / "Editorial calendar" | `content-strategy` + `content-cluster` |
- | "SEO content brief" | `seo-content-brief` |
- | "Set up a blog" | `blog-engine` |
- | "Guest posting" | `guest-blogger` |
- | "Track conversions" / "GA4 setup" | `analytics-conversion` |
- | "Product analytics" / "Retention" | `analytics-product` |
- | "Search Console data" | `search-console` |
- | "Competitor SERP analysis" | `serp-analyzer` |
- | "Programmatic SEO" / "Scale pages" | `bulk-page-generator` |
- | "Backlink audit" | `backlink-audit` |
- | "Social sharing" / "OG images" | `social-integration` |
- | "SEO health overview" | `seo-dashboard` |
+ ## What happens
- ## AI SEO Features (AEO/GEO/LLMO)
+ ### 1. Context strip
- This domain specializes in optimization for AI-powered search surfaces:
- - **AEO** (Answer Engine Optimization) — structure content for direct answers
- - **GEO** (Generative Engine Optimization) — appear in AI-generated summaries
- - **LLMO** (Large Language Model Optimization) — improve citation probability in ChatGPT, Claude, Perplexity, Gemini
+ Run in one Bash call, silent on failure:
- ## Campaign Templates
+ ```bash
+ ls seo-context.md marketing-context.md 2>/dev/null
+ test -f package.json && jq -r '(.dependencies // {}) + (.devDependencies // {}) | keys[]' package.json 2>/dev/null | grep -E '^(next|astro|nuxt|gatsby|@sveltejs/kit)$'
+ ls public/robots.txt public/sitemap.xml app/sitemap.* app/robots.* 2>/dev/null
+ ```
- ### Technical SEO Audit + Fix
- 1. `seo-context` → capture domain state
- 2. `seo-optimizer` → meta tags, sitemaps, Core Web Vitals
- 3. `site-architecture` → URL structure + internal linking
- 4. `search-console` → crawl errors, index coverage
- 5. `seo-dashboard` → health overview
+ Render one line:
- ### AI Search Optimization
- 1. `seo-context` → baseline
- 2. `ai-seo` → LLM citation optimization
- 3. `aaio` → robots.txt for AI, markdown twins, JSON-LD
- 4. `content-cluster` → topic authority building
+ > 🌐 Framework: `<Next.js | Astro | other | none>` · robots <yes | no> · sitemap <yes | no> · SEO context <yes | no>
- ### Content Engine Setup
- 1. `content-strategy` → editorial calendar + content pillars
- 2. `seo-content-brief` → per-page keyword targeting
- 3. `blog-engine` → Next.js/Astro blog with MDX + sitemap
- 4. `analytics-conversion` → track content conversions
+ If `seo-context.md` exists, Read it before routed work. If the user gives a live URL, fetch it with WebFetch for the audit instead of guessing.
- ## When to invoke this skill
+ ### 2. Route by intent, or ask
- **Example 1**
- - user: audit my site's SEO and fix the technical issues
- - assistant: Loads ccc-seo and runs seo-optimizer for meta tags, sitemaps, Core Web Vitals, and canonical URLs.
+ When the request or argument names the job, route straight to it with the intent table in [references/routing.md](references/routing.md) and skip the picker.
- **Example 2**
- - user: optimize my site to appear in ChatGPT and Perplexity answers
- - assistant: Loads ccc-seo and routes to ai-seo + aaio for LLM citation optimization, structured data, and agentic AI optimization.
+ Otherwise ask with AskUserQuestion (header "CC Commander · SEO", question "What SEO work?"). Put the recommended option first, marked 🟢:
- **Example 3**
- - user: generate 500 city landing pages for programmatic SEO
- - assistant: Loads ccc-seo and routes to bulk-page-generator with template-driven page generation and schema markup.
+ - 🔧 Technical audit and fix — meta tags, sitemap, robots, canonicals, Core Web Vitals, internal links. Recommended when step 1 shows no sitemap or no robots file.
+ - 🤖 AI search optimization — structure content for direct answers and LLM citations, AI-crawler rules, JSON-LD, markdown twins.
+ - 📝 Content engine — content pillars, topic clusters, per-page briefs and a blog setup.
+ - 🔄 More — analytics, Search Console, SERP analysis, programmatic pages, backlinks, social previews, dashboard.
+
+ When sitemap and robots both exist, the 🟢 default is AI search optimization.
+
+ On "More", ask a second picker, question "Which area?":
+
+ - 🟢 Analytics and Search Console — conversion tracking, product analytics, crawl and index coverage.
+ - 🔬 SERP and backlinks — competitor SERP analysis and a backlink profile audit.
+ - 📦 Programmatic pages — template-driven pages at scale with schema markup.
+ - 🌐 Social previews and dashboard — Open Graph and Twitter cards, plus a combined SEO health view.
+
+ Dispatch the selection immediately; do not re-prompt.
+
+ ### 3. Run the routed flow
+
+ 1. Start with `seo-context` when no `seo-context.md` exists and the flow depends on rankings, competitors or goals; otherwise skip it.
+ 2. Run the flow's stages in order from [references/routing.md](references/routing.md) (Technical audit + fix, AI search optimization, Content engine, or the single routed sub-skill), invoking each with the Skill tool or applying its fallback method.
+ 3. Before editing code, list the planned changes (file, change, reason) and apply them only within the project's existing SEO files and layout components.
+ 4. Sub-skills that call external APIs (`serp-analyzer`, `backlink-audit`, `search-console`) need the user's own opt-in credentials in the environment. Check presence with `test -n "$VAR"` only; never print a value. Without credentials, fall back to the web-search method the sub-skill describes, and say the data is partial.
+
+ ## Done when
+
+ Run before reporting, and report the actual result:
+
+ - Code changed: the project's build or typecheck exits 0 (`npm run build`, or `npx tsc --noEmit` when there is no build script), and `git status --short` lists only the intended files.
+ - Sitemap or robots on a live URL: `curl -sI <url>/sitemap.xml` and `curl -sI <url>/robots.txt` return 200; quote the status lines.
+ - JSON-LD added: each block parses (`node -e 'JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"))' <file>` for extracted blocks) and names a schema.org `@type`.
+ - Audit only: findings are listed with the URL or `path:line`, severity and fix; nothing is reported as fixed that was not changed.
+ - Programmatic pages: the generated page count matches the input row count (`ls <out-dir> | wc -l`).
+
+ ## Guardrails
+
+ - Never list every sub-skill as a menu; pickers have two to four options.
+ - Never deploy, submit sitemaps to search engines, or change DNS from this skill; `$ccc-deploy` owns releases and asks first.
+ - Never add hidden text, doorway pages, keyword stuffing, cloaking or fake reviews in structured data.
+ - Never block or allow AI crawlers in `robots.txt` without stating the trade-off and getting the user's choice.
+ - Never print or commit an API key; credentials stay in the user's environment.
+
+ ## See also
+
+ - `$ccc-marketing` — positioning, CRO, campaigns and launches
+ - `$ccc-content` — draft the article a brief calls for
+ - `$ccc-deploy` — ship the SEO changes
+ - `$ccc-browse` — inspect the rendered page and its head tags
---
> ⚙️ **Fable contract:** plan before build · verifier ≠ worker · prove before alarm · loops need gates · leave durable state — `rules/fable-method.md`
> (On Codex, present these options as a numbered list and ask the user to reply with a number — AskUserQuestion is Claude-only.)