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:
Andrew Yim
2026-05-14 03:15:32 +09:00
committed by GitHub
parent 1ca84f67ed
commit e527fb4b0f
71 changed files with 2647 additions and 258 deletions

View File

@@ -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