---
description: "Comprehensive SEO audit: technical, on-page, schema, CWV, local, and GSC in one unified report"
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task
---

# Comprehensive SEO Audit

## Overview

Orchestrates a unified 6-stage SEO audit by calling sub-skill scripts sequentially, merging results, computing a weighted health score (0-100), and optionally pushing a summary to Notion.

## Usage

```bash
/seo-comprehensive-audit https://example.com
/seo-comprehensive-audit https://example.com --skip-local --skip-gsc
/seo-comprehensive-audit https://example.com --json
/seo-comprehensive-audit https://example.com --skip-notion
```

## Pipeline Stages

| # | Stage | Sub-Skill | Skip Flag |
|---|-------|-----------|-----------|
| 1 | Technical SEO | `12-seo-technical-audit` | — |
| 2 | On-Page SEO | `13-seo-on-page-audit` | — |
| 3 | Core Web Vitals | `14-seo-core-web-vitals` | — |
| 4 | Schema Validation | `16-seo-schema-validator` | — |
| 5 | Local SEO | `18-seo-local-audit` | `--skip-local` |
| 6 | Search Console | `15-seo-search-console` | `--skip-gsc` |

## Execution

### Option A: Python Orchestrator (Recommended)

```bash
# Find repo root
REPO_ROOT=$(git -C /path/to/our-claude-skills rev-parse --show-toplevel)
SKILLS="$REPO_ROOT/custom-skills"

# Run orchestrator
python "$SKILLS/11-seo-comprehensive-audit/code/scripts/seo_audit_orchestrator.py" \
  --url https://example.com \
  --skills-dir "$SKILLS"
```

### Option B: Manual Stage-by-Stage

Run each sub-skill script with `--json` flag, then synthesize:

```bash
# Stage 1: Technical SEO
python "$SKILLS/12-seo-technical-audit/code/scripts/robots_checker.py" --url $URL --json
python "$SKILLS/12-seo-technical-audit/code/scripts/sitemap_validator.py" --url "$URL/sitemap.xml" --json

# Stage 2: On-Page SEO
python "$SKILLS/13-seo-on-page-audit/code/scripts/page_analyzer.py" --url $URL --json

# Stage 3: Core Web Vitals
python "$SKILLS/14-seo-core-web-vitals/code/scripts/pagespeed_client.py" --url $URL --json

# Stage 4: Schema Validation
python "$SKILLS/16-seo-schema-validator/code/scripts/schema_validator.py" --url $URL --json

# Stage 5: Local SEO (see detailed instructions below)
# Stage 6: Search Console (requires GSC API credentials)
```

### Stage 5: Local SEO — Detailed Instructions

Stage 5 is prompt-driven (no script). Follow this sequence:

1. **Extract Business Identity from website (MANDATORY FIRST)**
   - WebFetch the homepage and parse JSON-LD `<script type="application/ld+json">` tags
   - Extract from `Organization`, `Hospital`, or `LocalBusiness` schema: Korean name, English name, address, telephone
   - Check `sameAs` array for GBP, Naver Place, Kakao Map URLs

2. **Check website for listing links**
   - Scrape footer, contact page, about page for links matching:
     - GBP: `maps.app.goo.gl/*`, `google.com/maps/place/*`, `g.page/*`
     - Naver Place: `naver.me/*`, `map.naver.com/*/place/*`, `m.place.naver.com/*`
     - Kakao Map: `place.map.kakao.com/*`, `kko.to/*`
   - Check embedded iframes for Google Maps Place IDs or Naver Map embeds

3. **Layered search fallback (if links not found on website)**
   - GBP: Search `"[Korean Name]" "[district]" Google Maps`, then `"[phone]" site:google.com/maps`
   - Naver: Search `"[Korean Name]" site:map.naver.com`, then `"[Korean Name]" 네이버 지도 [district]`
   - Kakao: Search `"[Korean Name]" site:place.map.kakao.com`

4. **Follow `18-seo-local-audit/code/CLAUDE.md` workflow** for the full audit (Steps 2-7)

5. **Important language**: Distinguish **"not discoverable via web search"** from **"does not exist."** GBP and Naver Map are JS-rendered; WebFetch cannot extract their listing data. Absence in search results does not confirm absence of the listing.

6. **Korean market priorities**: GBP and Naver Smart Place are both Critical. Kakao Map is High. US-centric directories (Yelp, Yellow Pages) are Low priority for Korean businesses.

## Health Score (Weighted 0-100)

| Category | Weight |
|----------|--------|
| Technical SEO | 20% |
| On-Page SEO | 20% |
| Core Web Vitals | 25% |
| Schema | 15% |
| Local SEO | 10% |
| Search Console | 10% |

Scores per category are normalized to 0-100. Skipped stages redistribute their weight proportionally.

## Output Format

```json
{
  "url": "https://example.com",
  "audit_date": "2025-01-15",
  "health_score": 72,
  "grade": "B",
  "stages": {
    "technical": {"score": 85, "issues": [], "weight": 0.20},
    "on_page": {"score": 70, "issues": [], "weight": 0.20},
    "core_web_vitals": {"score": 60, "issues": [], "weight": 0.25},
    "schema": {"score": 80, "issues": [], "weight": 0.15},
    "local_seo": {"score": 65, "issues": [], "weight": 0.10},
    "search_console": {"score": 75, "issues": [], "weight": 0.10}
  },
  "critical_issues": [],
  "recommendations": []
}
```

## Grading Scale

| Score | Grade | Status |
|-------|-------|--------|
| 90-100 | A | Excellent |
| 80-89 | B+ | Good |
| 70-79 | B | Above Average |
| 60-69 | C | Needs Improvement |
| 40-59 | D | Poor |
| 0-39 | F | Critical |

## Notion Output (Required)

**IMPORTANT**: Summary report MUST be saved to the OurDigital SEO Audit Log database.

### Database Configuration

| Field | Value |
|-------|-------|
| Database ID | `2c8581e5-8a1e-8035-880b-e38cefc2f3ef` |

### Summary Page Title

`종합 SEO 감사 보고서 - [domain] - YYYY-MM-DD`

### Required Properties

| Property | Type | Value |
|----------|------|-------|
| Issue | Title | `종합 SEO 감사 보고서 - [domain] - YYYY-MM-DD` |
| Site | URL | Audited website URL |
| Category | Select | `Comprehensive Audit` |
| Priority | Select | Based on health score (Critical if <40, High if <60, Medium if <80, Low if ≥80) |
| Found Date | Date | Audit date (YYYY-MM-DD) |
| Audit ID | Rich Text | `COMP-YYYYMMDD-001` |

### Individual Issues

Create one Notion page per Critical/High finding with:
- Appropriate Category (Technical SEO, On-page SEO, Performance, Schema/Structured Data, Local SEO)
- Priority matching the finding severity
- Audit ID linking back to the comprehensive audit

### Language Guidelines

- Report content in Korean (한국어)
- Keep technical English terms as-is (e.g., SEO Audit, Core Web Vitals, Schema Markup)
- URLs and code remain unchanged
