feat(seo-skills): multi-backend Data Source Selection (#7)
Replaces single-vendor (Ahrefs-only) tool defaults with a per-task backend menu across all 14 SEO skills. Each skill now lists every capable MCP in allowed-tools and documents how to pick between Semrush, Ahrefs, OurSEO Agent (CLI + MCP), DataForSEO, and GSC in its SKILL.md Data Source Selection section. Tool stubs (~40 new files) populated per skill with capability deltas, call patterns, and explicit "not for this skill when" callouts so the menu is self-correcting. Skills affected: 19-keyword-strategy, 20-serp-analysis, 21-position-tracking, 22-link-building, 23-content-strategy, 24-ecommerce, 25-kpi-framework, 26-international, 27-ai-visibility, 28-knowledge-graph, 31-competitor-intel, 32-crawl-budget, 33-migration-planner, 34-reporting-dashboard. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,30 +24,84 @@ Comprehensive site migration planning and post-migration monitoring for SEO: cra
|
||||
10. **Recovery Estimation** - Estimate traffic recovery timeline based on migration type
|
||||
11. **Alert Generation** - Flag traffic drops >20%, broken redirects, indexation loss
|
||||
|
||||
## MCP Tool Usage
|
||||
## Data Source Selection
|
||||
|
||||
### SEO Data
|
||||
```
|
||||
our-seo-agent CLI: Primary SEO baseline data source (future); use --input for pre-fetched JSON
|
||||
WebSearch / WebFetch: Supplementary migration data
|
||||
Site migration spans **URL inventory** (crawl), **traffic/keyword/backlink baseline** (third-party + first-party), **redirect verification** (live HTTP), and **post-launch monitoring** (delta over time). Pick per data class — migration baselines often combine 3-4 backends.
|
||||
|
||||
| Backend | Best for | Notes |
|
||||
|---|---|---|
|
||||
| **OurSEO** (CLI + MCP) | **Default** for URL inventory, on-page crawl, index status, technical audit, schema baseline | CLI: `our collect crawl`, `our collect distributed`, `our audit tech`, `our research google index`. MCP: `mcp__ourseo__crawl_website`, `mcp__ourseo__check_index`. Distributed crawler for sites >5K URLs. |
|
||||
| **Firecrawl MCP** (`mcp__firecrawl__*`) | Large-scale URL inventory when OurSEO crawler is unavailable; per-URL redirect verification | `firecrawl_crawl` for full site map; `firecrawl_scrape` for redirect health on a specific URL. Useful when target is JS-heavy. |
|
||||
| **Ahrefs MCP** (`mcp__ahrefs__*`) | Per-URL **traffic value + backlink count** baseline (risk scoring), top pages by traffic | `site-explorer-top-pages` (traffic per URL), `site-explorer-pages-by-backlinks`, `site-explorer-metrics`, `site-explorer-metrics-history`, `site-explorer-pages-history`. |
|
||||
| **Semrush MCP** (`mcp__semrush__*`) | Per-URL organic traffic + keyword baseline | `organic_research`, `url_research`, `overview_research`. |
|
||||
| **GSC** (via `our research search-console`) | **First-party impression baseline** — what Google rendered for each URL pre-migration | Required for ground-truth post-migration comparison. Use `pages` / `combined` reports. |
|
||||
| **GA4** (via `our research ga4 *`) | First-party traffic baseline (sessions, conversions per URL) | Best for actual user-traffic baseline, complements GSC impressions. |
|
||||
| **Perplexity MCP** (`mcp__perplexity__*`) | Research migration best practices, common pitfalls per migration type | Not a data source — guidance enrichment. |
|
||||
|
||||
### How to pick
|
||||
|
||||
1. **User named a backend explicitly** → use it.
|
||||
2. **User preference memory** — read `feedback_seo_tool_preferences.md`; honor the task-type default.
|
||||
3. **URL inventory** → **OurSEO** crawler (CLI primary). Use Firecrawl only when OurSEO crawler can't handle the target (e.g., JS-heavy SPA).
|
||||
4. **Per-URL traffic value for risk scoring** → Ahrefs `site-explorer-top-pages` is the strongest signal. Semrush `url_research` is the alternate.
|
||||
5. **First-party baseline (REQUIRED for accurate post-migration diff)** → GSC + GA4 via `our` CLI. Always capture before migration date.
|
||||
6. **Redirect verification** (post-launch) → Firecrawl `firecrawl_scrape` per URL OR `WebFetch` with redirect following.
|
||||
7. **Default baseline stack**: OurSEO crawl + Ahrefs top-pages + GSC pages + GA4 traffic. Document every source.
|
||||
8. **Still ambiguous + non-trivial** → ask once via `AskUserQuestion`.
|
||||
|
||||
### Backend call patterns
|
||||
|
||||
**OurSEO CLI (default — URL inventory + audit):**
|
||||
```bash
|
||||
our collect crawl https://<site> --max-pages 5000
|
||||
our collect distributed https://<site> --workers 8 --max-pages 50000
|
||||
our audit tech https://<site>
|
||||
our research google index --domain <site>
|
||||
```
|
||||
|
||||
### Firecrawl for URL Inventory & Redirect Verification
|
||||
**OurSEO MCP (Claude Desktop):**
|
||||
```
|
||||
mcp__firecrawl__firecrawl_crawl: Crawl entire site for URL inventory
|
||||
mcp__firecrawl__firecrawl_scrape: Verify individual redirect health
|
||||
mcp__ourseo__crawl_website(url="<site>", max_pages=5000)
|
||||
mcp__ourseo__check_index(domain="<site>")
|
||||
```
|
||||
|
||||
### Notion for Report Storage
|
||||
**Firecrawl (URL inventory + redirect verification):**
|
||||
```
|
||||
mcp__notion__notion-create-pages: Save reports to SEO Audit Log
|
||||
mcp__firecrawl__firecrawl_crawl(url="<site>", limit=5000)
|
||||
mcp__firecrawl__firecrawl_scrape(url="<specific URL>", formats=["markdown"])
|
||||
```
|
||||
|
||||
### Perplexity for Migration Best Practices
|
||||
**Ahrefs MCP (per-URL traffic + backlink baseline):**
|
||||
```
|
||||
mcp__perplexity__search: Research migration best practices and common pitfalls
|
||||
mcp__ahrefs__site-explorer-top-pages(target="<site>", country="us", limit=500)
|
||||
mcp__ahrefs__site-explorer-pages-by-backlinks(target="<site>", limit=500)
|
||||
mcp__ahrefs__site-explorer-metrics(target="<site>")
|
||||
mcp__ahrefs__site-explorer-metrics-history(target="<site>", history="weekly")
|
||||
mcp__ahrefs__site-explorer-pages-history(target="<site>")
|
||||
```
|
||||
|
||||
**Semrush MCP (per-URL organic baseline):**
|
||||
```
|
||||
mcp__semrush__organic_research(query="<site>", database="us")
|
||||
mcp__semrush__url_research(query="<specific URL>", database="us")
|
||||
mcp__semrush__overview_research(query="<site>", database="us")
|
||||
```
|
||||
|
||||
**First-party baseline (GSC + GA4):**
|
||||
```bash
|
||||
our research search-console pages --site sc-domain:<site> --days 90
|
||||
our research search-console combined --site sc-domain:<site> --days 90
|
||||
our research ga4 traffic --property-id <id>
|
||||
our research ga4 landing-pages --property-id <id>
|
||||
```
|
||||
|
||||
**Migration best practices (Perplexity):**
|
||||
```
|
||||
mcp__perplexity__search(query="SEO migration <type> best practices")
|
||||
```
|
||||
|
||||
Always record the chosen data source(s) per metric in the **planning report's Baseline** section and re-use the same sources in **post-migration monitoring** so the diff is meaningful.
|
||||
|
||||
## Workflow
|
||||
|
||||
### Pre-Migration Planning
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
name: seo-migration-planner
|
||||
description: |
|
||||
SEO site migration planning and monitoring. Triggers: site migration, domain move, redirect mapping, platform migration, URL restructuring, 사이트 이전.
|
||||
|
||||
# Allowed tools list every backend the skill can pull migration-baseline / monitoring data from.
|
||||
# Per-task selection happens in SKILL.md > Data Source Selection — NOT here.
|
||||
allowed-tools:
|
||||
- mcp__ahrefs__*
|
||||
- mcp__firecrawl__*
|
||||
- mcp__ourseo__* # default — crawl_website, audit_page, check_index
|
||||
- mcp__firecrawl__* # large-scale URL inventory + redirect verification
|
||||
- mcp__ahrefs__* # site-explorer-* for traffic-value + backlink baseline
|
||||
- mcp__claude_ai_Ahrefs__* # Ahrefs (Claude.ai namespace)
|
||||
- mcp__semrush__* # organic_research, overview_research baseline
|
||||
- mcp__dfs-mcp__* # DataForSEO MCP fallback
|
||||
- Bash # `our` CLI full surface
|
||||
- mcp__notion__*
|
||||
- mcp__perplexity__*
|
||||
- mcp__perplexity__* # research migration best practices
|
||||
- WebSearch
|
||||
- WebFetch
|
||||
|
||||
54
custom-skills/33-seo-migration-planner/desktop/tools/gsc.md
Normal file
54
custom-skills/33-seo-migration-planner/desktop/tools/gsc.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Google Search Console
|
||||
|
||||
**Required** for migration baseline + post-launch monitoring. GSC is the only source for first-party impressions / clicks per URL pre-migration — modelled estimates from Semrush/Ahrefs cannot substitute.
|
||||
|
||||
## CLI commands
|
||||
|
||||
```bash
|
||||
# Pre-migration baseline (PULL THIS BEFORE THE MIGRATION DATE)
|
||||
our research search-console pages --site sc-domain:<old-domain> --days 90
|
||||
our research search-console combined --site sc-domain:<old-domain> --days 90
|
||||
our research search-console queries --site sc-domain:<old-domain> --days 90
|
||||
|
||||
# Post-migration (after new domain is verified in GSC)
|
||||
our research search-console pages --site sc-domain:<new-domain> --days 28
|
||||
our research search-console combined --site sc-domain:<new-domain> --days 28
|
||||
```
|
||||
|
||||
`sc-domain:` prefix for Domain-verified properties; URL-prefix uses plain URL.
|
||||
|
||||
## Baseline checklist
|
||||
|
||||
Pre-migration, capture at minimum:
|
||||
|
||||
| File | Source | Window |
|
||||
|---|---|---|
|
||||
| `gsc-pages-90d.json` | `our research search-console pages` | 90 days pre-migration |
|
||||
| `gsc-combined-90d.json` | `our research search-console combined` | 90 days pre-migration |
|
||||
| `gsc-queries-90d.json` | `our research search-console queries` | 90 days pre-migration |
|
||||
|
||||
Store these alongside the OurSEO crawl baseline in the migration workspace.
|
||||
|
||||
## Post-launch monitoring
|
||||
|
||||
1. Wait for the new domain to verify in GSC (~24h after DNS propagation + sitemap submission).
|
||||
2. Pull `pages` and `combined` on the new domain at +7d, +14d, +28d, +60d, +90d.
|
||||
3. Diff against the baseline: which URLs lost impressions? Which queries dropped?
|
||||
4. Cross-reference with OurSEO redirect verification — broken redirects are the most common cause of impression loss.
|
||||
|
||||
## Ahrefs GSC alternates
|
||||
|
||||
If both old and new domains are connected as Ahrefs projects:
|
||||
|
||||
```
|
||||
mcp__ahrefs__gsc-pages(project_id="<id>")
|
||||
mcp__ahrefs__gsc-pages-history(project_id="<id>")
|
||||
mcp__ahrefs__gsc-performance-history(project_id="<id>")
|
||||
```
|
||||
|
||||
## Not for this skill when
|
||||
|
||||
- **Pre-migration baseline before GSC verification** of the property — not possible. Get the domain verified well in advance.
|
||||
- **Competitor migration analysis** — GSC is single-site.
|
||||
|
||||
Gotcha: `our-claude-skills/custom-skills/15-seo-search-console/code/gotcha/gsc-cli-integration.md`.
|
||||
@@ -0,0 +1,54 @@
|
||||
# OurSEO Agent (CLI + MCP)
|
||||
|
||||
**Default** for URL inventory, on-page crawl, technical audit, and index-status baseline. Distributed crawler scales to large catalogs.
|
||||
|
||||
## CLI commands (Claude Code)
|
||||
|
||||
```bash
|
||||
# URL inventory crawl (pre-migration)
|
||||
our collect crawl https://<old-site> --max-pages 5000
|
||||
our collect distributed https://<old-site> --workers 8 --max-pages 50000
|
||||
|
||||
# Technical audit (catches redirect chains, canonical issues that affect migration)
|
||||
our audit tech https://<old-site>
|
||||
|
||||
# Index baseline
|
||||
our research google index --domain <old-site>
|
||||
|
||||
# Schema baseline (preserve schema across migration)
|
||||
our analyze mysql-batch --session <id> --export missing-schema --format excel
|
||||
|
||||
# Post-migration: re-run on new domain and diff
|
||||
our collect crawl https://<new-site> --max-pages 5000
|
||||
our research google index --domain <new-site>
|
||||
our audit tech https://<new-site>
|
||||
```
|
||||
|
||||
## MCP tools (Claude Desktop)
|
||||
|
||||
```
|
||||
mcp__ourseo__crawl_website(url="<site>", max_pages=5000)
|
||||
mcp__ourseo__check_index(domain="<site>")
|
||||
mcp__ourseo__audit_page(url="<url>", audit_type="tech")
|
||||
```
|
||||
|
||||
## Strengths for this skill
|
||||
|
||||
- **Distributed crawl** with URL-hash partitioning — handles catalogs >50K URLs.
|
||||
- **Resume support** (`--resume`) — critical for multi-day baseline captures.
|
||||
- **MySQL workspace** stores baseline crawl; post-migration diff is a SQL query against the same DB.
|
||||
- **Index status spot-check** via `check_index` — finds URLs Google still has indexed from the old domain.
|
||||
|
||||
## Pair with Firecrawl
|
||||
|
||||
Firecrawl (`mcp__firecrawl__*`) is already in this skill's `allowed-tools`:
|
||||
|
||||
- Use **OurSEO** as the default crawler for most sites.
|
||||
- Switch to **Firecrawl** when the target is JS-heavy (React/Vue/Angular SPA) and OurSEO's HTTP-level crawler under-reports URLs.
|
||||
- Use Firecrawl `firecrawl_scrape` for per-URL **redirect verification** post-launch (cheaper than re-crawling the whole site).
|
||||
|
||||
## Not for this skill when
|
||||
|
||||
- **Per-URL traffic value for risk scoring** — Ahrefs `site-explorer-top-pages` / Semrush `url_research`.
|
||||
- **First-party impression baseline** — GSC `pages` (REQUIRED for accurate post-migration diff).
|
||||
- **GA4 traffic baseline** — `our research ga4 *` (covered in OurSEO CLI but distinct from crawl path).
|
||||
@@ -0,0 +1,39 @@
|
||||
# Semrush MCP
|
||||
|
||||
For migrations, Semrush contributes **per-URL organic baseline**, **traffic value baseline**, and **cross-database comparison** when the migration involves a market change.
|
||||
|
||||
Call pattern: discovery → `get_report_schema` → `execute_report`.
|
||||
|
||||
## Key reports
|
||||
|
||||
- `organic_research` — full organic keyword list for the domain (baseline)
|
||||
- `url_research` — per-URL organic data (KPI for redirect risk scoring)
|
||||
- `overview_research` — site-level traffic + visibility baseline
|
||||
- `trends_research` — period-over-period traffic deltas (post-launch monitoring)
|
||||
|
||||
## Example
|
||||
|
||||
```
|
||||
# Pre-migration baseline
|
||||
mcp__semrush__organic_research(query="<old-domain>", database="us")
|
||||
mcp__semrush__url_research(query="<specific old URL>", database="us")
|
||||
mcp__semrush__overview_research(query="<old-domain>", database="us")
|
||||
|
||||
# Post-migration monitoring
|
||||
mcp__semrush__trends_research(query="<new-domain>", database="us")
|
||||
```
|
||||
|
||||
Korean market: `database="kr"`.
|
||||
|
||||
## Strengths for this skill
|
||||
|
||||
- **`url_research`** gives per-URL organic data — useful input for redirect risk scoring alongside Ahrefs traffic value.
|
||||
- **`trends_research`** simplifies post-migration period-over-period delta.
|
||||
- Cross-database comparison helps validate visibility recovery across markets.
|
||||
|
||||
## Not for this skill when
|
||||
|
||||
- **URL inventory** — OurSEO `crawl_website` / Firecrawl `firecrawl_crawl`.
|
||||
- **Backlink baseline** for risk scoring — Ahrefs `site-explorer-pages-by-backlinks`.
|
||||
- **First-party impression baseline** — GSC `pages` / `combined` reports.
|
||||
- **Redirect health checking post-launch** — Firecrawl `firecrawl_scrape` or WebFetch.
|
||||
Reference in New Issue
Block a user