Example output: 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
- SE Ranking MCP server connected.
seo-firecrawlavailable 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
-
Google data availability check (advisory, not blocking)
- Run
python3 scripts/google_auth.py --check --json. Iftier >= 0, the downstream specialist skills (technical-audit, page, content-audit, drift) will enrich their outputs with real Google field data — andseo-planingests those richer outputs in step 4. The plan itself doesn't dispatchseo-googledirectly; 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 SE Ranking-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 SE Ranking data only.- This is the lightest possible auto-spawn —
seo-plandoesn't runseo-googleitself (transferring friction to a single command is theirs' anti-pattern we critiqued inEVAL_RESULT_v2.md); it surfaces the option so the user can opt in or out before specialist skills run. Seeskills/seo-google/references/cross-skill-integration.md§ "seo-plan" for the full rationale.
- Run
-
Detect business type
DATA_getDomainOverviewWorldwide, plus a Firecrawlscrapeof 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).
-
Domain baseline
DATA_getDomainOverviewWorldwide,DATA_getDomainOverviewHistory,DATA_getDomainAuthority,DATA_getBacklinksSummary- Capture: organic keywords, organic traffic estimate, DA, backlink profile health, top countries, traffic trend over the last 12 months.
- This sets the "where you are now" anchor.
-
Competitive frame
DATA_getDomainCompetitors- 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).
-
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.mdrollup,GAPS.md,REPORT.md,PROFILE.mdrespectively). - 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 SE Ranking credits + 1 Firecrawl credit per audited URL (default cap 50; for the seo-plan top-10-pages scope, expect ~10–15 SE Ranking + ~10 Firecrawl).seo-competitor-gap-analysis→ ~30–80 credits for 10 seeds.seo-ai-search-share-of-voice→ ~10–20 credits (leaderboard + ~20 prompts × N domains).seo-backlinks-profile→ ~25–40 SE Ranking credits.
- 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} credits) - seo-content-audit (~{N} credits) - seo-competitor-gap-analysis (~{N} credits) - seo-ai-search-share-of-voice (~{N} credits) - seo-backlinks-profile (~{N} credits) Total estimated cost: ~{N} credits. 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 fromseo-competitor-gap-analysis/DATA_getDomainKeywords, so it must run after the gap-analysis batch completes. - Each specialist runs its own
DATA_getCreditBalancepreflight and surfaces cost before proceeding (their existing behaviour —seo-plandoes not bypass it). If any specialist aborts on a credit-balance check, surface that abort to the user and let them decide whether to top up or skip. - After every dispatch, ingest the new folder the same way step 4a does.
- Parallel batch (independent):
- 4e. If user answers
N(or anything else — defaultN): 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.
- 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):
-
Score the four pillars
- Technical health (0–100): from
seo-technical-auditseverity-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.
- Technical health (0–100): from
-
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-localskill 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-specifi