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

@@ -18,25 +18,74 @@ Audit existing content performance, identify topic gaps vs competitors, map topi
4. **Editorial Calendar** - Prioritized content creation schedule
5. **Korean Content Patterns** - Naver Blog style, 후기, 추천 format analysis
## MCP Tool Usage
## Data Source Selection
### SEO Data
This skill can pull content + keyword + traffic data from multiple backends. **Pick one backend per data type per task** — content strategy spans multiple data classes, so you'll often combine 2 backends (e.g., one for keyword discovery + one for on-page inventory).
| Backend | Best for | Notes |
|---|---|---|
| **Semrush MCP** (`mcp__semrush__*`) | **Default** for organic content discovery, keyword expansion, top pages by traffic | `organic_research`, `keyword_research`, `overview_research``get_report_schema``execute_report`. |
| **Ahrefs MCP** (`mcp__ahrefs__*`) | Top-pages-by-traffic for competitor sites, content-decay candidates, Korean platform refdomains | `site-explorer-top-pages`, `site-explorer-pages-history`, `keywords-explorer-*`, `gsc-pages` (first-party). |
| **OurSEO MCP** (`mcp__ourseo__*`) | **On-page content inventory** — what the target site itself publishes | `crawl_website` for content URLs + titles + H1s; `find_similar_pages` for topic clustering. Pair with a keyword backend for performance data. |
| **OurSEO CLI** (`our keywords *`, `our serp *`) | DataForSEO under the hood for Korean batch keyword + competitor pulls | Claude Code only (Bash). Best for `--location 2410` Korean content gap work. |
| **GSC** (via `our research search-console` or Ahrefs `gsc-*`) | **Cannibalization detection** — query × page where multiple URLs split impressions; first-party content performance | Only first-party source — required for accurate decay detection on the target site. |
| **DataForSEO MCP** (`mcp__dfs-mcp__*`) | Fallback when `our` CLI isn't running | Same data as `our keywords *` / `our serp *`. |
### 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. **Task is content decay / cannibalization on the target site** → use **GSC** (first-party impression data is required).
4. **Task is on-page content inventory** → use **OurSEO crawl_website**.
5. **Default for keyword + competitor pulls**: Semrush MCP (English markets); OurSEO CLI (`--location 2410`) for Korean markets.
6. **Still ambiguous + non-trivial** → ask once via `AskUserQuestion`.
### Backend call patterns
**Semrush MCP (default keyword/content discovery):**
```
our-seo-agent CLI: Primary content/traffic data source (future); use --input for pre-fetched JSON
WebSearch / WebFetch: Supplementary content data
mcp__semrush__organic_research(query="<domain>", database="us")
mcp__semrush__keyword_research(query="<seed>", database="us")
mcp__semrush__get_report_schema(report_id="...")
mcp__semrush__execute_report(report_id="...", params={...})
```
### WebSearch for Content Research
**Ahrefs MCP (top pages by traffic, decay candidates):**
```
WebSearch: Research content topics and competitor strategies
WebFetch: Analyze competitor page content and structure
mcp__ahrefs__site-explorer-top-pages(target="<domain>", country="us", limit=100)
mcp__ahrefs__site-explorer-pages-history(target="<domain>", history="monthly")
mcp__ahrefs__keywords-explorer-overview(keyword="<seed>", country="us")
```
### Notion for Report Storage
**OurSEO MCP (on-page content inventory):**
```
notion-create-pages: Save audit reports to SEO Audit Log
mcp__ourseo__crawl_website(url="<target>", max_pages=200)
mcp__ourseo__find_similar_pages(crawl_path="<path/to/crawl.json>", query="<topic>")
```
**OurSEO CLI (Korean batch):**
```bash
our keywords ideas "<seed>" --location 2410 --limit 50
our keywords for-site <competitor.com> --location 2410 --limit 100
our serp ranked-keywords <domain> --location 2410 --limit 100
```
**GSC (cannibalization + decay):**
```bash
our research search-console combined --site sc-domain:<domain> --days 90
# Group by query; flag queries where multiple pages share impressions.
```
### Common parameters
| Concept | Semrush | Ahrefs | DataForSEO / `our` CLI |
|---|---|---|---|
| Korean market | `database="kr"` | `country="kr"` | `--location 2410` |
| US market | `database="us"` | `country="us"` | `--location 2840` |
| Japan | `database="jp"` | `country="jp"` | `--location 2392` |
Always record the chosen data source(s) in the report **Overview** so future audits can compare like-for-like.
## Workflow
### 1. Content Audit