30x-seo-local — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited 30x-seo-local (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Audit and optimize a business's local search presence across Google Business Profile, Google Maps, Local Pack, and Gemini Ask Maps.
Does NOT do:
seo-pageseo-backlinksseo-ai-visibilityAsk user for:
| Field | Required | Example |
|---|---|---|
| Business name | ✅ | "Blue Bottle Coffee" |
| Website URL | ✅ | "https://bluebottlecoffee.com" |
| Business category | ✅ | "Coffee shop" |
| Service area / city | ✅ | "San Francisco, CA" |
| GBP URL (if known) | Optional | Google Maps link |
| Target keywords | Optional | "specialty coffee SF" |
| Competitors (2-3) | Optional | Names or GBP URLs |
| Multi-location? | Optional | Number of locations |
#### GSC Data Integration (Optional)
If user has Google Search Console access, pull local query data via seo-monitor:
/seo monitor keywordsExtract from GSC:
This data informs Steps 2-9 with real performance context.
Based on Google's official GBP Optimization Playbook (March 2026).
| # | Field | Weight | Check |
|---|---|---|---|
| 1 | Business Information | Critical | Accurate name (no keyword stuffing), address matches license, local phone |
| 2 | Business Category | Critical | Most specific primary category from 4,100+ options. Wrong category = ranking disaster (documented case: #1 → #31 from wrong category) |
| 3 | Business Description | High | 750 chars, concise overview of offerings + what makes you unique, natural language |
| 4 | Business Hours | High | Complete including holidays/special hours. Longer hours = ranking advantage (24/7 via answering service outperforms limited hours) |
| 5 | Service Area | High | Define geographical service region (service-area businesses) |
| 6 | Attributes | High | All relevant (WiFi, parking, outdoor, wheelchair access, etc.) |
| 7 | Photos & Videos | High | 15+ quality photos, refresh quarterly. 100+ photos = 520% more calls, 2700% more direction requests |
| 8 | Google Posts | High | Weekly cadence: updates, offers, events. Post 1-2x/week minimum — freshness is a top-tier ranking signal in 2026 |
| 9 | Social Links | Medium | Link up to 7 social profiles (5 display). Google may show social posts in profile |
| 10 | Chat Links | Medium | Add WhatsApp or SMS Chat for direct customer communication |
| 11 | Bookings & Orders | Medium | Enable Reserve with Google, booking links, order buttons. 77% of consumers expect online booking |
| 12 | Products/Services | High | Complete list with descriptions. Add all pre-defined + custom services |
| 13 | Manage Reviews | Critical | Actively monitor and respond to every review |
#### Category Selection (Critical)
Primary category is the single most impactful GBP field:
#### Attributes to AVOID
These attributes can hide your reviews from the profile:
Only enable these if the booking functionality outweighs review visibility for your business.
#### Reserve with Google
Drive bookings directly from GBP without customers leaving Google:
#### Landing Page Strategy
#### Industry-Specific Optimization
Google released industry-specific GBP Playbooks (March 2026). Apply vertical optimizations during audit:
Food & Drink:
Service Businesses (plumbers, cleaners, HVAC, etc.):
Hotels & Accommodations:
Tours & Attractions:
#### GBP Pro Tips (Sterling Sky Research)
| Tip | Why |
|---|---|
| Set opening date to oldest legitimate date | Builds credibility. Use company history, not just current location opening. Google may populate a random date if blank |
| Extend business hours when possible | Google favors accessible businesses. 24/7 via answering service = ranking advantage |
| Do NOT link GBP to a page with existing organic rankings | Google penalizes duplicate ranking — use a dedicated local page |
| Remove "onsite services" and "online appointment" attributes | They hide review visibility from your profile |
| Add up to 7 social profiles | Only 5 display. Google may show social posts. This is a secondary credibility layer for AI engines |
#### GBP Suspension Red Lines
These actions will get your GBP suspended — never do them:
| Violation | Example | Risk |
|---|---|---|
| Keyword stuffing in business name | "Joe's Coffee - Best Coffee Shop San Francisco CA" | Immediate suspension |
| Fake address / virtual office | Using a PO Box or coworking space you don't occupy | Suspension + permanent distrust |
| Wrong category to game rankings | Plumber listing as "Emergency Service" | Suspension + ranking penalty |
| Multiple listings for same location | Creating 2 GBPs for one address | Both suspended |
| Fake reviews / review gating | Buying reviews or only asking happy customers | Review removal + penalty |
| Stock photos as business photos | Using generic images not of actual business | Photo removal + trust penalty |
| Operating outside stated area | SAB claiming service areas you don't serve | Ranking penalty |
If suspended: Do NOT create a new profile. Appeal through GBP support with proof of legitimacy (utility bill, business license, photos of signage).
Scoring:
GBP Score = filled fields / total applicable fields × 100
90-100%: Excellent
70-89%: Good, quick wins available
50-69%: Needs work
<50%: Critical — significant visibility lossNAP = Name, Address, Phone — must be identical everywhere.
#### Platform Audit Process
For each platform, use WebFetch to extract and compare NAP data:
| Platform | URL to Check | Fields to Extract | Priority |
|---|---|---|---|
| Google Business Profile | GBP URL (from Step 1) | Name, address, phone, website, hours | Critical |
| Website footer | [domain] — check footer/contact | Name, address, phone | Critical |
| Website contact page | [domain]/contact | Full NAP, map embed, schema | Critical |
| Yelp | yelp.com/biz/[business-slug] | Name, address, phone, hours, categories | High |
facebook.com/[page] | Name, address, phone, hours | High | |
| Apple Maps | Search Apple Maps web | Name, address, phone | High |
| Bing Places | bing.com/maps search | Name, address, phone | High |
| BBB | bbb.org search | Name, address, phone | Medium |
| Industry directories | Vertical-specific (Healthgrades, Avvo, HomeAdvisor, etc.) | Name, address, phone | Medium |
#### Comparison Method
Build a NAP consistency table:
| Platform | Name | Address | Phone | Match? |
|----------|------|---------|-------|--------|
| GBP (canonical) | Joe's Coffee | 123 Main St, SF, CA 94105 | (415) 555-1234 | — |
| Website footer | Joe's Coffee | 123 Main Street, SF, CA 94105 | 415-555-1234 | ❌ Address format, phone format |
| Yelp | Joe's Coffee Shop | 123 Main St, San Francisco, CA | (415) 555-1234 | ❌ Name has "Shop", city not abbreviated |
| Facebook | Joe's Coffee | 123 Main St, SF, CA 94105 | (415) 555-1234 | ✅ |#### Fix Protocol
Common Issues:
❌ "123 Main St" vs "123 Main Street" vs "123 Main St."
❌ "(415) 555-1234" vs "415-555-1234" vs "+1 415 555 1234"
❌ "Joe's Coffee" vs "Joe's Coffee Shop" vs "Joe's Coffee LLC"
❌ Suite/Unit number present on some, missing on others
❌ Old phone number on forgotten directoriesCheck website for LocalBusiness schema markup. Use the most specific subtype for richer results:
#### Schema Subtype Selection
| Business Type | Schema Type | Key Extra Properties |
|---|---|---|
| Generic local business | LocalBusiness | — |
| Restaurant / cafe | Restaurant or CafeOrCoffeeShop | menu, servesCuisine, acceptsReservations |
| Hotel / B&B | LodgingBusiness or Hotel | starRating, checkinTime, checkoutTime, amenityFeature |
| Plumber / HVAC / electrician | HomeAndConstructionBusiness or Plumber | areaServed, hasOfferCatalog |
| Doctor / dentist | MedicalBusiness or Dentist | medicalSpecialty, availableService |
| Lawyer | LegalService or Attorney | areaServed, knowsAbout |
| Tour operator | TouristAttraction or TravelAgency | tourBookingPage, availableLanguage |
| Gym / fitness | SportsActivityLocation | amenityFeature |
| Beauty salon / spa | BeautySalon or DaySpa | availableService |
| Auto repair | AutoRepair | availableService, areaServed |
#### Restaurant Schema Example
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Business Name",
"image": "https://example.com/photo.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
},
"telephone": "+1-415-555-1234",
"url": "https://example.com",
"menu": "https://example.com/menu",
"servesCuisine": "Italian",
"acceptsReservations": true,
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "11:00",
"closes": "22:00"
}
],
"geo": {
"@type": "GeoCoordinates",
"latitude": 37.7749,
"longitude": -122.4194
},
"priceRange": "$$",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "230"
}
}#### Generic LocalBusiness Schema Example
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Business Name",
"image": "https://example.com/photo.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US"
},
"telephone": "+1-415-555-1234",
"url": "https://example.com",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "07:00",
"closes": "19:00"
}
],
"geo": {
"@type": "GeoCoordinates",
"latitude": 37.7749,
"longitude": -122.4194
},
"priceRange": "$$",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "230"
}
}#### Schema Validation Checklist
| Check | Status |
|---|---|
| Most specific subtype used (not generic LocalBusiness) | ✅/❌ |
| NAP matches GBP exactly | ✅/❌ |
| GeoCoordinates present | ✅/❌ |
| OpeningHours present | ✅/❌ |
| AggregateRating present | ✅/❌ |
| Industry-specific properties filled | ✅/❌ |
| Multiple locations: each has own schema | ✅/❌/N/A |
#### The 10-Review Threshold (Sterling Sky Research)
#### Current State Assessment
| Metric | Benchmark | Source |
|---|---|---|
| Total reviews | ≥10 minimum, then category avg | Sterling Sky |
| Average rating | ≥4.2 stars | Industry standard |
| Review velocity | Consistent weekly flow | Sterling Sky |
| Owner response rate | 100% target | Google Playbook |
| Response time | <24 hours | Google Playbook |
| Review recency | Most recent <7 days | Best practice |
#### Sentiment Mining
Extract recurring themes from reviews:
#### Review Strategy Output
## Review Velocity Program
### Collection Touchpoints
1. Google's official review request link (GBP dashboard → "Ask for reviews")
2. QR code (Google's built-in generator) on receipts/signage
3. Post-purchase email (2 hours after)
4. SMS follow-up (24 hours after)
5. Staff verbal ask at checkout
### Response Templates
- Positive (5-star): Thank + reference specific detail + invite back
- Mixed (3-4 star): Thank + acknowledge issue + describe fix + invite back
- Negative (1-2 star): Apologize + take offline + describe resolution
### Key Principle
Frequency > quantity. 4 reviews/week beats 50 reviews once then silence.
### Target Metrics
- Weekly new reviews: [X] (current: [Y])
- Response rate: 100%
- Response time: <24 hoursLocal SEO is a zero-sum game — in AI Local Pack, only 1-2 businesses win. You must know what you're competing against.
#### Identify Top 3 Local Competitors
Methods:
[primary category] in [city] on Google Maps — top 3 in Local Pack are your competitors[target keyword] — who shows in AI Local Pack?#### Competitor Audit Matrix
For each competitor, use WebFetch on their GBP and website to build:
| Dimension | Your Business | Competitor A | Competitor B | Competitor C |
|-----------|--------------|-------------|-------------|-------------|
| **GBP Category** | Coffee shop | Coffee shop | Cafe | Breakfast restaurant |
| **Secondary Categories** | 2 | 4 | 1 | 3 |
| **Total Reviews** | 45 | 230 | 89 | 156 |
| **Avg Rating** | 4.3 | 4.6 | 4.1 | 4.4 |
| **Review Velocity** | ~2/week | ~8/week | ~1/week | ~4/week |
| **Photos Count** | 23 | 150+ | 45 | 80 |
| **Posts Frequency** | None | Weekly | None | Monthly |
| **Attributes Filled** | 5/15 | 12/15 | 3/15 | 9/15 |
| **Website Has Schema** | ❌ | ✅ Restaurant | ❌ | ✅ LocalBusiness |
| **Booking Enabled** | ❌ | ✅ Reserve | ❌ | ✅ Custom link |
| **Social Links** | 2 | 5 | 1 | 4 |
| **Q&A Entries** | 0 | 12 | 2 | 5 |#### Gap Analysis Output
## Competitive Gaps (Prioritized)
### You're Behind On:
1. 🔴 Reviews: 45 vs competitor avg 158 — need aggressive review velocity program
2. 🔴 Photos: 23 vs competitor avg 92 — upload 70+ quality photos
3. 🟠 Attributes: 5/15 vs competitor avg 8/15 — fill all relevant attributes
### You're Ahead On:
1. ✅ Rating: 4.3 vs competitor avg 4.2 — maintain quality
2. ✅ Hours: Open later than 2 of 3 competitors
### Quick Wins to Leapfrog:
1. No competitor has Q&A populated — first mover advantage
2. Only 1 competitor posts weekly — match them immediatelyThis is the 2026 update — Google Maps now uses Gemini AI for conversational search ("Ask Maps"). The ranking model shifted from keyword matching to intent understanding.
#### What Changed
| Old Model | New Model (March 2026) |
|---|---|
| "coffee near me" | "my phone is dying, where can I charge without waiting in line?" |
| Keyword relevance | Intent + attribute matching |
| Static profile data | Real-time activity signals |
| Proximity dominates | Proximity qualifies, engagement ranks |
#### Ask Maps Optimization Checklist
Attribute Completeness (Gemini matches user intent to business attributes):
Q&A as AI Training Data:
Google Posts Freshness Signal:
Photo Strategy for Immersive Navigation:
Review Content as AI Context: When customers mention specific attributes in reviews ("great WiFi", "quiet workspace", "fast service"), Gemini uses this as input for matching intent queries.
Strategy:
Google is rolling out AI-generated local packs that fundamentally change visibility:
| Traditional Local Pack | AI Local Pack (2026) |
|---|---|
| 3 businesses shown | 1-2 businesses shown |
| Call buttons visible | Call buttons replaced by images |
| Broad business coverage | Only 32% as many unique businesses |
| ~1% ad coverage | 22% ad coverage (up from 1% in early 2025) |
What this means:
Action items:
#### Local Services Ads (LSA) Readiness
LSAs now cover 31% of local queries — ignoring them is leaving money on the table.
What LSAs are: Pay-per-lead ads at the very top of Google results with "Google Guaranteed" or "Google Screened" badges.
Available categories: Home services, legal, financial, healthcare, real estate, auto, pet care, and expanding.
Setup checklist:
ads.google.com/local-services-adsWhen to recommend LSAs:
When NOT to recommend:
Website content that supports local search:
| Content Type | Purpose | Priority |
|---|---|---|
| Location pages | One per physical location | Critical |
| Service area pages | One per service area | High |
| Local FAQ page | Conversational queries | High |
| Local blog posts | Topical authority | Medium |
| Event/news posts | Freshness signals | Medium |
Location Page Template:
Skip this step for single-location businesses.
#### Core Challenges
| Challenge | Wrong Approach | Right Approach |
|---|---|---|
| Brand consistency | One GBP for all locations | Separate GBP per physical location |
| Content duplication | Same description copy-pasted | Unique 300+ word description per location |
| Review management | One review response template | Location-specific responses referencing local details |
| Schema markup | One schema block | Separate LocalBusiness schema per location page |
| Landing pages | One page listing all locations | Dedicated landing page per location |
#### Multi-Location Checklist
/locations with a list)#### Location Page Differentiation
Avoid the "same page, different city name" trap. Each location page must include:
#### Store Locator Best Practices
If 5+ locations, implement a store locator:
Organization as parent, individual LocalBusiness for each location# Local SEO Audit: [Business Name]
Generated: [Date]
## Overall Score: XX/100
## GBP Completeness: XX/100 ████████░░
- [List of missing/incomplete fields]
- Industry-specific gaps: [vertical-specific missing items]
- Suspension risk: [any red line violations detected]
## NAP Consistency: XX/100 ██████████
- Platforms checked: X
- Inconsistencies found: X
- [Table of discrepancies]
## Reviews: XX/100 ███████░░░
- Rating: X.X ⭐ (X reviews)
- Velocity: X/week
- Response rate: X%
- Key themes: [positive], [negative]
- vs. Competitors: [behind/ahead by X reviews]
## Local Schema: XX/100 █████░░░░░
- Schema type: [current] → Recommended: [industry subtype]
- [Missing markup elements]
## Competitor Benchmark: XX/100 ██████░░░░
- Local Pack position: #X of 3
- Review gap: [X reviews behind leader]
- Attribute gap: [X/Y vs competitor avg]
- [Top 3 gaps to close]
## Ask Maps Readiness: XX/100 ████████░░
- Attributes: X/Y filled
- Q&A: X entries
- Posts: [frequency]
- Photo freshness: [last updated]
## AI Local Pack Readiness: XX/100 ███████░░░
- Traditional Pack presence: [yes/no]
- AI Pack presence: [yes/no/unknown]
- LSA opportunity: [eligible/not eligible/already running]
- Multi-channel diversification: [strong/weak]
## Multi-Location Status (if applicable): XX/100
- Locations audited: X
- Locations with unique content: X/Y
- Locations with own schema: X/Y
## Priority Actions
1. 🔴 [Critical action — suspension risk or major gap]
2. 🔴 [Critical action — competitive disadvantage]
3. 🟠 [High priority — quick win with large impact]
4. 🟠 [High priority]
5. 🟡 [Medium priority]
6. 🟢 [Quick win]| Output | Format |
|---|---|
| GBP optimization checklist | Markdown checklist |
| NAP consistency table | Comparison matrix with fixes |
| Industry-specific schema | Ready-to-use JSON-LD |
| Review strategy | Action plan with templates |
| Competitor benchmark matrix | Side-by-side comparison |
| Ask Maps optimization plan | Prioritized checklist |
| AI Local Pack + LSA assessment | Readiness report |
| Location page template | HTML/content structure |
| Multi-location audit (if applicable) | Per-location checklist |
| Related Skill | When to Use Together |
|---|---|
| seo-monitor | Pull GSC data for local keyword performance |
| seo-schema | Deep schema validation beyond LocalBusiness |
| seo-content-audit | Audit location page content quality |
| seo-keywords | Local keyword research and search volume |
| seo-serp | Track Local Pack rankings |
| seo-ai-visibility | Monitor AI platform citations |
| seo-technical | Technical SEO for location pages |
| seo-competitor-pages | Analyze competitor local pages |
| Check | Frequency |
|---|---|
| GBP completeness | Monthly |
| Review metrics | Weekly |
| NAP consistency | Quarterly |
| Competitor benchmark | Monthly |
| Ask Maps self-test | Bi-weekly |
| Local Pack position | Weekly |
| Schema validation | After page changes |
| LSA lead quality | Weekly (if running) |
| Multi-location audit | Quarterly |
Test your business visibility by searching these patterns in Google Maps:
"[category] near [landmark]"
"[category] with [attribute] in [city]"
"where can I [intent] near [area]"
"best [category] for [situation] in [city]"
"[category] open now with [specific need]"Document what Gemini says. If your business is missing or described inaccurately, trace the gap back to a specific GBP field, review pattern, or website content issue.
[PROTOCOL]: Update this header on changes, then check CLAUDE.md
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.