Local Seo skill

Local SEO across Google Business Profile, Apple Business Connect, Bing Places, citations, reviews, location pages, map-pack and AI-Overview local visibility. Use when working on multi-location SEO, single-location optimization, or local pack ranking. Install with: npx skills-ws install local-seo.

marketingv1.0.0Updated
copied ✓
openclawclaude-codecursorcodex
0 installsSecurity scan: cleanSource code

Local SEO

In 2026 you optimize for three map-pack ecosystems, not one: Google (Maps + AI Overviews), Apple (Maps + Siri + Spotlight + Wallet), and Bing (Maps + Microsoft/Copilot). Skipping any leaves visibility on the table — Apple ships in iOS by default, and Microsoft's index feeds Copilot and has been one source behind ChatGPT's web search. Beyond maps, AI answers (Google AI Overviews, ChatGPT, Perplexity) pull from your site, reviews, and directories too — optimize breadth (see Local visibility in AI search).

Google Business Profile (GBP)

Setup Checklist

  • Claim and verify listing
  • Correct business name (no keyword stuffing)
  • Primary + secondary categories (most specific first)
  • Complete address (or service area for mobile businesses)
  • Phone number (local, not toll-free)
  • Website URL (to location-specific page if multi-location)
  • Business hours (keep updated, mark holidays)
  • Business description (750 chars, natural keywords)
  • 10+ high-quality photos (exterior, interior, team, products)
  • Enable booking if applicable (messaging — see deprecation note below)

GBP chat sunset: Google retired Business Profile chat and call-history on July 31, 2024 (deprecation began July 15, 2024). Past records were exportable via Google Takeout until Aug 30, 2024. Move customer messaging to your website chat widget, SMS, or WhatsApp Business.

Ongoing Optimization

  • Reviews are the highest-leverage ongoing lever: steady velocity of recent, keyword-rich reviews + owner responses. Respond to ALL reviews within 24-48h.
  • Categories & attributes — revisit quarterly; new attributes (e.g. "LGBTQ+ friendly", "wheelchair accessible", service options) unlock filters and pack relevance.
  • Photos — add monthly; geo-tag is ignored by Google but fresh imagery correlates with engagement.
  • Hours — keep accurate; set special hours for holidays (incorrect "open" status is a top cause of negative reviews and lost calls).
  • Google Posts (offers, events, updates) — useful for CTR/freshness and occupy pack real estate, but treat as engagement/conversion tools, not a confirmed ranking lever. Weekly cadence is fine if you have content; don't manufacture filler.
  • Q&A — seed and answer common questions proactively; anyone can answer, so own the narrative before competitors or trolls do.
  • Products/Services — populate the catalog; services feed category relevance and the menu/justification snippets in the pack.

Ranking factors (what actually moves the local pack)

Google's local ranking is relevance + distance + prominence. Practical levers, roughly in order of impact:

  1. Primary category — the single biggest on-profile lever. Match it to your money keyword; use the most specific option (e.g. Personal injury attorney, not Lawyer).
  2. Reviews — count, velocity, recency, rating, and keyword/service mentions in review text.
  3. Proximity to the searcher — you cannot change your address, but it dominates results, so target service-area + nearby-city pages on your site to win the broader organic local results that surround the pack.
  4. On-page/website signals — your site's organic strength, location-page relevance, and LocalBusiness schema feed the pack.
  5. Citations & links — consistent NAP across authoritative directories + locally relevant backlinks (chamber of commerce, local press, sponsorships).
  6. Behavioral — clicks-to-call, direction requests, website clicks, photo views.

GBP suspension risk & reinstatement

Suspensions (soft = edits revert; hard = listing removed) are common and often triggered by edits. Avoid:

  • Keyword stuffing the business name. Use the real-world name only. Joe's Plumbing — not Joe's Plumbing | 24/7 Emergency Plumber Austin. This is the #1 suspension trigger and is also reportable by competitors.
  • Virtual offices, mailboxes, coworking desks, or PO boxes as the address — prohibited unless staffed during stated hours. UPS-store/regus-style addresses get flagged.
  • Service-area business (SAB) errors — if you go to the customer (plumber, mobile detailer), hide your address and set a service area. Showing a residential address you don't accept customers at risks suspension.
  • Lead-gen / fake locations — one listing per real, distinct location. No listings at locations you don't physically operate.
  • Practitioner listing rules — a solo practitioner (lawyer, doctor, agent) may have a personal listing AND the firm may have one, but not duplicate practitioner listings per location.
  • Adding a second listing at the same address for the same business — creates duplicates Google merges or suspends.

Reinstatement: appeal via the Business Profile Help → "reinstatement request" form. Have ready: photos of signage/storefront, a utility bill or lease in the business name at the address, business license/registration, and (for SABs) proof of service area. Document the legitimate operation; vague appeals are auto-rejected. As policies change, confirm current rules at the Google Business Profile guidelines.

Apple Business Connect (ABC)

Apple's free, self-serve listing manager — launched Jan 11, 2023 — covers business presence across Apple Maps, Siri, Wallet, Messages, Spotlight, and other Apple surfaces. Independent from GBP; you must claim separately.

Setup

  1. Sign in at businessconnect.apple.com with the Apple ID you want to associate with the business
  2. Search for the business location → claim → Apple verifies (typically by phone call, postcard, or document upload)
  3. Fill the place card: categories, hours, photos, logo, action button (call / website / order / book)
  4. Add Showcases — time-bound promotions, menu items, seasonal offers — these surface on the Maps place card

Why it matters

  • Apple Maps drives the default "directions" experience on >1B iOS devices
  • Siri uses ABC data to answer "is X open?" and "directions to nearest Y"
  • Wallet shows logo + place card data on Apple Pay receipts
  • iOS Spotlight (system-wide search) pulls from the same listing

Bing Places for Business (Microsoft + AI search)

Bing Places powers Bing Maps and contributes to Microsoft's web index, which has historically been one of the retrieval sources for ChatGPT's web search. The exact sourcing for AI search products evolves and is not publicly fixed, so don't model it as "ChatGPT = Bing Places." Treat Bing Places as one input among many (see Local visibility in AI search below). It's low effort and worth claiming, but it is not the single gateway to AI answers.

Setup

  1. Sign in at bing.com/forbusiness with a Microsoft account (the old bingplaces.com domain redirects there)
  2. Fastest path: import from GBP — Bing offers one-click import of any verified Google Business Profile
  3. Verify via phone, mail, or email
  4. Keep NAP identical to GBP and ABC

Local visibility in AI search (Google AI Overviews, ChatGPT, Perplexity, Copilot)

AI answers about local businesses are assembled from many signals, not one listing. As of mid-2026 the picture is still shifting (retrieval mixes — e.g. ChatGPT Search now leans on OpenAI's own crawl alongside licensed/Bing signals, and Google AI Overviews/AI Mode draw on the live web index plus the Knowledge Graph), so optimize breadth rather than betting on a single surface. Treat exact per-product sourcing as unstable — verify current behavior against each vendor's docs rather than this list:

  • Your verified map profiles — GBP, Apple Business Connect, Bing Places (consistent NAP, categories, hours, reviews).
  • Crawlable location pages on your own site with LocalBusiness JSON-LD, clear NAP, service areas, hours, and unique local content (AI engines cite and quote site text directly).
  • Prominent third-party directories & review platforms for your vertical (Yelp, TripAdvisor, Healthgrades, Avvo, etc.) — these are frequently quoted in AI answers.
  • Reviews and ratings across platforms — volume, recency, and sentiment feed both ranking and the summaries AI tools generate.
  • Structured, current data — accurate hours and "open now" status, phone, and address that agree everywhere.

No single channel makes you "visible" or "invisible" in AI search; entity confidence comes from consistent, corroborated signals across all of the above.

NAP Consistency

NAP = Name, Address, Phone. Keep it consistent everywhere:

  • Google Business Profile
  • Website footer and contact page
  • All directory listings
  • Social media profiles
  • Schema markup

Modern search and map systems normalize common abbreviations well — St./Street, Ste./Suite, Ave./Avenue rarely cause real harm on their own. What actually matters: a single canonical phone number (a different number per directory fragments call data and entity confidence), the exact legal/real-world business name (no added keywords), and the same physical address and suite. Fix genuine conflicts (wrong suite, old phone, a defunct duplicate listing); don't burn hours chasing St. vs Street micro-edits.

Local Citations

A citation = any mention of your NAP online. Priority order: (1) the structured-data aggregators that feed everyone else, (2) the big general directories, (3) vertical/industry directories, (4) local/geo directories (chamber of commerce, city business listings, local news). Quality and relevance beat raw volume — 20 authoritative, consistent citations outperform 200 spammy ones.

Tier 1 — data aggregators (do these first; they syndicate downstream)

  • US: Data Axle (Infogroup), Localeze (Neustar), Foursquare. (Acxiom no longer accepts direct free submissions — reach it via the others.)
  • UK: Central Index, Thomson Local.
  • Use a service to push aggregators: Yext, BrightLocal Citation Builder, Whitespark, or Moz Local. Pay-to-syndicate is the fastest clean-NAP path; alternatively submit manually to the named aggregators.

Tier 2 — major general directories

  • Global / US: Apple Maps (via ABC), Bing Places, Google Business Profile, Yelp, Facebook, Foursquare, Yellow Pages (YP.com), Better Business Bureau (BBB), Nextdoor, Tripadvisor (hospitality), MapQuest.
  • UK: Yell, Thomson Local, FreeIndex, Scoot, Cylex, 192.com.
  • Canada: Yellow Pages Canada (YP.ca), Canada411, n49.
  • Australia: Yellow Pages AU, True Local, Hotfrog, StartLocal.
  • DE/FR/EU: Das Örtliche & GelbeSeiten (DE), PagesJaunes (FR), Europages (B2B EU-wide), Cylex (multi-EU).

Tier 3 — vertical directories (pick those for your industry)

  • Medical/dental: Healthgrades, Zocdoc, Vitals, RateMDs, WebMD.
  • Legal: Avvo, FindLaw, Justia, Martindale, Lawyers.com.
  • Home services/contractors: Angi (Angie's List), HomeAdvisor, Houzz, Thumbtack, Porch.
  • Restaurants/hospitality: Tripadvisor, OpenTable, Zomato, The Fork (EU), Resy.
  • Hotels/travel: Booking.com, Expedia, Tripadvisor, Google Hotels.
  • Auto: Cars.com, CarGurus, DealerRater.
  • Real estate: Zillow, Realtor.com, Trulia (US); Rightmove, Zoopla (UK).

Tier 4 — local & niche

  • City/regional chamber of commerce, local business associations, BIDs, "best of <city>" lists, local newspaper business directories, university/community partner pages. These also tend to yield locally relevant backlinks, which matter more than a bare citation.

Audit & cleanup workflow

  1. Inventory existing citations and find inconsistencies/duplicates (BrightLocal, Moz Local, Whitespark, or manual "Business Name" "phone" searches).
  2. Fix or claim conflicting/duplicate listings (a duplicate with a wrong phone splits entity signals).
  3. Build missing Tier 1-2 citations, then relevant Tier 3-4.
  4. Re-audit quarterly; data aggregators repopulate stale info, so periodic checks prevent drift.

Local Schema

Add LocalBusiness schema to every location page. Minimal example (extend with Restaurant, Dentist, etc. subtypes when applicable):

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.com/locations/austin#business",
  "name": "Example Coffee Roasters — Austin",
  "url": "https://example.com/locations/austin",
  "telephone": "+1-512-555-0100",
  "image": "https://example.com/img/austin-store.jpg",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 Congress Ave",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": 30.2672, "longitude": -97.7431 },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "07:00", "closes": "18:00"
  }],
  "sameAs": [
    "https://www.google.com/maps/place/?q=place_id:ChIJ...",
    "https://maps.apple.com/?q=Example+Coffee+Roasters+Austin",
    "https://www.bing.com/maps?ss=ypid.YN..."
  ]
}
</script>

Building entity confidence with schema

There is no single "strongest" signal. Entity disambiguation comes from a coherent bundle that all agrees with your map profiles and citations:

  • A stable @id (a canonical URI you reuse everywhere you reference the entity — e.g. https://example.com/#org for the brand, …/locations/austin#business per location) so engines resolve every mention to the same node.
  • Accurate name, address (PostalAddress), telephone, geo, openingHoursSpecification, and areaServed for SABs — matching GBP/ABC/Bing exactly.
  • sameAs pointing to your authoritative profiles (Google/Apple/Bing map URLs, Wikipedia/Wikidata if you have entries, major directory and social profiles). This helps corroborate identity but is one signal among many — don't over-weight it.
  • Review data via aggregateRating/review (only mark up reviews genuinely shown on the page).
  • priceRange (the $$$$$ string above) is still valid for LocalBusiness, but Google increasingly prefers explicit pricing on Offer/Product/Service nodes where you have it; keep priceRange as a coarse hint, not your only price signal. Check current field support in the LocalBusiness structured-data docs (as of Jun 2026).

Pick the most specific type. LocalBusiness has subtypes — use them: Restaurant, Dentist, Attorney/LegalService, MedicalBusiness, AutoRepair, HomeAndConstructionBusiness, Plumber, HealthAndBeautyBusiness, Store, LodgingBusiness. Some unlock type-specific properties:

<!-- Restaurant: adds menu, servesCuisine, acceptsReservations -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "@id": "https://example.com/locations/austin#business",
  "name": "Example Trattoria — Austin",
  "servesCuisine": "Italian",
  "menu": "https://example.com/locations/austin/menu",
  "acceptsReservations": "https://example.com/locations/austin/book",
  "priceRange": "$$",
  "telephone": "+1-512-555-0100",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 Congress Ave", "addressLocality": "Austin",
    "addressRegion": "TX", "postalCode": "78701", "addressCountry": "US"
  }
}
</script>
<!-- Service-area business (no public storefront): hide address, declare areaServed -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://example.com/#business",
  "name": "Example Plumbing",
  "telephone": "+1-512-555-0123",
  "url": "https://example.com",
  "areaServed": [
    { "@type": "City", "name": "Austin" },
    { "@type": "City", "name": "Round Rock" }
  ],
  "address": { "@type": "PostalAddress", "addressLocality": "Austin", "addressRegion": "TX", "addressCountry": "US" }
}
</script>

For a multi-location brand, also publish one Organization node sitewide (logo, brand sameAs, contact points) and link each location's LocalBusiness to it via "parentOrganization": {"@id": "https://example.com/#org"}. Validate with the Rich Results Test and Schema.org validator. Note: LocalBusiness is not itself a rich-result type in Google — schema improves entity understanding, not a guaranteed SERP feature.

Review Management

  • Ask happy customers for reviews (email 1 week after purchase/service)
  • Respond to negative reviews: acknowledge, apologize, offer resolution offline
  • Never buy fake reviews (Google penalizes heavily)
  • Display reviews on your website (with Review schema)
  • Target: 4.0+ average, 50+ reviews for competitive niches

Geo-Targeted Content

For each location page:

  • Unique content — not boilerplate with the city name swapped (Google treats near-duplicate location pages as thin/spam). Write per-location specifics: this team, this neighborhood, parking/transit, local landmarks, real photos.
  • Local landmarks, events, community references; local testimonials from that area.
  • Embedded map for that exact location; click-to-call and a location-specific contact path.
  • Location-specific LocalBusiness schema with the location's @id.

Multi-Location SEO

Scaling past ~2 locations needs architecture, not copy-paste.

  • URL & locator architecture. Use a consistent, indexable pattern — /locations/<city>/ (or /<state>/<city>/), each a real crawlable page, linked from an HTML store locator with text links (not only a JS map). Avoid #-fragment or fully client-side locators that crawlers can't follow.
  • Canonicalization. Each location page self-canonicals. Watch for duplicate pages from faceted/tracking params — canonical to the clean URL. Never canonical many locations to one "main" page (you'll de-index the rest).
  • Avoid duplicate/thin pages. If two locations are near-identical, differentiate the content or you risk a thin-content filter. One indexable page per real location only.
  • Duplicate listings. Audit GBP/Bing/Apple for duplicate or stale listings per address; merge or remove. Duplicates split reviews and rankings.
  • Bulk verification & management. For 10+ locations, request chain/bulk verification in Google Business Profile (a single agency/brand account managing many listings) and manage via the API or a platform (Yext, Uberall, BrightLocal, SOCi) rather than per-listing manual edits. Apple Business Connect and Bing Places support bulk upload via spreadsheet/feed.
  • UTM & call tracking conventions. Standardize website-button UTMs per listing (e.g. ?utm_source=gbp&utm_medium=organic&utm_campaign=<location-slug>) so you can attribute traffic per location. If using call tracking, use a dynamic number insertion / forwarding number that displays your real local NAP number to crawlers and GBP — putting a different raw tracking number in the GBP profile fragments NAP; the canonical local number must stay primary.
  • Review-response SLA. Define and enforce a target (e.g. respond to every review within 24-48h, escalate ≤2-star within 4 business hours). At scale, route via a platform with templates + local approval so responses stay personal, not robotic.
  • Reporting. Track per-location pack rankings, GBP insights (calls, direction requests, website clicks), and organic location-page performance separately; a brand average hides locations that are tanking.