# 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 ```markdown ## 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