local-seo
Use this skill when optimizing for local search results - Google Business Profile management, local citations, NAP consistency, local schema markup (LocalBusiness), review management, local pack optimization, and geo-targeted content. Triggers on any task involving local search visibility, map pack rankings, multi-location SEO, or local business online presence.
marketing seolocal-seogoogle-business-profilecitationslocal-packreviewsWhat is local-seo?
Use this skill when optimizing for local search results - Google Business Profile management, local citations, NAP consistency, local schema markup (LocalBusiness), review management, local pack optimization, and geo-targeted content. Triggers on any task involving local search visibility, map pack rankings, multi-location SEO, or local business online presence.
local-seo
local-seo is a production-ready AI agent skill for claude-code, gemini-cli, openai-codex, and 1 more. Optimizing for local search results - Google Business Profile management, local citations, NAP consistency, local schema markup (LocalBusiness), review management, local pack optimization, and geo-targeted content.
Quick Facts
| Field | Value |
|---|---|
| Category | marketing |
| Version | 0.1.0 |
| Platforms | claude-code, gemini-cli, openai-codex, mcp |
| License | MIT |
How to Install
- Make sure you have Node.js installed on your machine.
- Run the following command in your terminal:
npx skills add AbsolutelySkilled/AbsolutelySkilled --skill local-seo- The local-seo skill is now available in your AI coding agent (Claude Code, Gemini CLI, OpenAI Codex, etc.).
Overview
Local SEO is the practice of optimizing a business's online presence to attract customers from geographically relevant searches. Unlike traditional SEO, which targets broad organic rankings, local SEO focuses on appearing in Google's Local Pack (the map results block), Google Maps, and location-based organic results. It is critical for any business serving customers in a physical location or a defined service area - restaurants, law firms, plumbers, retail stores, medical practices, and multi-location franchises all depend on local search visibility to drive foot traffic and phone calls.
Tags
seo local-seo google-business-profile citations local-pack reviews
Platforms
- claude-code
- gemini-cli
- openai-codex
- mcp
Related Skills
Pair local-seo with these complementary skills:
Frequently Asked Questions
What is local-seo?
Use this skill when optimizing for local search results - Google Business Profile management, local citations, NAP consistency, local schema markup (LocalBusiness), review management, local pack optimization, and geo-targeted content. Triggers on any task involving local search visibility, map pack rankings, multi-location SEO, or local business online presence.
How do I install local-seo?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill local-seo in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support local-seo?
This skill works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.
Maintainers
Generated from AbsolutelySkilled
SKILL.md
Local SEO
Local SEO is the practice of optimizing a business's online presence to attract customers from geographically relevant searches. Unlike traditional SEO, which targets broad organic rankings, local SEO focuses on appearing in Google's Local Pack (the map results block), Google Maps, and location-based organic results. It is critical for any business serving customers in a physical location or a defined service area - restaurants, law firms, plumbers, retail stores, medical practices, and multi-location franchises all depend on local search visibility to drive foot traffic and phone calls.
When to use this skill
Trigger this skill when the user:
- Wants to set up or optimize a Google Business Profile (GBP)
- Needs to audit or fix NAP (Name, Address, Phone) consistency across the web
- Asks how to rank higher in Google Maps or the local pack
- Wants to implement LocalBusiness schema markup on a website
- Needs a review generation or reputation management strategy
- Is managing SEO for multiple business locations
- Wants to optimize for "near me" or service-area searches
- Asks about local citations - building, auditing, or cleaning up duplicates
Do NOT trigger this skill for:
- Broad keyword research or national/global SEO (use
seo-masteryinstead) - Technical site performance issues like Core Web Vitals (use
technical-seo-engineering)
Key principles
Google Business Profile is the foundation - GBP is the single most impactful lever in local SEO. A fully optimized, actively managed profile outperforms a neglected one regardless of website quality.
NAP consistency is non-negotiable - Your business Name, Address, and Phone number must be identical across every citation, directory, and web property. Even minor variations (St. vs Street, Suite vs Ste) erode ranking signals.
Reviews are both a ranking factor and a conversion driver - The quantity, recency, and sentiment of reviews influence local pack rankings. A business with 200 reviews at 4.3 stars beats one with 20 reviews at 5.0 stars in most queries.
Relevance + proximity + prominence determine local pack rank - Google weighs how relevant your business is to the search, how close you are to the searcher, and how well-known you are (links, reviews, citations). You can compensate for poor proximity with strong relevance and prominence signals.
Local landing pages need unique, location-specific content - A page for each location must go beyond swapping a city name. Include local addresses, phone numbers, staff, testimonials, service-area descriptions, and embedded maps.
Core concepts
The Local Pack vs organic results - Local searches produce two types of results: the Local Pack (a map widget with 3 business listings) and standard organic results below it. GBP governs Local Pack rankings; your website governs organic local rankings. A strong local SEO strategy targets both.
Google's three local ranking factors - Google evaluates local results on relevance (does the business match what was searched?), distance (how close is it to the searcher?), and prominence (how well-known and trusted is the business online?). Prominence is the most controllable factor and is built through reviews, citations, links, and an active GBP.
GBP categories and attributes - The primary category is the strongest relevance signal Google uses. Choosing the wrong primary category (e.g. "Restaurant" vs "Italian Restaurant") is a common high-cost mistake. Attributes (outdoor seating, wheelchair accessible, accepts credit cards) improve relevance for filtered queries.
Local citations - Any online mention of your business NAP. Structured citations
are directory listings (Yelp, Yellow Pages, TripAdvisor). Unstructured citations are
mentions in blog posts or news articles. Both contribute to prominence signals.
See references/local-citations-schema.md for citation sources and schema.
Review signals - Google considers the total number of reviews, average rating, recency (a business that got 10 reviews last month outperforms one that got 50 two years ago), and review diversity across platforms (Google, Yelp, Facebook, industry directories). Responding to reviews is also tracked as an engagement signal.
Local link building - Backlinks from locally relevant sites (local chambers of commerce, local news outlets, community organizations) carry stronger local ranking weight than equivalent links from generic national sites.
Common tasks
Set up and optimize Google Business Profile
A complete GBP optimization covers these elements in priority order:
- Claim and verify the listing (postcard, phone, or email verification)
- Primary category - Choose the most specific category that accurately describes the business. This is the strongest GBP relevance signal.
- Business name - Use the exact legal business name. Do not append keywords.
- Address and service area - For service-area businesses, hide the address and define the service area by city, zip, or radius.
- Phone number - Use a local number (not a toll-free 800 number) that matches the number on your website and citations.
- Website URL - Link to the most relevant landing page, not always the homepage.
- Business description - Write 250-750 characters covering what you do, who you serve, and what makes you different. Include relevant keywords naturally.
- Photos - Upload at least 10 photos: exterior, interior, team, products/services. GBP listings with photos receive significantly more clicks and direction requests.
- Hours - Keep hours accurate and update for holidays. Inaccurate hours increase abandonment and can trigger negative reviews.
- Posts - Publish GBP posts (updates, offers, events) at least twice a month to signal active management.
- Q&A - Seed the Q&A section with your own questions and answers for common customer queries.
See references/google-business-profile.md for the complete GBP optimization guide.
Audit and fix NAP consistency
- Export all existing citations (use tools like BrightLocal, Whitespark, or Moz Local)
- Define the canonical NAP: the exact legal business name, full address format, and primary phone number
- Compare each citation against the canonical NAP
- Prioritize fixes on high-authority directories first: Google, Yelp, Facebook, Bing Places, Apple Maps, Foursquare, Yellow Pages
- Claim and update each listing directly (preferred) or use a citation management tool (Yext, BrightLocal) to push updates in bulk
- Delete or merge duplicate listings - duplicates split ranking signals and confuse customers
Implement LocalBusiness schema markup
Add JSON-LD structured data to every location page. This helps Google understand and display business information in search results (knowledge panels, rich results).
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Acme Plumbing Services",
"image": "https://www.acmeplumbing.com/images/logo.png",
"@id": "https://www.acmeplumbing.com/#business",
"url": "https://www.acmeplumbing.com",
"telephone": "+1-555-867-5309",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street, Suite 100",
"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": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "14:00"
}
],
"sameAs": [
"https://www.facebook.com/acmeplumbing",
"https://www.yelp.com/biz/acme-plumbing-austin"
]
}
</script>Use a specific @type when applicable: Plumber, Restaurant, LegalService,
MedicalBusiness, AutoRepair. Specific types unlock additional schema properties
and can trigger richer search features.
See references/local-citations-schema.md for multi-location and review schema patterns.
Build a review generation strategy
- Identify the right moment - Ask for reviews at peak satisfaction: immediately after service completion, after a successful project delivery, or following a compliment from the customer.
- Make it easy - Create a short review link using the Google Place ID generator
(
https://search.google.com/local/writereview?placeid=PLACE_ID) and shorten it. - Ask directly - Staff should verbally ask satisfied customers and follow up with a text or email containing the review link. Multi-step friction kills conversion.
- Diversify platforms - Prioritize Google, then industry-specific platforms (TripAdvisor for restaurants, Avvo for lawyers, Healthgrades for doctors).
- Respond to every review - Thank positive reviewers by name. Respond to negative reviews within 24 hours with empathy and a path to resolution. Never argue.
- Never buy or incentivize reviews - Violates Google's terms of service and can result in listing suspension or review removal.
Create location-specific landing pages
Each location page must have unique, substantive content - not a template with a city name swapped in. Include:
- The full NAP for that location embedded in visible text and in LocalBusiness schema
- A Google Maps embed for that specific address
- Location-specific content: local staff bios, local community involvement, neighborhood descriptions, local testimonials
- Location-specific FAQs addressing local queries ("Do you serve the South Austin area?")
- Internal links to the main services pages
- An
<h1>that includes the service and location (e.g. "Plumbing Services in Austin, TX") - A unique page title and meta description referencing the location
Manage multi-location SEO
For businesses with 2+ locations:
- Create a
/locations/hub page listing all locations with links to individual location pages - Each location page gets its own GBP listing - never use one listing for multiple addresses
- Use
sameAsin schema to connect each location's GBP URL, Yelp page, and Facebook page to the corresponding location landing page - Build citations separately for each location - each location needs its own NAP
- Manage review responses per-location - assign a team member per location
- Use UTM parameters on GBP website links to track traffic and conversions per location
Optimize for "near me" and service-area searches
"Near me" queries are handled almost entirely by GBP proximity and prominence - the words "near me" do not need to appear on your website. To rank for them:
- Ensure GBP service area is accurately defined
- Maximize review count and recency (the strongest prominence signal)
- Build local citations to strengthen the prominence score
- On-page: use city/neighborhood names naturally in content, titles, and headings
- Embed a Google Map on the contact page - it reinforces the location association
Anti-patterns / common mistakes
| Mistake | Why it's wrong | What to do instead |
|---|---|---|
| Keyword stuffing in GBP business name | Violates Google guidelines and risks listing suspension | Use the exact legal business name only |
| Duplicate GBP listings | Splits ranking signals and confuses customers | Find and merge or remove duplicates using the GBP dashboard or contacting Google support |
| Inconsistent NAP across directories | Dilutes citation signals and reduces Google's confidence in the data | Audit all citations against canonical NAP and correct them |
| Buying or incentivizing reviews | Violates Google's Terms of Service; can result in review removal or suspension | Earn reviews organically by asking at moments of peak satisfaction |
| Thin location pages (city-swap templates) | Google detects near-duplicate content and ranks these poorly | Write unique content for each location page with local specifics |
| Using a toll-free 800 number on GBP | Signals a national operation, not a local business; weakens local relevance | Use the local phone number for GBP and citations |
| Ignoring or deleting negative reviews | Unresponded negative reviews signal poor customer service | Respond to every negative review professionally and offer resolution |
| Setting GBP address for a virtual office or UPS Store | Violates GBP guidelines and risks suspension | Only use addresses where customers can physically visit during listed hours |
| Neglecting GBP after initial setup | Active listings with recent posts, photos, and review responses outperform stale ones | Schedule monthly GBP maintenance: new photos, posts, and review responses |
Gotchas
GBP suspensions happen silently and without clear reasons - Google can suspend a listing for guideline violations (keyword-stuffed name, virtual office address, duplicate listing) without email notice. The listing simply stops showing. Monitor GBP health weekly and always check the "Issues" tab. Recovery requires a reinstatement request through Google Business Profile support, which can take 2-6 weeks.
NAP inconsistencies from data aggregators propagate indefinitely - The four major data aggregators (Neustar Localeze, Foursquare, Data Axle, Acxiom) feed hundreds of directories automatically. A wrong address they have on file will keep repopulating corrected listings unless you fix it at the aggregator level. Tools like Yext or BrightLocal push updates to aggregators directly; manual directory fixes alone are insufficient.
Keyword stuffing in the business name is a high-risk tactic that works short-term - "Joe's Plumbing - Austin Emergency Plumber" may rank better temporarily, but it violates GBP guidelines and competitors can report it. Google processes reports and the listing name gets reverted or the listing suspended. Use the exact legal name.
Review gating violates Google's terms and triggers penalties - "Review gating" is asking customers to rate satisfaction before deciding whether to send them to Google reviews, filtering out unhappy customers. Google explicitly prohibits this. Only direct customers to review platforms without pre-screening.
Multi-location businesses that share a phone number confuse Google's signals - Using a single tracking or call center number across multiple locations makes it impossible for Google to associate each location with a unique NAP. Use unique local numbers per location, even if you route them centrally. Use call tracking at the subdomain/campaign level, not by replacing the primary GBP number.
References
For detailed content on specific topics, read the relevant file from references/:
references/google-business-profile.md- Complete GBP optimization guide: categories, attributes, posts, photos, Q&A, products/services, verification, insights, and multi-location management. Load when doing deep GBP work.references/local-citations-schema.md- Citation building strategy, top citation sources by industry, NAP audit process, and complete LocalBusiness JSON-LD schema patterns including multi-location, review, and service-area variants. Load when implementing schema or managing citations at scale.
Only load a references file if the current task requires deep detail on that topic.
References
google-business-profile.md
Google Business Profile (GBP) Optimization Guide
Google Business Profile (formerly Google My Business) is Google's free tool for managing how a business appears in Google Search and Google Maps. It is the single most impactful lever in local SEO - a well-managed GBP listing outperforms a neglected one regardless of website strength. This guide covers every major GBP element and how to optimize each.
Verification
Before any optimization can appear publicly, the listing must be verified. Google offers several verification methods depending on the business type:
| Method | Typical Use Case | Timeline |
|---|---|---|
| Postcard | Default for most businesses | 5-14 days |
| Phone call | Available for some business types | Immediate |
| Available for some business types | Immediate | |
| Video verification | New in 2023; increasingly common | 1-3 days |
| Bulk verification | For businesses with 10+ locations | 1-2 weeks |
For bulk verification, download the bulk upload template from GBP, complete the spreadsheet with all location data, submit it, and then go through a review process with a Google representative.
Pitfall: If you receive a postcard but enter the code after 30 days, the code expires and a new one must be requested.
Primary Category
The primary category is the most powerful relevance signal in GBP. Google uses it to determine which searches the listing is eligible to appear in.
Rules:
- Choose the most specific category that accurately describes the core business. "Pizza Restaurant" beats "Restaurant" if you primarily sell pizza.
- Do not choose a category based on what you want to rank for - choose what the business actually is. Misrepresenting the category violates GBP guidelines.
- Add secondary categories for additional services, but they carry less weight.
Examples of primary vs secondary:
| Business | Primary Category | Secondary Categories |
|---|---|---|
| Italian dine-in restaurant | Italian Restaurant | Restaurant, Catering Service |
| HVAC contractor | HVAC Contractor | Air Conditioning Repair, Heating Contractor |
| Family law firm | Family Law Attorney | Divorce Lawyer, Child Custody Attorney |
| Yoga studio | Yoga Studio | Fitness Center, Pilates Studio |
Check competitors' categories using a browser extension like GMB Everywhere or PlePer to benchmark which categories top-ranked competitors are using.
Business Name
Use the exact legal business name - nothing more, nothing less.
Do NOT add:
- Keywords ("Best Plumber Austin" instead of "Austin Plumbing Co.")
- Location ("Joe's Pizza NYC" if the legal name is "Joe's Pizza")
- Taglines ("Acme Auto - Fast & Affordable")
Adding keywords to your business name violates GBP guidelines. Competitors can report the listing, leading to suspension or forced name changes. The ranking benefit of keyword stuffing in the name is also diminishing as Google has gotten better at detecting it.
Address and Service Area
Storefront businesses (customers come to you): Enter the full physical address and keep the address visible.
Service-area businesses (you go to customers - plumbers, cleaners, dog walkers):
- Hide the physical address if you do not serve customers at that address
- Define the service area by city, county, zip code, or radius
- You can define up to 20 service areas
- Do not use a PO Box or UPS Store address - Google requires a real physical location
Hybrid businesses (customers come AND you go to them - dentist who also does house calls): Show the address and also define a service area.
Phone Number
- Use a local phone number (local area code). Toll-free 800 numbers signal a national call center, not a local business.
- The phone number on GBP must match the phone number on your website and citations exactly (same formatting helps, but Google normalizes formats).
- Add secondary/additional phone numbers if the business has direct lines for different departments.
Website URL
Link to the most relevant page, not always the homepage:
- Single-location business: homepage is usually correct
- Multi-location business: each GBP listing should link to the corresponding
location landing page (
/locations/austin/not just/) - Add UTM parameters to track GBP traffic separately in analytics:
?utm_source=google&utm_medium=organic&utm_campaign=gbp
Business Description
The description (up to 750 characters, Google displays ~250 before truncation) is not a direct ranking factor, but it influences click-through rate and conversions.
Write a description that:
- Explains what the business does, who it serves, and what differentiates it
- Includes 2-3 relevant keywords naturally - not stuffed
- Does NOT include: URLs, HTML, special characters, promotional content like "call now" or "best prices", or content that mimics GBP features
Structure:
- First sentence: What the business is (include primary keyword)
- Second/third sentence: Who it serves and the key differentiator
- Closing sentence: Call to action or area served
Attributes
Attributes are additional details that appear on the GBP listing. They fall into two types:
Subjective attributes (user-sourced): Google aggregates customer answers (e.g. "Good for groups", "Casual atmosphere"). You cannot control these directly.
Factual attributes (owner-set): You control these. Examples:
- Accessibility: wheelchair accessible entrance, accessible parking
- Amenities: free Wi-Fi, outdoor seating, restroom available
- Payments: accepts credit cards, NFC mobile payments
- Service options: dine-in, takeout, delivery, drive-through, curbside pickup
- Health & safety (COVID-era attributes, may still be relevant)
Available attributes vary by business category. Always fill in every applicable attribute - they improve relevance for filtered queries (e.g. "restaurants with outdoor seating near me").
Photos
Photos significantly impact click-through rate and consumer trust. GBP listings with photos receive an estimated 42% more direction requests and 35% more website clicks.
Minimum photo set:
- Cover photo: the image displayed prominently (750x750px or larger, 16:9 preferred)
- Logo: your business logo (square format, min 250x250px)
- Exterior: the building/storefront from the street, from each approach angle
- Interior: main area, seating, reception, or workspace
- Products/services: your most popular offerings
- Team: staff photos build trust
Ongoing photo strategy:
- Add at least 2 new photos per month to signal active management
- Label photos (a GBP feature) with descriptive file names before upload
- Do NOT use stock photos - use real photos of the actual business
- Remove low-quality or misleading photos using the "Flag as inappropriate" option
Video: GBP also supports short video (30 seconds, 75MB max). A quick walkthrough or team introduction outperforms most static photos for engagement.
Business Hours
Inaccurate hours are one of the most common causes of negative reviews ("I drove there and it was closed"). Keep hours maintained:
- Set primary business hours accurately
- Set special hours for holidays before the holiday occurs - GBP sends reminders
- Use "More hours" to add specific hours for different services (e.g. "Drive-through open 6am-midnight" separate from main hours)
- If closed temporarily, use the "Temporarily closed" feature rather than deleting hours
GBP Posts
Posts appear in the Knowledge Panel and are visible for 7 days (event posts until the event ends). They signal active management and can directly drive conversions.
Post types:
| Type | Best Used For | Lifespan |
|---|---|---|
| Update | News, announcements, new services | 7 days |
| Offer | Discounts, promotions, coupons | Until offer end date |
| Event | Workshops, open houses, sales events | Until event end date |
| Product | Highlighting specific products/services | Until removed |
Post best practices:
- Post at least twice per month (weekly is better)
- Include a clear CTA button: "Book", "Order online", "Call now", "Learn more"
- Use real photos (not stock) in each post
- Keep copy concise: 150-300 characters performs best
- Do NOT repeat the same post - fresh content matters
Q&A
The Q&A section is crowdsourced - anyone can ask or answer. This creates risk: inaccurate answers can mislead customers and damage trust.
Proactive Q&A management:
- Seed the Q&A with your own questions and answers before customers do. Log in as the business owner and post the most common questions your staff hears.
- Upvote your own Q&A answers to surface them at the top
- Check Q&A weekly and answer new questions promptly (answered Q&As get more engagement)
- Flag and report inaccurate third-party answers
High-value Q&A seeds:
- "Do you offer free estimates?" / "Yes, we offer free on-site estimates."
- "Do you accept insurance?" / "Yes, we work with most major insurance providers."
- "Is parking available?" / "Yes, free parking is available in the lot behind the building."
- "Do you serve [neighborhood]?" / "Yes, we serve [list of neighborhoods/cities]."
Products and Services
Services: Add every service you offer in the Services section. Include a name, description, and optional price. Services appear on the listing and help Google understand what the business offers.
Products: Retail businesses and product-focused businesses should add products with photos, descriptions, and prices. Products appear in the Shopping panel on the listing and can appear in Google Shopping.
Adding services and products provides additional content for Google to match against search queries and can significantly expand the range of queries the listing appears in.
Booking Links and Messaging
Booking: If the business uses a supported booking platform (e.g. Booksy, Square Appointments, OpenTable, Acuity), connect it to GBP to enable in-SERP booking. This dramatically reduces friction and increases conversion.
Messaging: Enable GBP messaging to allow customers to send text messages from the listing. Response time is displayed publicly - a slow response time is worse than not having messaging at all. Only enable if the business can respond within 1-2 hours consistently.
Multi-Location Management
For businesses with multiple locations, use the GBP Business Group (formerly Agency dashboard):
- Create a GBP Business Group at
business.google.com - Add all locations to the group
- Bulk import locations using the bulk upload template for 10+ locations
- Assign manager roles to location-level staff without giving them access to all locations
- Use location groups for bulk updates (hours, photos, posts) across all locations
Important: Each location must have a unique GBP listing with unique NAP data. Do not add two locations to a single listing. Do not use one shared phone number across multiple listings if they have different local numbers.
GBP Insights and Analytics
GBP Insights (now integrated into the new GBP dashboard) provides:
| Metric | What It Tells You |
|---|---|
| Search queries | Which terms customers used to find the listing |
| Views | How many times the listing appeared in Search and Maps |
| Direction requests | How often customers asked for directions |
| Phone calls | How often customers called from the listing |
| Website visits | Clicks to the website link |
| Photo views | Engagement with your photos vs competitor photos |
Using insights:
- High direction requests + low website visits = customers are coming in-person; optimize for conversion at the physical location
- Low views = fix relevance signals (category, description, keywords in posts)
- High calls relative to views = the listing is converting well but reach is limited; invest in citation building and review generation to improve prominence
Connect GBP to Google Analytics 4 using UTM parameters on the website URL to track GBP-sourced traffic through the full conversion funnel.
Common GBP Issues and Fixes
| Issue | Likely Cause | Fix |
|---|---|---|
| Listing suspended | Guideline violation (keyword-stuffed name, fake address, prohibited category) | Review GBP guidelines, correct the violation, submit a reinstatement request |
| Duplicate listing found | Multiple team members created listings, or an old listing exists | Use the "Suggest an edit" option to report the duplicate, or contact Google support |
| Wrong business information displayed | A user edited the listing or information pulled from a third-party source | Log in to GBP and correct the information; flag incorrect edits |
| Reviews disappeared | Google bulk-removed reviews flagged as spam or policy violations | Legitimate reviews can sometimes be caught; request review reinstatement via support |
| Listing not ranking in local pack | Insufficient prominence (reviews, citations) or proximity disadvantage | Build citations, generate reviews, add GBP content; proximity cannot be changed |
local-citations-schema.md
Local Citations and Schema Markup
Local citations are any online mention of a business's Name, Address, and Phone number (NAP). They are a key prominence signal for Google's local ranking algorithm. This file covers citation strategy, the NAP audit process, top citation sources, and complete LocalBusiness JSON-LD schema patterns.
Citations: Structured vs Unstructured
Structured citations are formal directory listings where the NAP appears in defined fields. Examples: Yelp, Yellow Pages, Foursquare, TripAdvisor, Angi.
Unstructured citations are mentions in editorial content - blog posts, news articles, local event listings, chamber of commerce pages - where the NAP appears in free-form text rather than structured fields.
Both types contribute to prominence, but structured citations on high-authority directories carry more weight because they are more easily parsed and verified by Google's crawlers.
The NAP Audit Process
Run a citation audit before building new citations. Adding more inconsistent citations makes the problem harder to fix.
Step 1: Define your canonical NAP
Decide on one exact format that will be used everywhere:
Business Name: Acme Plumbing Services (no "Inc." unless it's the legal name)
Address: 123 Main Street, Suite 100 (spell out Street, not St.)
Austin, TX 78701
Phone: (512) 867-5309 (choose one format and stick to it)
Website: https://www.acmeplumbing.com (include trailing slash or not - be consistent)Write this down. Every team member and every tool must use this exact format.
Step 2: Discover existing citations
Use a combination of methods:
- Search Google for
"business name" "phone number"and"business name" "address" - Use citation discovery tools: BrightLocal Citation Tracker, Whitespark Local Citation Finder, or Moz Local
- Manually check the 20 most important directories (list below)
Step 3: Categorize discrepancies
Create a spreadsheet with columns:
Directory | URL | Current Name | Current Address | Current Phone | Status
Status options: Correct, Needs Update, Needs Claim, Duplicate, Needs Removal
Step 4: Fix in priority order
- Claim and correct the top-tier directories first (list below)
- Claim and correct industry-specific directories
- Fix or remove duplicates
- Build new citations on sites where the business is missing
Step 5: Ongoing maintenance
Audit citations quarterly. Business moves, phone number changes, and staff turnover cause drift. A citation management platform (Yext, BrightLocal, Moz Local) can push updates in bulk and monitor for changes.
Top Citation Sources by Priority
Tier 1: Universal (all business types)
These are the highest-authority citations and should be correct before anything else:
| Directory | URL | Notes |
|---|---|---|
| Google Business Profile | business.google.com | Highest priority; governs local pack |
| Yelp | yelp.com | High consumer trust; important for reviews |
| facebook.com | Business pages index heavily | |
| Bing Places | bingplaces.com | Powers Bing, Alexa, Cortana |
| Apple Maps | mapsconnect.apple.com | iOS default; growing share |
| Foursquare | foursquare.com | Powers many other directories |
| Yellow Pages | yellowpages.com | Legacy authority |
| Better Business Bureau | bbb.org | Trust signal, especially for service businesses |
| Mapquest | mapquest.com | Still indexed by search engines |
Tier 2: High-Authority General Directories
| Directory | Notes |
|---|---|
| Angi (formerly Angie's List) | Strong for home services |
| Thumbtack | Lead generation + citation |
| Citysearch | Aggregated by many data providers |
| Superpages | Older but still indexed |
| Hotfrog | International reach |
| Manta | Small business focus |
| Cylex | B2B and local |
Tier 3: Industry-Specific Directories
Restaurants and food service:
- TripAdvisor, OpenTable, Zomato, Grubhub, DoorDash, Uber Eats, MenuPages
Healthcare and medical:
- Healthgrades, ZocDoc, WebMD Physician Directory, Vitals, RateMDs, Psychology Today
Legal services:
- Avvo, FindLaw, Justia, Lawyers.com, Super Lawyers, Martindale-Hubbell
Home services (plumbing, HVAC, electrical, etc.):
- Angi, HomeAdvisor, Houzz, Porch, Thumbtack, Networx
Auto services:
- AutoMD, RepairPal, CarGurus, DealerRater (for dealerships)
Real estate:
- Zillow, Trulia, Realtor.com, Homes.com
Hotels and hospitality:
- TripAdvisor, Booking.com, Expedia, Hotels.com, Airbnb
Beauty and wellness:
- StyleSeat, Vagaro, Booksy, Mindbody, Treatwell
Tier 4: Local Citations
- Local Chamber of Commerce website
- City or county business directory
- Local newspaper business listings
- Local blog mentions and sponsorship pages
- Community organization directories
Local citations from geographically relevant sites carry stronger local ranking weight than equivalent citations from national generic directories.
LocalBusiness Schema: Core Pattern
Use JSON-LD embedded in a <script> tag in the <head> or at the end of <body>.
Do NOT use Microdata or RDFa - JSON-LD is Google's preferred format.
Basic LocalBusiness
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Acme Plumbing Services",
"image": [
"https://www.acmeplumbing.com/images/storefront.jpg",
"https://www.acmeplumbing.com/images/team.jpg"
],
"@id": "https://www.acmeplumbing.com/#business",
"url": "https://www.acmeplumbing.com",
"telephone": "+15128675309",
"email": "contact@acmeplumbing.com",
"priceRange": "$$",
"currenciesAccepted": "USD",
"paymentAccepted": "Cash, Credit Card",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street, Suite 100",
"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": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "14:00"
}
],
"sameAs": [
"https://www.facebook.com/acmeplumbing",
"https://www.yelp.com/biz/acme-plumbing-austin",
"https://g.page/acme-plumbing-austin"
]
}
</script>Use Specific @type When Available
Replace "LocalBusiness" with the most specific applicable type. Specific types
unlock additional schema properties and can trigger enhanced search features.
Common specific types:
Plumber,Electrician,GeneralContractor,HVACBusiness,LocksmithRestaurant,FastFoodRestaurant,CafeOrCoffeeShop,Bakery,BarOrPubMedicalBusiness,Dentist,Physician,Optician,PharmacyLegalService,AttorneyAutomotiveBusiness,AutoRepair,CarDealerBeautySalon,HairSalon,NailSalon,SpaOrBeautyServiceRealEstateAgentFinancialService,AccountingService,InsuranceAgencyChildCareFitnessCenter,SportsClubHotel,LodgingBusinessStore,GroceryStore,ClothingStore,BookStore
Multi-Location Schema
For businesses with multiple locations, each location page gets its own schema
block. Use @id to make each entity distinct and use parentOrganization to
link branches to the main company.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Acme Plumbing Services - South Austin",
"@id": "https://www.acmeplumbing.com/locations/south-austin/#business",
"url": "https://www.acmeplumbing.com/locations/south-austin/",
"telephone": "+15128675310",
"address": {
"@type": "PostalAddress",
"streetAddress": "456 South Lamar Blvd",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78704",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2500,
"longitude": -97.7600
},
"parentOrganization": {
"@type": "Organization",
"name": "Acme Plumbing Services",
"@id": "https://www.acmeplumbing.com/#organization",
"url": "https://www.acmeplumbing.com"
},
"sameAs": [
"https://www.yelp.com/biz/acme-plumbing-south-austin",
"https://g.page/acme-plumbing-south-austin"
]
}
</script>Important: The @id must be unique per location. Use the location page URL
with a fragment identifier (#business). Do not reuse the same @id across
multiple location pages.
Service Area Schema
For service-area businesses (no storefront or hidden address), use areaServed
instead of a fixed geographic coordinate:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Acme Plumbing Services",
"@id": "https://www.acmeplumbing.com/#business",
"url": "https://www.acmeplumbing.com",
"telephone": "+15128675309",
"areaServed": [
{
"@type": "City",
"name": "Austin",
"sameAs": "https://en.wikipedia.org/wiki/Austin,_Texas"
},
{
"@type": "City",
"name": "Round Rock"
},
{
"@type": "City",
"name": "Cedar Park"
},
{
"@type": "AdministrativeArea",
"name": "Travis County"
}
],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "19:00"
}
]
}
</script>Note: Do NOT include an address when the physical address is hidden on GBP.
Inconsistency between schema address and GBP data is a trust signal mismatch.
Review Schema
Add aggregate review data to LocalBusiness schema to display star ratings in
search results. The aggregateRating is computed from your review data:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Acme Plumbing Services",
"@id": "https://www.acmeplumbing.com/#business",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "247",
"bestRating": "5",
"worstRating": "1"
},
"review": [
{
"@type": "Review",
"author": {
"@type": "Person",
"name": "Jane D."
},
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"datePublished": "2024-11-15",
"reviewBody": "Fast response, professional service. Fixed our burst pipe within 2 hours."
}
]
}
</script>Warning: Only include reviews that are genuine and were given by real customers.
Do not fabricate review items in schema - Google cross-references these against
actual review platforms and can apply manual penalties for manipulative markup.
Only include aggregateRating if the page genuinely represents a business and
the rating data reflects real reviews. Pages with fabricated ratings can receive
a rich result penalty.
Schema Validation
Always validate schema markup before publishing:
Google Rich Results Test:
search.google.com/test/rich-results- Tests whether the page is eligible for rich results
- Shows detected schema entities and any errors
Schema Markup Validator:
validator.schema.org- Validates against the full Schema.org specification
- More thorough than the Rich Results Test for edge cases
Google Search Console: After deployment, check the "Enhancements" section in Search Console for structured data errors and warnings at scale
Common schema errors:
| Error | Cause | Fix |
|---|---|---|
| Missing required field | A required property (e.g. name, address) is absent |
Add the missing property |
| Invalid value type | A number field contains a string, or a URL field is malformed | Correct the value format |
| Duplicate @id | Two entities share the same @id value |
Make @id values unique per entity |
| Invalid phone format | Phone not in E.164 format (+1XXXXXXXXXX) |
Use E.164 format or local format consistently |
Frequently Asked Questions
What is local-seo?
Use this skill when optimizing for local search results - Google Business Profile management, local citations, NAP consistency, local schema markup (LocalBusiness), review management, local pack optimization, and geo-targeted content. Triggers on any task involving local search visibility, map pack rankings, multi-location SEO, or local business online presence.
How do I install local-seo?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill local-seo in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support local-seo?
local-seo works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.