# Seo Plan

> Build a phased SEO roadmap for a domain — quarter-by-quarter, tied to the site's competitive position, content gaps, technical debt, and AI Search readiness. Synthesises the outputs of multiple skills (`seo-technical-audit`, `seo-content-audit`, `seo-keyword-cluster`, `seo-competitor-gap-analysis`, `seo-ai-search-share-of-voice`) into one site-level plan with sequencing, owners, and success metri…

- **Type:** Skill
- **Install:** `agentstack add skill-amirjahfar1-automate-seo-with-claude-seo-plan`
- **Verified:** Pending review
- **Seller:** [amirjahfar1](https://agentstack.voostack.com/s/amirjahfar1)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [amirjahfar1](https://github.com/amirjahfar1)
- **Source:** https://github.com/amirjahfar1/automate-seo-with-claude/tree/main/skills/seo-plan
- **Website:** https://nextbrainsolutions.com/

## Install

```sh
agentstack add skill-amirjahfar1-automate-seo-with-claude-seo-plan
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

> Example output: [examples/seo-plan-wix-com-20260514/PLAN.md](../../examples/seo-plan-wix-com-20260514/PLAN.md)

# SEO Plan

Produce a phased SEO roadmap for a domain. Output is a single `PLAN.md` plus per-phase deliverable folders, each phase scoped to a quarter (or a 90-day sprint), each with explicit goals, work items, owners, and metrics. The plan is grounded in the site's actual competitive position — not a generic checklist.

This is the "what should we work on next quarter" skill. It does not replace specialist skills — it composes them, then sequences their outputs.

## Prerequisites

- DataForSEO MCP server connected.
- `seo-firecrawl` available for site mapping and head metadata (optional but recommended).
- User provides:
  - Target domain.
  - Optionally: target country (default `us`), business type (saas / ecommerce / local / publisher / agency / b2b — auto-detected from the domain if not supplied), planning horizon (default 90 days, options: 30 / 90 / 180 / 365).
  - Optionally: known constraints (engineering capacity, content budget, no JS-render changes allowed, etc.).

## Process

0. **Google data availability check (advisory, not blocking)**
   - Run `python3 scripts/google_auth.py --check --json`. If `tier >= 0`, the downstream specialist skills (technical-audit, page, content-audit, drift) will enrich their outputs with real Google field data — and `seo-plan` ingests those richer outputs in step 4. The plan itself doesn't dispatch `seo-google` directly; it prints a one-line notice so the user knows the option is on the table:
   ```
   > Google APIs detected (tier {n}, available: {comma-list}). Downstream specialist
   > skills (seo-technical-audit, seo-page, seo-content-audit, seo-drift) will enrich
   > their outputs with real CrUX / GSC / GA4 / URL Inspection data automatically.
   ```
   - If creds are missing, the plan continues with DataForSEO-only data and prints:
   ```
   > Google APIs not configured. To enrich downstream phases with real CWV / GSC /
   > GA4 / indexation data, run `bash extensions/google/install.sh`. Plan continues
   > with DataForSEO data only.
   ```
   - This is the **lightest possible auto-spawn** — `seo-plan` doesn't run `seo-google` itself (transferring friction to a single command is theirs' anti-pattern we critiqued in `EVAL_RESULT_v2.md`); it surfaces the option so the user can opt in or out before specialist skills run. See `skills/seo-google/references/cross-skill-integration.md` § "seo-plan" for the full rationale.

1. **Detect business type** `mcp__dataforseo__dataforseo_labs_google_domain_rank_overview`, plus a Firecrawl `scrape` of the homepage if available
   - Inspect title, H1, JSON-LD types, primary nav patterns.
   - Classify as one of: `saas`, `ecommerce`, `local`, `publisher`, `agency`, `b2b-services`, `marketplace`. If ambiguous, ask the user once.
   - Business type drives template selection (see step 6).

2. **Domain baseline** `mcp__dataforseo__dataforseo_labs_google_domain_rank_overview`, `mcp__dataforseo__dataforseo_labs_google_historical_rank_overview`, `mcp__dataforseo__backlinks_bulk_ranks`, `mcp__dataforseo__backlinks_summary`
   - Capture: organic keywords, organic traffic estimate, DataForSEO rank (0–1000, replaces DA), backlink profile health, top countries, traffic trend over the last 12 months.
   - This sets the "where you are now" anchor.

3. **Competitive frame** `mcp__dataforseo__dataforseo_labs_google_competitors_domain`
   - Pull top 5–10 organic competitors.
   - For each: organic keywords, traffic share, DA, top topical clusters they own.
   - Identifies who the user is *actually* competing with on the SERP (often different from who they think).

4. **Pull specialist inputs — confirm-then-dispatch pattern**
   - **4a. Detect existing outputs.** In the current working directory, look for any folder matching the patterns below dated within the last 30 days (treat folders older than 30 days as stale and re-list them as missing):
     - `seo-technical-audit-*`
     - `seo-content-audit-*`
     - `seo-competitor-gap-analysis-*`
     - `seo-ai-search-share-of-voice-*`
     - `seo-backlinks-profile-*`
   - For each present folder, ingest its primary deliverable (`TECH-AUDIT.md`, `VERDICT.md` rollup, `GAPS.md`, `REPORT.md`, `PROFILE.md` respectively).
   - **4b. Build the missing list.** For each prerequisite that did not have a fresh output, look up its credit-cost figure from the specialist's own SKILL.md (read those when forming the prompt — figures may drift):
     - `seo-technical-audit` → varies by page count for a fresh audit; ~6 Firecrawl credits for the modern-signals step. Cite "varies; check page count" if no recent audit cached.
     - `seo-content-audit` → ~10–15 DataForSEO calls + 1 Firecrawl credit per audited URL (default cap 50; for the seo-plan top-10-pages scope, expect ~10–15 DataForSEO calls + ~10 Firecrawl).
     - `seo-competitor-gap-analysis` → ~30–80 DataForSEO calls for 10 seeds.
     - `seo-ai-search-share-of-voice` → ~10–20 DataForSEO calls (leaderboard + ~20 prompts × N domains).
     - `seo-backlinks-profile` → ~25–40 DataForSEO calls.
   - **4c. Print the confirmation prompt** (single block, exactly this shape, with the missing-list filtered to only what is actually missing):
   ```
   To produce a defensible plan, seo-plan needs outputs from N specialists not yet
   run for {domain}:
   - seo-technical-audit (~{N} calls)
   - seo-content-audit (~{N} calls)
   - seo-competitor-gap-analysis (~{N} calls)
   - seo-ai-search-share-of-voice (~{N} calls)
   - seo-backlinks-profile (~{N} calls)
   Total estimated cost: ~{N} DataForSEO calls (pay-per-call; cap with limit/ceiling params).
   Run them now in this session? (y/N — default N preserves the existing v2.6 behavior of asking the user to run them manually first)
   ```
   - **4d. If user answers `y`:** dispatch each missing specialist in this order, ingesting each primary deliverable as it completes:
     - **Parallel batch (independent):** `seo-technical-audit`, `seo-competitor-gap-analysis`, `seo-ai-search-share-of-voice`, `seo-backlinks-profile`.
     - **Sequential after the batch:** `seo-content-audit` — its top-10-pages scope depends on knowing the top traffic pages from `seo-competitor-gap-analysis` / `mcp__dataforseo__dataforseo_labs_google_ranked_keywords`, so it must run after the gap-analysis batch completes.
     - Each specialist surfaces its own per-call cost note before proceeding (their existing behaviour — `seo-plan` does not bypass it). DataForSEO bills per call with no pre-run credit gate; if any specialist aborts (e.g. the user declines its cost note), surface that abort to the user and let them decide whether to proceed or skip.
     - After every dispatch, ingest the new folder the same way step 4a does.
   - **4e. If user answers `N` (or anything else — default `N`):** fall through to the existing v2.6 behaviour — the plan opens with **Phase 0: Discovery**, and running each missing specialist becomes the first sprint's work. This preserves the user's control over credit spend in environments where the specialists should be scheduled or batched separately.

5. **Score the four pillars**
   - **Technical health** (0–100): from `seo-technical-audit` severity-weighted issue count.
   - **Content quality** (0–100): average E-E-A-T+CITE score across audited pages.
   - **Topical authority** (0–100): cluster coverage relative to top 3 competitors.
   - **AI Search readiness** (0–100): citation share vs SoV competitors.
   - The lowest pillar becomes the **lead theme** for the first phase.

6. **Apply business-type template** (templates differ — pick one and parameterise)
   - **saas** → product-led pillars + integration pages + comparison/alternatives + JTBD content.
   - **ecommerce** → category page hygiene + product schema + faceted-nav indexation rules + review aggregation.
   - **local** → GBP optimisation + location pages + citation cleanup (note: we don't have a `seo-local` skill yet — flag this as a manual sub-step or external).
   - **publisher** → topical clusters + author E-E-A-T + freshness cadence + AI-Search citations.
   - **agency** → service pages + case studies + comparison content + lead-gen LP (use `seo-agency-landing-page`).
   - **b2b-services** → industry-specific landing pages + thought-leadership clusters + decision-stage content.
   - Template provides default work-item categories; the lowest-pillar score from step 5 weights them.

7. **Phase the plan** — three phases over the planning horizon, each with goals, work items, owners, metrics
   - **Phase 1 (weeks 1–4 of horizon): Foundations.** Technical fixes that unblock everything else, baseline drift snapshot, 1–2 quick-win content refreshes from `seo-page` verdicts.
   - **Phase 2 (weeks 5–8): Build.** Content tier from `seo-keyword-cluster` (1 pillar + 3–7 spokes), schema fixes from `seo-schema`, comparison page from `seo-competitor-pages` if competitive frame supports it.
   - **Phase 3 (weeks 9–12): Compound + measure.** AI Search readiness pass via `seo-geo` on top pages, backlink-gap outreach starter from `seo-backlink-gap`, second drift comparison via `seo-drift compare`, retro + adjust.
   - For longer horizons (180/365 days), repeat phases 2+3 with refreshed inputs and a quarterly retro.
   - Each work item is tagged with the skill that produces it: `seo-content-brief`, `seo-schema`, `seo-page`, etc.

8. **Pick metrics**
   - **Lagging (quarterly):** organic traffic, organic keywords ranking top-10, organic conversions.
   - **Leading (weekly/monthly):** technical-issue count, pages with E-E-A-T verdict ≥ 70, AI Search citation count, referring-domain count.
   - One leading + one lagging per phase. Tie each metric to a current value (from step 2) and a phase-end target. Targets must be defensible — call out base rates.

9. **Sequencing + dependencies**
   - Build a dependency map: e.g., "rewrite cluster A pillar" depends on "fix `noindex` on /blog templates" depends on "run `seo-technical-audit`."
   - Surface the critical path. Anything off the critical path is moveable; anything on it blocks the phase.

10. **Synthesise** `PLAN.md`

## Output format

Folder `seo-plan-{domain-slug}-{YYYYMMDD}/`:

```
seo-plan-{domain-slug}-{YYYYMMDD}/
├── PLAN.md                              (synthesis — primary deliverable; inlines 01-baseline, 02-competitive-frame, 07-dependencies, 08-metrics as sections)
├── 04-phase-1-foundations.md            (load-bearing — owners share single phase files in standups)
├── 05-phase-2-build.md                  (load-bearing — owners share single phase files)
├── 06-phase-3-compound.md               (load-bearing — owners share single phase files)
└── evidence/
    ├── 01-baseline.md                   (where you are now — raw data inlined into PLAN.md)
    ├── 02-competitive-frame.md          (who you're actually competing with — raw data inlined into PLAN.md)
    ├── 03-pillar-scores.md              (technical / content / topical / AI Search — scoring math)
    ├── 07-dependencies-and-critical-path.md  (dependency map — inlined as PLAN.md section)
    └── 08-metrics.md                    (metric tables — inlined as PLAN.md section)
```

Top-level: `PLAN.md` + the three phase files (`04`/`05`/`06`). Owners share single phase files in standups, so phase files stay top-level rather than collapsing into PLAN.md. The verbatim-duplicate sections (baseline, competitive frame, dependencies, metrics) are inlined into PLAN.md but the raw step files are preserved in `evidence/` along with the pillar-scoring math.

`PLAN.md` follows this shape:

```markdown
# SEO Plan: {domain}

> Plan dated {YYYY-MM-DD} · Horizon: {n} days · Business type: {type} · Country: {country}

## Where you are
- Organic keywords: {n} (trend: {↑↓→ over 12mo})
- Organic traffic estimate: {n}/mo
- Domain authority: {n}
- Referring domains: {n}
- Pillar scores: Technical {n}/100 · Content {n}/100 · Topical {n}/100 · AI Search {n}/100

## Lead theme
{The lowest pillar from step 5, plus a one-line "why this is the constraint."}

## Top 5 competitors
| Domain | DA | Organic kw | Top cluster they own |
|---|---|---|---|
| {comp} | {n} | {n} | {cluster} |

## Phase 1 — Foundations (weeks 1–4)

**Goal:** {1-line outcome, e.g. "remove technical debt blocking content investment"}

| # | Work item | Skill / source | Owner | Effort | Phase-end metric |
|---|---|---|---|---|---|
| 1.1 | {item} | `seo-technical-audit` follow-up | {role} | {S/M/L} | {metric} |
| 1.2 | ... | | | | |

**Phase exit criteria:** {what must be true to declare Phase 1 done}

## Phase 2 — Build (weeks 5–8)
{same shape}

## Phase 3 — Compound + measure (weeks 9–12)
{same shape}

## Critical path
{Ordered list of work items that block subsequent phases. Anything not on this list is moveable.}

## Metrics

| Metric | Type | Current | Phase 1 target | Phase 2 target | Phase 3 target |
|---|---|---|---|---|---|
| Organic traffic | Lagging | {n} | {n} | {n} | {n} |
| Pages with E-E-A-T ≥ 70 | Leading | {n} | {n} | {n} | {n} |
| Technical issue count | Leading | {n} | {n} | {n} | {n} |
| AI Search citation count | Leading | {n} | {n} | {n} | {n} |
| Referring domains | Leading | {n} | {n} | {n} | {n} |

## Constraints / caveats
{User-supplied constraints, plus anything the data flags — e.g., "DA gap to top competitor is 25 points; expect 6+ months for keyword parity."}

## Recommended next step
Run Phase 1 work items. After week 4, run `seo-drift compare` against the baseline captured today, then adjust Phase 2 scope.
```

## Tips

- **Default is "no auto-dispatch."** The confirm prompt in step 4c defaults to `N`. If the user just hits Enter (or answers anything other than an explicit `y`), `seo-plan` falls through to the v2.6 Phase-0 behaviour and lists the missing specialists as the first sprint's work. This preserves user control over spend — important when the user wants to cap DataForSEO call volume or schedule specialists separately.
- **Auto-dispatch (the `y` path) is the convenience option.** When the user wants a finished plan in one session and is comfortable with the displayed call estimate, the `y` path runs the missing specialists in the optimal parallel-then-sequential order described in step 4d, ingests their outputs, and proceeds straight into pillar scoring (step 5). No silent re-execution: every dispatch is gated by the single confirmation in step 4c.
- **Auto-dispatch respects each specialist's own cost note.** Each specialist surfaces its per-call cost note at its first step before issuing DataForSEO calls — `seo-plan` does not bypass that. DataForSEO is pay-per-call with no pre-run credit gate; if a specialist aborts (user declines its inner cost note), `seo-plan` surfaces the abort and lets the user choose to proceed, skip that specialist (and let it remain a Phase-0 work item), or cancel the rest of the dispatch.
- **Auto-detect business type cheaply.** Homepage ``, schema `@type`, and top-nav anchors are usually enough. Ask the user only when truly ambiguous.
- **The lead theme is the lowest pillar score.** Don't pick the pillar the user is most excited about — pick the one the data says is the constraint. Surface this gap explicitly if they conflict.
- **Three phases, even for 30-day horizons.** Compress, don't drop. A 30-day plan is foundations (weeks 1–2), build (weeks 2–3), measure (week 4). The structure forces sequencing discipline.
- **Targets must be defensible.** Don't write "double organic traffic in Q1." Tie each target to a base rate from competitor data or category benchmarks. If the math doesn't support a target, say so and lower it. DataForSEO allows up to 2,000 calls/min, 30 concurrent; the plan paces sequentially, so call volume is never the bottleneck.
- **Critical path is the deliverable.** Most teams can do *something*; few know what's blocking what. Surface the dependency chain — that's where this skill earns its keep.
- **Local SEO is a known

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [amirjahfar1](https://github.com/amirjahfar1)
- **Source:** [amirjahfar1/automate-seo-with-claude](https://github.com/amirjahfar1/automate-seo-with-claude)
- **License:** MIT
- **Homepage:** https://nextbrainsolutions.com/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-amirjahfar1-automate-seo-with-claude-seo-plan
- Seller: https://agentstack.voostack.com/s/amirjahfar1
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
