Add SEO skills 19-28, 31-32 with full Python implementations

12 new skills: Keyword Strategy, SERP Analysis, Position Tracking,
Link Building, Content Strategy, E-Commerce SEO, KPI Framework,
International SEO, AI Visibility, Knowledge Graph, Competitor Intel,
and Crawl Budget. ~20K lines of Python across 25 domain scripts.
Updated skill 11 pipeline table and repo CLAUDE.md.
Enhanced skill 18 local SEO workflow from jamie.clinic audit.

Note: Skill 26 hreflang_validator.py pending (content filter block).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 12:05:59 +09:00
parent 159f7ec3f7
commit a3ff965b87
125 changed files with 25948 additions and 173 deletions

View File

@@ -1,125 +1,239 @@
---
name: seo-local-audit
description: |
Local business SEO auditor for NAP consistency, Google Business Profile, and citations.
Triggers: local SEO, NAP audit, Google Business Profile, GBP optimization, local citations.
Local business SEO auditor for Korean-market businesses. Covers business identity extraction,
NAP consistency, Google Business Profile, Naver Smart Place, Kakao Map, local citations,
and LocalBusiness schema validation.
Triggers: local SEO, NAP audit, Google Business Profile, GBP optimization, local citations,
네이버 스마트플레이스, 카카오맵, 로컬 SEO.
---
# SEO Local Audit
## Purpose
Audit local business SEO: NAP (Name, Address, Phone) consistency, Google Business Profile optimization, local citations, and LocalBusiness schema markup.
Audit local business SEO for Korean-market businesses: business identity extraction, NAP consistency, GBP optimization, Naver Smart Place, Kakao Map, local citations, and LocalBusiness schema markup.
## Core Capabilities
1. **NAP Consistency** - Cross-platform verification
2. **GBP Optimization** - Profile completeness check
3. **Citation Audit** - Directory presence
4. **Schema Validation** - LocalBusiness markup
1. **Business Identity** - Extract official names, address, phone from website schema/content
2. **NAP Consistency** - Cross-platform verification against canonical NAP
3. **GBP Optimization** - Layered discovery + profile completeness audit
4. **Naver Smart Place** - Layered discovery + listing completeness audit
5. **Kakao Map** - Presence verification + NAP check
6. **Citation Audit** - Korean-first directory presence
7. **Schema Validation** - LocalBusiness JSON-LD markup
## MCP Tool Usage
```
mcp__firecrawl__scrape: Extract NAP from website
mcp__perplexity__search: Find citations and directories
mcp__firecrawl__scrape: Extract NAP and schema from website
mcp__perplexity__search: Find citations, GBP, Naver Place listings
mcp__notion__create-page: Save audit findings
```
## Workflow
### 1. Gather Business Info
Collect from client:
- Business name (exact)
- Full address
- Phone number (local preferred)
- Website URL
- GBP listing URL
### Step 0: Business Identity (MANDATORY FIRST STEP)
### 2. Website NAP Check
Scrape website for NAP mentions:
- Header/footer
- Contact page
- About page
- Schema markup
Before any audit, establish the official business identity.
### 3. Citation Discovery
Search for business mentions:
- "[Business Name] [City]"
- Phone number search
- Address search
**Sources (in priority order):**
1. Website schema markup (JSON-LD `Organization`, `Hospital`, `LocalBusiness`) — `name` field is authoritative
2. Contact page / About page
3. Footer (address, phone, social links)
4. User-provided information
### 4. GBP Review
Manual checklist:
- Profile completeness
- Category accuracy
- Photo presence
- Review responses
- Post recency
**Data to collect:**
### 5. Schema Check
Validate LocalBusiness markup presence and accuracy.
| Field | Example |
|-------|---------|
| Official name (Korean) | 제이미성형외과의원 |
| Official name (English) | Jamie Plastic Surgery Clinic |
| Brand/display name | Jamie Clinic |
| Website URL | https://www.jamie.clinic |
| Address (Korean) | 서울특별시 강남구 ... |
| Phone | 02-XXX-XXXX |
| Known GBP URL | (if available) |
| Known Naver Place URL | (if available) |
| Known Kakao Map URL | (if available) |
## GBP Optimization Checklist
Look for these URL patterns in `sameAs`, footer links, or embedded iframes:
- 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/*`
- [ ] Business name matches website
- [ ] Complete address with suite/unit
- [ ] Local phone number (not toll-free)
- [ ] Accurate business hours
- [ ] Primary + secondary categories set
### Step 1: Website NAP Extraction
Scrape header, footer, contact page, about page. Cross-reference with schema markup. Establish the **canonical NAP** baseline.
### Step 2: GBP Verification & Audit
**Layered discovery (try in order, stop when found):**
1. Use provided GBP URL (from Step 0 or user input)
2. Check website for GBP link (footer, contact, schema `sameAs`, embedded Google Maps iframe)
3. Search: `"[Korean Name]" "[City/District]" Google Maps`
4. Search: `"[English Name]" Google Maps [City]`
5. Search: `"[exact phone number]" site:google.com/maps`
**Important**: Google Maps is JS-rendered — scraping tools cannot extract business data. Use search for discovery, verify via search result snippets.
**If found — audit checklist (score /10):**
- [ ] Business name matches canonical NAP
- [ ] Address is complete and accurate
- [ ] Phone number matches
- [ ] Business hours are current
- [ ] Primary + secondary categories appropriate
- [ ] Business description complete
- [ ] 10+ photos uploaded
- [ ] Recent post (within 7 days)
- [ ] Reviews responded to
- [ ] Posts are recent (within 7 days)
- [ ] Reviews are responded to
- [ ] Q&A section is active
## Citation Priority
**If NOT found:** Report as **"not discoverable via web search"** (distinct from "does not exist").
| Platform | Priority |
|----------|----------|
| Google Business Profile | Critical |
| Apple Maps | High |
| Bing Places | High |
| Yelp | High |
| Facebook | Medium |
| Industry directories | Medium |
### Step 3: Naver Smart Place Verification & Audit
**Layered discovery (try in order, stop when found):**
1. Use provided Naver Place URL (from Step 0 or user input)
2. Check website for Naver Place link (footer, contact, schema `sameAs`)
3. Search: `"[Korean Name]" site:map.naver.com`
4. Search: `"[Korean Name]" 네이버 지도 [district]`
5. Search: `"[Korean Name]" 네이버 스마트플레이스`
6. Search: `"[exact phone number]" site:map.naver.com`
**Important**: Naver Map is JS-rendered — scraping tools cannot extract data. Use search for discovery, verify via snippets.
**If found — audit checklist (score /10):**
- [ ] Business name matches canonical NAP
- [ ] Address is complete and accurate
- [ ] Phone number matches
- [ ] Business hours are current
- [ ] Place is "claimed" (owner-managed / 업주 등록)
- [ ] Keywords/tags are set
- [ ] Booking/reservation link present
- [ ] Recent blog reviews linked
- [ ] Photos uploaded and current
- [ ] Menu/service/price information present
**If NOT found:** Report as **"not discoverable via web search"** (not "does not exist" or "not registered").
### Step 4: Kakao Map Verification
**Discovery:**
1. Use provided Kakao Map URL (from Step 0)
2. Check website for Kakao Map link (`place.map.kakao.com/*`, `kko.to/*`)
3. Search: `"[Korean Name]" site:place.map.kakao.com`
4. Search: `"[Korean Name]" 카카오맵 [district]`
**If found:** Verify NAP consistency against canonical NAP.
### Step 5: Citation Discovery
**Korean market platform priorities:**
| Platform | Priority | Market |
|----------|----------|--------|
| Google Business Profile | Critical | Global |
| Naver Smart Place (네이버 스마트플레이스) | Critical | Korea |
| Kakao Map (카카오맵) | High | Korea |
| Industry-specific directories | High | Varies |
| Apple Maps | Medium | Global |
| Bing Places | Low | Global |
**Korean medical/cosmetic industry directories:**
- 강남언니 (Gangnam Unni)
- 바비톡 (Babitalk)
- 성예사 (Sungyesa)
- 굿닥 (Goodoc)
- 똑닥 (Ddocdoc)
- 모두닥 (Modoodoc)
- 하이닥 (HiDoc)
### Step 6: NAP Consistency Report
Cross-reference all sources against canonical NAP.
**Common inconsistency points:**
- Building/landmark names — authoritative source is the **business registration certificate** (사업자등록증)
- Phone format variations (02-XXX-XXXX vs +82-2-XXX-XXXX)
- Address format (road-name vs lot-number / 도로명 vs 지번)
- Korean vs English name spelling variations
- Suite/floor number omissions
### Step 7: LocalBusiness Schema Validation
Validate JSON-LD completeness: @type, name, address, telephone, openingHours, geo (GeoCoordinates), sameAs (GBP, Naver, Kakao, social), url, image.
## Scoring
| Component | Weight | Max Score |
|-----------|--------|-----------|
| Business Identity completeness | 5% | /10 |
| NAP Consistency | 20% | /10 |
| GBP Optimization | 20% | /10 |
| Naver Smart Place | 20% | /10 |
| Kakao Map presence | 10% | /10 |
| Citations (directories) | 10% | /10 |
| LocalBusiness Schema | 15% | /10 |
**Overall Local SEO Score** = weighted average, normalized to /100.
## Output Format
```markdown
## Local SEO Audit: [Business]
### Business Identity
| Field | Value |
|-------|-------|
| Korean Name | ... |
| English Name | ... |
| Address | ... |
| Phone | ... |
### NAP Consistency: X/10
| Source | Name | Address | Phone |
|--------|------|---------|-------|
| Website | ✓/✗ | ✓/✗ | ✓/✗ |
| GBP | ✓/✗ | ✓/✗ | ✓/✗ |
| Source | Name | Address | Phone | Status |
|--------|------|---------|-------|--------|
| Website | OK/Issue | OK/Issue | OK/Issue | Match/Mismatch |
| GBP | OK/Issue | OK/Issue | OK/Issue | Match/Mismatch |
| Naver Place | OK/Issue | OK/Issue | OK/Issue | Match/Mismatch |
| Kakao Map | OK/Issue | OK/Issue | OK/Issue | Match/Mismatch |
### GBP Score: X/10
[Checklist results]
### Citations Found: X
- Consistent: X
- Inconsistent: X
### Naver Smart Place: X/10
[Checklist results]
### LocalBusiness Schema
### Kakao Map: X/10
[Status + NAP check]
### Citations: X/10
| Platform | Found | NAP Match |
|----------|-------|-----------|
| ... | | |
### LocalBusiness Schema: X/10
- Present: Yes/No
- Valid: Yes/No
- Missing fields: [list]
### Overall Score: XX/100 (Grade)
### Priority Actions
1. [Fix recommendations]
1. [Recommendations]
```
## Limitations
## Notes
- GBP data requires manual access
- Citation discovery limited to searchable sources
- Cannot update external directories
- GBP and Naver Map are JS-rendered — scraping tools cannot extract listing data. Always use search for discovery.
- "Not discoverable via web search" != "does not exist." Always use this precise language.
- For Korean businesses, Naver Smart Place is as important as GBP (often more so for domestic traffic).
## Notion Output (Required)
All audit reports MUST be saved to OurDigital SEO Audit Log:
- **Database ID**: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef`
- **Properties**: Issue (title), Site (url), Category, Priority, Found Date, Audit ID
- **Properties**: Issue (title), Site (url), Category (Local SEO), Priority, Found Date, Audit ID
- **Language**: Korean with English technical terms
- **Audit ID Format**: [TYPE]-YYYYMMDD-NNN
- **Audit ID Format**: LOCAL-YYYYMMDD-NNN