feat(skills): bulk-add root SKILL.md to 61 skills (native Agent Skills loadability)
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>
This commit is contained in:
195
custom-skills/34-seo-reporting-dashboard/SKILL.md
Normal file
195
custom-skills/34-seo-reporting-dashboard/SKILL.md
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
name: 34-seo-reporting-dashboard
|
||||
description: |
|
||||
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
|
||||
|
||||
1. **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
|
||||
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
|
||||
|
||||
## 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:
|
||||
|
||||
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)
|
||||
```
|
||||
|
||||
### 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__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
|
||||
1. Accept target domain and optional date range
|
||||
2. Query Notion SEO Audit Log for all past audit entries for the domain
|
||||
3. Optionally pull fresh metrics from our-seo-agent CLI or provide pre-fetched JSON via --input
|
||||
4. Normalize all skill outputs into unified format
|
||||
5. Compute cross-skill health score with weighted category dimensions
|
||||
6. Identify top issues (sorted by severity) and top wins across all audits
|
||||
7. Build audit history timeline
|
||||
8. 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)
|
||||
9. Save HTML file and optionally push summary to Notion
|
||||
|
||||
### Executive Reporting
|
||||
1. Load aggregated report data (from dashboard generation or JSON file)
|
||||
2. Select audience level: C-level, marketing, or technical
|
||||
3. Generate Korean-language narrative with:
|
||||
- Health score overview and trend
|
||||
- Category highlights (strengths and weaknesses)
|
||||
- Skills coverage summary
|
||||
- Audience-specific business impact analysis
|
||||
4. Format key wins and concerns with severity and category labels
|
||||
5. Generate prioritized action items ranked by impact
|
||||
6. Render as markdown document
|
||||
7. 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)
|
||||
```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
|
||||
Reference in New Issue
Block a user