---
name: 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
