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:
@@ -2,109 +2,253 @@
|
||||
|
||||
## Overview
|
||||
|
||||
Local SEO auditor for businesses with physical locations: NAP consistency, Google Business Profile optimization, local citations, and LocalBusiness schema validation.
|
||||
|
||||
## Quick Start
|
||||
|
||||
This skill primarily uses MCP tools (Firecrawl, Perplexity) for data collection. Scripts are helpers for validation.
|
||||
|
||||
```bash
|
||||
# NAP consistency check (manual data input)
|
||||
python scripts/nap_checker.py --business "Business Name" --address "123 Main St" --phone "555-1234"
|
||||
|
||||
# LocalBusiness schema validation
|
||||
python scripts/local_schema_validator.py --url https://example.com
|
||||
```
|
||||
|
||||
## Audit Components
|
||||
|
||||
### 1. NAP Consistency
|
||||
**Name, Address, Phone** consistency across:
|
||||
- Website (header, footer, contact page)
|
||||
- Google Business Profile
|
||||
- Local directories (Yelp, Yellow Pages, etc.)
|
||||
- Social media profiles
|
||||
|
||||
### 2. Google Business Profile (GBP)
|
||||
Optimization checklist:
|
||||
- [ ] Business name matches website
|
||||
- [ ] Address is complete and accurate
|
||||
- [ ] Phone number is local
|
||||
- [ ] Business hours are current
|
||||
- [ ] Categories are appropriate
|
||||
- [ ] Photos uploaded (exterior, interior, products)
|
||||
- [ ] Posts are recent (within 7 days)
|
||||
- [ ] Reviews are responded to
|
||||
|
||||
### 3. Local Citations
|
||||
Priority directories to check:
|
||||
- Google Business Profile
|
||||
- Apple Maps
|
||||
- Bing Places
|
||||
- Yelp
|
||||
- Facebook Business
|
||||
- Industry-specific directories
|
||||
|
||||
### 4. LocalBusiness Schema
|
||||
Required properties:
|
||||
- @type (LocalBusiness or subtype)
|
||||
- name
|
||||
- address (PostalAddress)
|
||||
- telephone
|
||||
- openingHours
|
||||
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:**
|
||||
```
|
||||
1. Collect NAP from client
|
||||
2. Scrape website for NAP mentions
|
||||
3. Search citations using Perplexity
|
||||
4. Check GBP data (manual or API)
|
||||
5. Validate LocalBusiness schema
|
||||
6. Generate consistency report
|
||||
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]
|
||||
|
||||
### NAP Consistency Score: X/10
|
||||
### Business Identity
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Korean Name | ... |
|
||||
| English Name | ... |
|
||||
| Brand Name | ... |
|
||||
| Address | ... |
|
||||
| Phone | ... |
|
||||
|
||||
### NAP Consistency: X/10
|
||||
| Source | Name | Address | Phone | Status |
|
||||
|--------|------|---------|-------|--------|
|
||||
| Website | ✓ | ✓ | ✓ | Match |
|
||||
| GBP | ✓ | ✗ | ✓ | Mismatch |
|
||||
| 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
|
||||
- [ ] Issue 1
|
||||
- [x] Completed item
|
||||
- [x] Completed items
|
||||
- [ ] Missing items
|
||||
**GBP URL**: [URL or "not discoverable"]
|
||||
|
||||
### Citation Audit
|
||||
- Found: X citations
|
||||
- Consistent: X
|
||||
- Needs update: X
|
||||
### Naver Smart Place: X/10
|
||||
- [x] Completed items
|
||||
- [ ] Missing items
|
||||
**Naver Place URL**: [URL or "not discoverable"]
|
||||
|
||||
### Recommendations
|
||||
1. Fix address mismatch on GBP
|
||||
2. Add LocalBusiness schema
|
||||
### 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 |
|
||||
| Missing GBP categories | Medium | Add relevant categories |
|
||||
| No LocalBusiness schema | Medium | Add JSON-LD markup |
|
||||
| Outdated business hours | Medium | Update GBP hours |
|
||||
| No review responses | Low | Respond to all reviews |
|
||||
| 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 API requires enterprise approval (use manual audit)
|
||||
- Citation discovery limited to public data
|
||||
- Use schema generator skill (14) for creating LocalBusiness markup
|
||||
- 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)
|
||||
|
||||
@@ -123,20 +267,13 @@ Required properties:
|
||||
|----------|------|-------------|
|
||||
| Issue | Title | Report title (Korean + date) |
|
||||
| Site | URL | Audited website URL |
|
||||
| Category | Select | Technical SEO, On-page SEO, Performance, Schema/Structured Data, Sitemap, Robots.txt, Content, Local SEO |
|
||||
| Category | Select | Local SEO |
|
||||
| Priority | Select | Critical, High, Medium, Low |
|
||||
| Found Date | Date | Audit date (YYYY-MM-DD) |
|
||||
| Audit ID | Rich Text | Format: [TYPE]-YYYYMMDD-NNN |
|
||||
| Audit ID | Rich Text | Format: LOCAL-YYYYMMDD-NNN |
|
||||
|
||||
### Language Guidelines
|
||||
|
||||
- Report content in Korean (한국어)
|
||||
- Keep technical English terms as-is (e.g., SEO Audit, Core Web Vitals, Schema Markup)
|
||||
- Keep technical English terms as-is (e.g., SEO Audit, GBP, NAP, Schema Markup)
|
||||
- URLs and code remain unchanged
|
||||
|
||||
### Example MCP Call
|
||||
|
||||
```bash
|
||||
mcp-cli call notion/API-post-page '{"parent": {"database_id": "2c8581e5-8a1e-8035-880b-e38cefc2f3ef"}, "properties": {...}}'
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user