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>
9.9 KiB
CLAUDE.md
Overview
Local SEO auditor for Korean-market businesses with physical locations. Covers business identity extraction, GBP optimization, Naver Smart Place, Kakao Map, NAP consistency, local citations, and LocalBusiness schema validation.
Workflow
Step 0: Business Identity (MANDATORY FIRST STEP)
Before any audit work, establish the official business identity.
Sources (in priority order):
- Website schema markup (JSON-LD
Organization,Hospital,LocalBusiness) — thenamefield is authoritative - Contact page / About page
- Footer (address, phone, social links)
- User-provided information (known GBP URL, Naver Place URL, etc.)
Data to collect:
| 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) |
How to extract:
WebFetch homepage → parse JSON-LD script tags → extract name, address, telephone, sameAs
WebFetch /contact or /about → extract NAP from page content
Check footer for social links, map embeds, place listing URLs
Look specifically 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/*
Step 1: Website NAP Extraction
Scrape header, footer, contact page, about page for NAP mentions. Cross-reference with schema markup. Establish the canonical NAP baseline (the single source of truth for this audit).
Step 2: GBP Verification & Audit
Layered discovery (try in order, stop when found):
- Use provided GBP URL (from Step 0 or user input)
- Check website for GBP link (footer, contact page, schema
sameAs, embedded Google Maps iframe with Place ID) - WebSearch:
"[Korean Name]" "[City/District]" Google Maps - WebSearch:
"[English Name]" Google Maps [City] - WebSearch:
"[exact phone number]" site:google.com/maps
Important: Google Maps is JS-rendered — WebFetch cannot extract business data from the listing page itself. Use WebSearch to find the listing URL, then verify details 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 are appropriate
- Business description is complete
- 10+ photos uploaded (exterior, interior, products/services)
- Posts are recent (within 7 days)
- Reviews are responded to
- Q&A section is active
If NOT found after all attempts: Report as "not discoverable via web search" — this is distinct from "does not exist." The listing may exist but be unfindable through non-JS search methods.
Step 3: Naver Smart Place Verification & Audit
Layered discovery (try in order, stop when found):
- Use provided Naver Place URL (from Step 0 or user input)
- Check website for Naver Place link (footer, contact page, schema
sameAs,naver.me/*ormap.naver.com/*/place/*patterns) - WebSearch:
"[Korean Name]" site:map.naver.com - WebSearch:
"[Korean Name]" 네이버 지도 [district] - WebSearch:
"[Korean Name]" 네이버 스마트플레이스 - WebSearch:
"[exact phone number]" site:map.naver.com
Important: Naver Map is JS-rendered — WebFetch cannot extract data from the listing page. Use WebSearch 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
- 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 after all attempts: Report as "not discoverable via web search" (not "does not exist" or "not registered").
Step 4: Kakao Map Verification
Discovery:
- Use provided Kakao Map URL (from Step 0)
- Check website for Kakao Map link (
place.map.kakao.com/*,kko.to/*) - WebSearch:
"[Korean Name]" site:place.map.kakao.com - WebSearch:
"[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)
Discovery methods:
- Phone number search across platforms
- Korean business name + district search
- English business name search
- Address search
Step 6: NAP Consistency Report
Cross-reference all discovered sources against the canonical NAP from Step 1.
Common inconsistency points to check:
- Building/landmark names (e.g., "EHL빌딩" vs "엔와이빌딩") — the authoritative source is the business registration certificate (사업자등록증), not the website alone
- Phone format variations (02-XXX-XXXX vs +82-2-XXX-XXXX vs 02XXXXXXX)
- 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 (LocalBusiness, Hospital, or appropriate subtype)
- name (Korean and/or English)
- address (PostalAddress with Korean format)
- telephone
- openingHours / openingHoursSpecification
- geo (GeoCoordinates — latitude, longitude)
- sameAs (should include GBP, Naver Place, Kakao Map, social profiles)
- url
- image
Use schema generator skill (17) for creating/fixing markup.
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
## Local SEO Audit: [Business Name]
**Date**: YYYY-MM-DD
**Website**: [URL]
### Business Identity
| Field | Value |
|-------|-------|
| Korean Name | ... |
| English Name | ... |
| Brand Name | ... |
| Address | ... |
| Phone | ... |
### NAP Consistency: X/10
| 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 Optimization: X/10
- [x] Completed items
- [ ] Missing items
**GBP URL**: [URL or "not discoverable"]
### Naver Smart Place: X/10
- [x] Completed items
- [ ] Missing items
**Naver Place URL**: [URL or "not discoverable"]
### Kakao Map: X/10
**Status**: Found/Not discoverable
**Kakao Map URL**: [URL or "not discoverable"]
### Citations: X/10
| Platform | Found | NAP Match |
|----------|-------|-----------|
| 강남언니 | Yes/No | OK/Issue |
| ... | | |
### LocalBusiness Schema: X/10
- Present: Yes/No
- Valid: Yes/No
- Missing fields: [list]
### Overall Score: XX/100 (Grade)
### Priority Actions
1. [Highest impact recommendation]
2. ...
Common Issues
| Issue | Impact | Fix |
|---|---|---|
| NAP inconsistency | High | Update all directories to match canonical NAP |
| Missing Naver Smart Place | Critical | Register and claim via smartplace.naver.com |
| Unclaimed Naver Place | High | Claim ownership via 네이버 스마트플레이스 |
| Missing GBP listing | Critical | Create via business.google.com |
| Building name mismatch | Medium | Align to business registration certificate |
| No LocalBusiness schema | Medium | Add JSON-LD markup with sameAs links |
| Missing GeoCoordinates | Medium | Add lat/lng to schema |
| No sameAs in schema | Medium | Add GBP, Naver, Kakao, social URLs |
Notes
- GBP and Naver Map are JS-rendered — WebFetch cannot extract listing data directly. Always use WebSearch 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).
- Citation discovery is limited to publicly searchable data.
Notion Output (Required)
IMPORTANT: All audit reports MUST be saved to the OurDigital SEO Audit Log database.
Database Configuration
| Field | Value |
|---|---|
| Database ID | 2c8581e5-8a1e-8035-880b-e38cefc2f3ef |
| URL | https://www.notion.so/dintelligence/2c8581e58a1e8035880be38cefc2f3ef |
Required Properties
| Property | Type | Description |
|---|---|---|
| Issue | Title | Report title (Korean + date) |
| Site | URL | Audited website URL |
| Category | Select | Local SEO |
| Priority | Select | Critical, High, Medium, Low |
| Found Date | Date | Audit date (YYYY-MM-DD) |
| Audit ID | Rich Text | Format: LOCAL-YYYYMMDD-NNN |
Language Guidelines
- Report content in Korean (한국어)
- Keep technical English terms as-is (e.g., SEO Audit, GBP, NAP, Schema Markup)
- URLs and code remain unchanged