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,84 @@ Aggregate outputs from all SEO skills (11-33) into stakeholder-ready executive r
2. **Interactive Dashboard** - Generate self-contained HTML dashboards with Chart.js visualizations including health gauge, traffic trends, keyword distribution, issue breakdown, and competitor radar
3. **Executive Reporting** - Korean-language executive summary generation with audience-specific detail levels (C-level, marketing team, technical team) and prioritized action items
## MCP Tool Usage
## Data Source Selection
### SEO Data
```
our-seo-agent CLI: Primary data source (future); use --input for pre-fetched JSON
WebSearch / WebFetch: Supplementary live data
This skill is the **presentation layer** — it aggregates outputs from every other SEO skill (11-33). The Data Source Selection therefore happens **per section of the report**, mirroring the per-task defaults in the source skills. Two distinct flows:
1. **Aggregating prior audits** → query Notion SEO Audit Log for stored skill outputs; trust the source each skill recorded.
2. **Pulling fresh metrics** → consult each underlying skill's Data Source Selection and apply the same per-task defaults here.
### Per-section backend defaults
| Report section | Default backend | Source skill | Notes |
|---|---|---|---|
| Health score header | Semrush `overview_research` + OurSEO `audit_page` | 25-kpi-framework | Combines multiple metrics — see KPI framework. |
| Organic traffic trend | Semrush `overview_research` / Ahrefs `site-explorer-metrics-history` | 25, 33 | Pick one and stay consistent across periods. |
| Keyword visibility | Semrush `tracking_research` or Ahrefs `rank-tracker-*` | 21-position-tracking | Use GSC if site is verified for first-party. |
| Backlinks / DR | Ahrefs `site-explorer-domain-rating` + `-backlinks-stats` | 22-link-building | Ahrefs default. |
| Technical health | OurSEO `audit_page` + `audit tech` | 12-seo-technical-audit | OurSEO default. |
| AI visibility / Brand Radar | Ahrefs `brand-radar-*` | 27-ai-visibility | Ahrefs-only. |
| SERP / Naver presence | OurSEO `check_serp` + `our research naver serp` | 20-serp-analysis | Korean override via Naver. |
| Knowledge Graph / Entity | OurSEO `search_knowledge_graph` | 28-knowledge-graph | OurSEO default. |
| First-party clicks/impressions | GSC via `our research search-console` | 15-seo-search-console | First-party — always preferred when available. |
| GA4 traffic + conversions | `our research ga4 *` | n/a | First-party — always preferred when available. |
| GBP local visibility | `our collect gbp *` + `our audit local` | 18-seo-local-audit | First-party — always preferred when available. |
| Competitor benchmarks | Semrush `organic_research` + Ahrefs `site-explorer-organic-competitors` | 31-seo-competitor-intel | Pair both for cross-check. |
| Industry context | Perplexity MCP | n/a | Narrative enrichment only — not metrics. |
### How to pick
1. **Aggregating mode** (querying Notion for prior audits): trust the source recorded in each prior audit. If sources conflict across audits for the same metric, surface the conflict explicitly in the report's "Sources" subsection.
2. **Fresh-pull mode**: apply each underlying skill's Data Source Selection. Don't re-decide here — defer to the source skill.
3. **Consistency over completeness**: if the prior reporting period used Semrush for traffic value, use Semrush this period too. Switching mid-stream breaks every period-over-period chart.
4. **First-party first**: where GSC / GA4 / GBP are available, prefer them over modelled estimates.
### Reporting rule
Every dashboard's **Health Score Overview** AND **executive report Sources subsection** MUST list the data source per section. Example:
```markdown
### Sources
- Organic traffic: Semrush overview_research (database=us)
- Keyword visibility: Ahrefs rank-tracker-overview (project=<id>)
- Backlinks / DR: Ahrefs site-explorer-domain-rating
- Technical health: OurSEO audit_page (latest crawl 2026-05-14)
- AI visibility: Ahrefs brand-radar-sov-overview (brand=<name>)
- GSC: 28-day window, 2026-04-16 → 2026-05-14
- GA4 property: <id>
- GBP profile: <client>
- Industry context: Perplexity (research timestamp 2026-05-14)
```
### Notion for Reading Past Audits and Writing Reports
### Aggregation flow
1. **Identify scope**: target domain + date range + audience (C-level / marketing / technical).
2. **Query Notion SEO Audit Log** for the domain — pull all past audits via `mcp__notion__*`.
3. **For each section needed**, decide aggregate vs. fresh-pull:
- If a prior audit covers it and is recent enough → aggregate from Notion entry.
- If stale or missing → pull fresh from the per-section default backend above.
4. **Normalize** into the unified report structure.
5. **Compute health score** using KPI framework weights (see skill 25).
6. **Render** HTML dashboard + Korean executive markdown.
7. **Push** final report back to Notion + optionally Slack.
### Backend call patterns
**Notion (prior audit aggregation):**
```
mcp__notion__*: Query SEO Audit Log database for past audit entries
mcp__notion__*: Save dashboard reports and executive summaries to Notion
mcp__notion__notion-query-database-view(database_id="2c8581e5-8a1e-8035-880b-e38cefc2f3ef", filters={"Site": "<domain>"})
mcp__notion__notion-fetch(page_id="<audit page id>")
```
### Perplexity for Context
**Fresh pulls** — see each skill's Data Source Selection (11-33).
**Perplexity (industry context):**
```
mcp__perplexity__*: Enrich reports with industry benchmarks and competitor context
mcp__perplexity__search(query="<industry> SEO benchmarks 2026")
```
Reporting is downstream of every other SEO skill — keep the source attribution rigorous or the dashboard becomes meaningless.
## Workflow
### Dashboard Generation