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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user