SKILL.md
Local SEO Analysis
Local rankings hinge on a handful of levers: correct GBP category, review velocity, dedicated service pages, and consistent NAP. Detect what kind of business this is first, because the checks differ, then score six dimensions from what the website actually shows.
Step 1: Detect business type
| Type | Signals | Effect on checks |
|---|---|---|
| Brick-and-mortar | Street address on page, Maps embed, "visit us", street address in schema | Full NAP plus map checks |
| Service area business (SAB) | No visible address, "serving [region]", "we come to you", areaServed without street address | Skip map embed and physical address checks |
| Hybrid | Both address and service-area language | Both check sets |
Step 2: Detect industry vertical
Route to industry-specific checks: restaurant (menus, reservations), healthcare (insurance, appointments, HIPAA), legal (practice areas, bar admission), home services (estimates, licensed/insured, 24/7), real estate (listings, MLS), automotive (inventory, test drives). Unclear vertical: present the top two candidates with their signals and ask the user to confirm. No vertical: generic LocalBusiness path.
Step 3: Score six dimensions
Read references/local-dimensions.md for the full check lists, scoring guides, and industry-specific schema patterns. Weights and headlines:
| Dimension | Weight | The one thing that matters most |
|---|---|---|
| GBP signals | 25% | Primary category is the top local pack factor, and the wrong one is the top negative factor |
| Reviews and reputation | 20% | Velocity beats total count; a 3-week gap without new reviews risks a ranking cliff |
| Local on-page | 20% | A dedicated page per core service is the top local organic factor |
| NAP and citations | 15% | Page HTML, schema, and GBP must agree exactly; citations now matter most for AI visibility |
| Local schema | 10% | Correct industry subtype with complete address, geo, hours. Not a ranking factor, but feeds rich results and AI parsing |
| Local links and authority | 10% | Chamber, BBB, local press, and "best of" list placements (the top AI-visibility citation factor) |
Step 4: AI search context, without duplicating claude-seo-geo
Report local-specific AI facts only: ChatGPT does not read GBP, it sources from the Bing index, Yelp, TripAdvisor, BBB, and Reddit, so Bing Places is critical. AI-powered local results surface fewer businesses than the classic pack. For full AI visibility scoring, recommend claude-seo-geo.
Step 5: Output
Write LOCAL-SEO-ANALYSIS-<domain>.md: score out of 100 with dimension table, business type, vertical plus industry findings, GBP checklist, review health snapshot, NAP audit with per-source values, citation presence, schema status with a ready-to-paste fix, location page quality (if multi-location), top 10 actions ranked Critical > High > Medium > Low, and a limitations note listing what an HTML fetch cannot see (geo-grid ranks, GBP Insights, full backlink data) with the tool that can (claude-seo-maps, claude-seo-dataforseo).
Multi-location rules
- Each location page needs its own LocalBusiness schema with unique
@id, linked viabranchOf. - Structure:
domain.com/locations/city-name/, crawlable server-rendered URLs. - Location pages need over 60% unique content each. Apply the swap test: if you can swap the city name and the page still reads fine, it is a doorway page and a core-update liability.
- 30+ location pages: warn and enforce the uniqueness bar. 50+: stop and require the user to justify before continuing.
Verification
Extract NAP from three sources: visible page HTML (footer/contact), LocalBusiness JSON-LD, and any visible GBP data. Expect all three to match exactly on name, address, and phone. Any mismatch: flag it with the exact differing values as a Critical or High finding, do not average them into one "probably correct" NAP.
Good vs bad
Good: "Phone in footer is <PHONE_A>, schema says <PHONE_B>. Fix schema to match the tracked business line, then update the same number on GBP, Yelp, and BBB." Bad: "NAP looks mostly consistent." Consistency is binary per field. Name every mismatch or state that all three sources matched.
Footguns
- Applying brick-and-mortar checks to SABs. Flagging a service-area plumber for "missing map embed" is a false positive. Detect type first, always.
- Review gating recommendations. Pre-screening customers for satisfaction before routing them to Google violates Google policy and draws regulator fines. Never recommend it, flag it if detected.
- Healthcare review responses. HIPAA bars confirming anyone is a patient. Note this constraint whenever the vertical is healthcare.
- Deprecated schema subtypes.
AttorneyandVehicleListingare deprecated. UseLegalService,AutoDealer, and the specific subtypes in references/local-dimensions.md. - Doorway pages at scale. City-swapped location pages have caused sites to lose most of their local traffic in core updates. Run the swap test on every location template.
Completion checklist
- [ ] Business type detected and stated, checks filtered accordingly
- [ ] Vertical detected or user-confirmed
- [ ] All six dimensions scored with evidence from the page
- [ ] NAP three-source comparison done with exact values
- [ ] Schema fix provided ready-to-paste with correct subtype
- [ ] Multi-location gates applied when relevant
- [ ] Limitations section names what was not assessable
Any box unchecked: not done. Fix or say so.