Claude-seo-skills seo-local
git clone https://github.com/lionkiii/claude-seo-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/lionkiii/claude-seo-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/seo-local" ~/.claude/skills/lionkiii-claude-seo-skills-seo-local && rm -rf "$T"
skills/seo-local/SKILL.mdLocal SEO Audit
Performs a comprehensive local SEO audit from live URL fetching. No MCP required.
Inputs
: Business name, URL, or location string.business- If URL: fetch the homepage directly.
- If business name + location (e.g., "Acme Plumbing Austin TX"): note that live lookup is not possible; analyze any URL the user provides separately.
- Best input: homepage URL (e.g.,
).https://acme-plumbing.com
Execution
Step 1: Fetch and Extract Business Info
Fetch homepage with WebFetch. Also fetch
/contact and /about if linked from homepage.
Extract from HTML:
- Business name (from
, H1, or schema)<title> - Address (street, city, state, zip, country)
- Phone number(s)
- Email address(es)
- Schema markup (look for
blocks)<script type="application/ld+json">
Step 2: NAP Consistency Check
NAP = Name, Address, Phone. Consistency across the site is a local ranking factor. Check: homepage, footer, contact page, about page, schema markup. For each location of NAP found, record exact text and flag discrepancies:
- Different phone formats (
vs(512) 555-1234
) — NOTE (not critical)512-555-1234 - Different address formats (abbreviated vs full state) — NOTE
- Completely different address or phone — CRITICAL flag
Step 3: Local Schema Audit
Check for these schema types in JSON-LD blocks:
(or subtype:LocalBusiness
,Plumber
,Restaurant
, etc.)MedicalBusiness- Required properties:
,name
(asaddress
),PostalAddresstelephone - Recommended:
(asgeo
),GeoCoordinates
,openingHours
,url
,imagepriceRange
requires:PostalAddress
,streetAddress
,addressLocality
,addressRegionpostalCode
For any missing required/recommended properties, generate corrected JSON-LD at the end of output. Detect business type from schema type or page content to select appropriate LocalBusiness subtype.
Step 4: Google Business Profile Signals
Check for presence of:
- Google Maps embed (
ormaps.google.com
iframe)google.com/maps - GBP link (
or Google Maps URL with place ID)business.google.com/ - Reviews integration (review schema, review widget, or link to Google reviews)
- Service area mentions (city names, county, "serving [city]" in body text)
- Operating hours on website
Step 5: Local Content Signals
- City/region in
tag: check if geo-modifier present (e.g., "Plumber in Austin")<title> - City/region in H1: check if location keyword present
- Location pages (if multi-location): look for
URL pattern or location listing pages/[city]/ - Local testimonials: customer names with locations, Google review embeds
- Proximity/location keywords in body: "near me", "in [city]", "serving [area]"
Step 6: Citation Opportunities
Based on detected business type, list relevant citation directories:
General (all business types):
- Google Business Profile, Yelp, BBB (Better Business Bureau), Yellow Pages, Apple Maps, Bing Places, Foursquare
Industry-specific (detect from schema type, title, or content):
- Restaurants: TripAdvisor, OpenTable, Zomato
- Healthcare: Healthgrades, ZocDoc, WebMD, Vitals
- Legal: Avvo, FindLaw, Justia, Lawyers.com
- Home Services: HomeAdvisor, Angi, Thumbtack, Houzz
- Real Estate: Zillow, Realtor.com, Trulia
Check if any citation platforms are already linked from the site.
Step 7: Review Signals
- Review schema (
or@type: Review
in JSON-LD)AggregateRating - Review platform links (Google, Yelp, Trustpilot, industry-specific)
- Aggregate review score displayed on site
- Review request CTA (e.g., "Leave us a review" button/link)
Step 8: Mobile Optimization
Local searches are 60%+ mobile — check:
present<meta name="viewport" content="width=device-width">- Click-to-call links:
for phone numbers (not just plain text)<a href="tel:+1..."> - Google Maps embed responsive (not fixed width)
- Tap targets for key CTAs (subjective — note if CTA buttons exist)
Local SEO Score Calculation (0-100)
| Factor | Max Points |
|---|---|
| NAP consistent across all pages | 20 |
| LocalBusiness schema present and valid | 20 |
| GBP signals (Maps embed + GBP link) | 15 |
| Local content signals (title + H1 + body) | 15 |
| Citation platform presence (3+ found) | 10 |
| Review signals | 10 |
| Mobile: click-to-call + viewport | 10 |
Output Format
## Local SEO Audit: [business name / URL] **Local SEO Score: [N]/100** ### NAP Consistency Status | Location | Name | Address | Phone | Match? | |----------|------|---------|-------|--------| ### Local Schema **Status:** [Present / Missing / Incomplete] [If issues: show corrected JSON-LD block] ### GBP Integration Checklist - [x] Google Maps embed - [ ] GBP link - [x] Operating hours - [ ] Review integration - [x] Service area mentions ### Local Content Assessment | Signal | Status | Detail | |--------|--------|--------| | City in title | PASS/FAIL | [title content] | | City in H1 | PASS/FAIL | [H1 content] | | Location pages | N/A / Found | | ### Citation Opportunities | Platform | Category | Status | |----------|----------|--------| | Google Business Profile | General | [Linked / Not detected] | | Yelp | General | [Linked / Not detected] | ### Priority Actions [Critical/High/Medium/Low action items] ## Data Sources - Live fetch: [URL] via WebFetch - Schema: extracted from page JSON-LD