Run the additive migration pass from SKILL-MIGRATION-GUIDE: generate a root SKILL.md for every skill that lacked one, copied from its desktop/SKILL.md (or code/SKILL.md), with name set to the directory name and description + body preserved verbatim. - scripts/migrate_skill_root.py: the reusable, non-destructive migrator (dry-run default). - 61 new root SKILL.md (desktop source for most; code/SKILL.md for 61/62/92). - Untouched: 16/17/95 (already had root); desktop/ and code/ packaging left intact. - All 64 root SKILL.md validate: frontmatter <=1024, kebab name, description present. Still MANUAL (no SKILL.md source — commands/README only), need hand-authored root SKILL.md: 81-mac-optimizer, 90-reference-curator, 91-multi-agent-guide, 94-dintel-bootstrap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.0 KiB
name, description
| name | description |
|---|---|
| 34-seo-reporting-dashboard | SEO reporting dashboard and executive report generation. Aggregates data from all SEO skills into stakeholder-ready reports and interactive HTML dashboards. Triggers: SEO report, SEO dashboard, executive summary, 보고서, 대시보드, performance report, 종합 보고서. |
SEO Reporting Dashboard
Purpose
Aggregate outputs from all SEO skills (11-33) into stakeholder-ready executive reports with interactive HTML dashboards, trend analysis, and Korean-language summaries. This is the PRESENTATION LAYER that sits on top of skill 25 (KPI Framework) and all other skill outputs, providing a unified view of SEO performance across all audit dimensions.
Core Capabilities
- Report Aggregation - Collect and normalize outputs from all SEO skills (11-33) into a unified data structure with cross-skill health scoring and priority issue identification
- Interactive Dashboard - Generate self-contained HTML dashboards with Chart.js visualizations including health gauge, traffic trends, keyword distribution, issue breakdown, and competitor radar
- Executive Reporting - Korean-language executive summary generation with audience-specific detail levels (C-level, marketing team, technical team) and prioritized action items
Data Source Selection
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:
- Aggregating prior audits → query Notion SEO Audit Log for stored skill outputs; trust the source each skill recorded.
- 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
- 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.
- Fresh-pull mode: apply each underlying skill's Data Source Selection. Don't re-decide here — defer to the source skill.
- 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.
- 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:
### 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)
Aggregation flow
- Identify scope: target domain + date range + audience (C-level / marketing / technical).
- Query Notion SEO Audit Log for the domain — pull all past audits via
mcp__notion__*. - 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.
- Normalize into the unified report structure.
- Compute health score using KPI framework weights (see skill 25).
- Render HTML dashboard + Korean executive markdown.
- Push final report back to Notion + optionally Slack.
Backend call patterns
Notion (prior audit aggregation):
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>")
Fresh pulls — see each skill's Data Source Selection (11-33).
Perplexity (industry 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
- Accept target domain and optional date range
- Query Notion SEO Audit Log for all past audit entries for the domain
- Optionally pull fresh metrics from our-seo-agent CLI or provide pre-fetched JSON via --input
- Normalize all skill outputs into unified format
- Compute cross-skill health score with weighted category dimensions
- Identify top issues (sorted by severity) and top wins across all audits
- Build audit history timeline
- Generate HTML dashboard with Chart.js charts:
- Health score gauge (doughnut)
- Category scores horizontal bar chart
- Health score timeline line chart
- Issue distribution pie chart
- Competitor radar chart (if competitor data available)
- Save HTML file and optionally push summary to Notion
Executive Reporting
- Load aggregated report data (from dashboard generation or JSON file)
- Select audience level: C-level, marketing, or technical
- Generate Korean-language narrative with:
- Health score overview and trend
- Category highlights (strengths and weaknesses)
- Skills coverage summary
- Audience-specific business impact analysis
- Format key wins and concerns with severity and category labels
- Generate prioritized action items ranked by impact
- Render as markdown document
- Optionally push to Notion SEO Audit Log
Output Format
HTML Dashboard
Self-contained HTML file with:
- Responsive CSS grid layout
- Chart.js visualizations from CDN
- Health score gauge
- Category bar chart
- Timeline line chart
- Issues pie chart
- Competitor radar chart
- Issues and wins lists
- Audit history table
Executive Report (Markdown)
# SEO 성과 보고서 - [domain]
**대상**: 경영진 / 마케팅팀 / 기술팀
**도메인**: [domain]
**보고 일자**: [date]
## Health Score
| 지표 | 값 |
|------|-----|
| Overall Score | **[score]/100** |
| 등급 | [grade_kr] |
| 추세 | [trend_kr] |
## 종합 분석
[Korean narrative...]
## 주요 성과
- [wins...]
## 주요 이슈
- [concerns...]
## 권장 조치 사항
1. [recommendations...]
Audience Configurations
| Audience | Detail | Issues | Recommendations | Technical Details |
|---|---|---|---|---|
| C-level (경영진) | Summary | Top 5 | Top 3 | No |
| Marketing (마케팅팀) | Moderate | Top 10 | Top 5 | No |
| Technical (기술팀) | Detailed | Top 20 | Top 10 | Yes |
Limitations
- Aggregation depends on availability of JSON outputs from other skills
- Notion query for past audits requires MCP tools (placeholder in scripts)
- Competitor radar chart only renders if competitor intel (skill 31) data is present
- HTML dashboard requires internet access for Chart.js CDN
Notion Output (Required)
All reports MUST be saved to OurDigital SEO Audit Log:
- Database ID:
2c8581e5-8a1e-8035-880b-e38cefc2f3ef - Properties: Issue (title), Site (url), Category ("SEO Dashboard"), Priority, Found Date, Audit ID
- Language: Korean with English technical terms
- Audit ID Format: DASH-YYYYMMDD-NNN