Files
our-claude-skills/custom-skills/18-seo-local-audit/code/CLAUDE.md
Andrew Yim a3ff965b87 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>
2026-02-13 12:05:59 +09:00

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

  1. Website schema markup (JSON-LD Organization, Hospital, LocalBusiness) — the name field is authoritative
  2. Contact page / About page
  3. Footer (address, phone, social links)
  4. 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):

  1. Use provided GBP URL (from Step 0 or user input)
  2. Check website for GBP link (footer, contact page, schema sameAs, embedded Google Maps iframe with Place ID)
  3. WebSearch: "[Korean Name]" "[City/District]" Google Maps
  4. WebSearch: "[English Name]" Google Maps [City]
  5. 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):

  1. Use provided Naver Place URL (from Step 0 or user input)
  2. Check website for Naver Place link (footer, contact page, schema sameAs, naver.me/* or map.naver.com/*/place/* patterns)
  3. WebSearch: "[Korean Name]" site:map.naver.com
  4. WebSearch: "[Korean Name]" 네이버 지도 [district]
  5. WebSearch: "[Korean Name]" 네이버 스마트플레이스
  6. 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:

  1. Use provided Kakao Map URL (from Step 0)
  2. Check website for Kakao Map link (place.map.kakao.com/*, kko.to/*)
  3. WebSearch: "[Korean Name]" site:place.map.kakao.com
  4. 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