
LocalBusiness schema JSON-LD tells Google exactly who you are, where you are, and what you offer. This complete guide shows you how to implement it correctly for maximum local SEO impact.
If your Google Business Profile has been live for more than 6 months and you're still not showing up in the Local Pack, something specific is wrong. One of the most frequently missed fixes is LocalBusiness schema markup, the structured data on your website that tells Google's systems exactly what your business is, where it's located, and what it offers in machine-readable format.
Most local businesses have no schema markup at all. Some have broken schema that's actively misleading Google. A properly implemented LocalBusiness JSON-LD is one of the most reliable ways to give Google precise, authoritative information about your business, which directly improves your chances of appearing in Local Pack results, AI Overviews, and voice search responses.
LocalBusiness schema is structured data code that you add to your website to communicate your business information to search engines in a standardized format. Instead of relying on Google to extract your address, phone number, and hours from the visible text on your page, schema tells Google exactly what each piece of information is.
When implemented correctly, schema enables rich results in Google Search, star ratings, business hours, and other information displayed directly in search results. More importantly for local SEO, schema helps Google confidently match your website to your GBP listing, reinforcing your location data across two signals instead of one.
Schema also powers AI Overview extractions. Google's AI summarization systems prefer content that's structured and explicitly labeled, a business with correct LocalBusiness schema is significantly more likely to be cited in an AI Overview response than one without it.
๐ Flento Data: Local business websites with correctly implemented LocalBusiness schema received 28% more clicks from local search results than comparable sites without schema, attributed to higher trust signals and rich result eligibility.
Schema markup can be implemented in three formats: JSON-LD, Microdata, and RDFa. Google recommends JSON-LD for all schema implementation, and it's the format you should use.
JSON-LD (JavaScript Object Notation for Linked Data) is placed in a <script> tag and doesn't require modifying your HTML structure. This makes it easier to add, update, and maintain, and significantly reduces the risk of breaking your page layout when making schema changes.
Microdata and RDFa embed markup attributes directly into your HTML, which is more error-prone, harder to update, and more likely to create conflicts with your CMS or theme. Stick with JSON-LD.
Here's a complete LocalBusiness JSON-LD template for a single-location service business:
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Smith Plumbing",
"image": "https://smithplumbing.com/images/logo.jpg",
"url": "https://smithplumbing.com",
"telephone": "(512) 555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "1234 Main St Suite 200",
"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"
}
],
"priceRange": "$$",
"description": "Austin's licensed emergency plumbers, same-day service for drain clearing, pipe repair, and water heater replacement.",
"areaServed": {
"@type": "City",
"name": "Austin"
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Plumbing Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Emergency Plumbing"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Drain Cleaning"
}
}
]
},
"sameAs": [
"https://www.google.com/maps/place/your-gbp-url",
"https://www.yelp.com/biz/smith-plumbing",
"https://www.facebook.com/smithplumbing"
]
}
The sameAs array is particularly important, linking to your GBP and other citation profiles in the schema creates explicit co-citation signals that reinforce the connection between your website and your Maps listing.
โ ๏ธ Common Mistake: Using "LocalBusiness" as the
@typewhen a more specific type is available. Using "Plumber" instead of "LocalBusiness" gives Google more precise category information. Always use the most specific type available for your business (list in the next section).
Schema.org has over 200 LocalBusiness subtypes. Always use the most specific type available for your business. Here are the most common ones for local businesses:
| Business Type | Schema @type |
|---|---|
| Restaurant | Restaurant |
| Dental practice | Dentist |
| Doctor's office | Physician |
| Law firm | LegalService |
| Plumber | Plumber |
| HVAC company | HVACBusiness |
| Auto repair | AutoRepair |
| Gym/fitness center | ExerciseGym |
| Hair salon | HairSalon |
| Hotel | Hotel |
| Accountant | AccountingService |
| Real estate agent | RealEstateAgent |
| Veterinarian | VeterinaryCare |
| Pharmacy | Pharmacy |
If your business type isn't listed specifically, use "LocalBusiness" as a fallback. You can also use multiple types for businesses that span categories, a gym that also offers nutrition counseling could use both "ExerciseGym" and "HealthAndBeautyBusiness."
WordPress: The easiest approach is using a plugin like Yoast SEO (paid) or Schema Pro. Both have LocalBusiness schema configuration built in. Alternatively, add the JSON-LD code directly to your theme's header or footer using a custom code block.
Squarespace: Add the JSON-LD code block via Settings > Advanced > Code Injection in the header or footer section.
Wix: Use a Wix Custom Code block (requires Business plan or higher). Add it to every page in the site-wide code settings.
Shopify: Add JSON-LD via the theme's theme.liquid file in the <head> section, or use a schema app from the Shopify App Store.
Any platform: If you have access to the HTML, place the JSON-LD script block in the <head> section of your page. It works from anywhere in the HTML but <head> is conventional.
๐ฅ Quick Win: If you use Yoast SEO on WordPress, go to Yoast > Search Appearance > Local tab and fill in your business details. It generates the LocalBusiness schema automatically without requiring you to write JSON-LD manually.
Service-area businesses (SABs) without a public-facing storefront need to handle the address differently in their schema. You shouldn't publish your home address if you work from home, but you still need to communicate your service area to Google.
For SABs:
Example areaServed for a service-area business:
"areaServed": [
{"@type": "City", "name": "Austin"},
{"@type": "City", "name": "Round Rock"},
{"@type": "City", "name": "Cedar Park"}
]
This tells Google which cities you serve without publishing a home address, which is both a privacy consideration and a correct representation of how a service-area business operates.
๐ก Pro Tip: Add your service area cities to your schema AND to your GBP service area settings, using the same city names in both. Consistency between your schema and GBP signals increases Google's confidence in your geographic coverage.
FAQ schema is one of the highest-return schema investments for local businesses because it directly increases AI Overview extraction rates. When Google's AI systems parse your FAQ section and find it marked up with structured data, they pull those answers directly into AI responses for relevant queries.
FAQ schema format:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How quickly can you respond to a plumbing emergency in Austin?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Smith Plumbing offers same-day emergency plumbing service in Austin, TX. We typically arrive within 2 to 4 hours of your call for emergency service calls."
}
},
{
"@type": "Question",
"name": "Do you offer free estimates for plumbing work in Austin?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we provide free estimates for all non-emergency plumbing work. Call (512) 555-0100 to schedule your free estimate."
}
}
]
}
Add FAQ schema to your service pages, location pages, and any page with a genuine FAQ section. Every question-and-answer pair on your page that's marked up with FAQ schema is a candidate for AI Overview extraction.
After implementing schema, test it immediately:
Google Rich Results Test (search.google.com/test/rich-results): Paste your page URL and see exactly which schema types are detected and whether they're valid. This is the primary testing tool.
Schema Markup Validator (validator.schema.org): More detailed validation of specific schema code, useful for debugging errors.
Google Search Console: After Google crawls your pages, the "Enhancements" section in GSC shows which schema types have been detected across your site and flags any errors.
A correctly implemented LocalBusiness schema shows up as "Valid" in Rich Results Test with all required fields populated. Common errors include missing required fields, incorrect data types, or syntax errors in the JSON.
Using the wrong @type. "LocalBusiness" is the catch-all, but using it when a specific type is available loses the category signal. Always check for a more specific type first.
NAP in schema doesn't match GBP or website. The address, phone number, and business name in your schema must match your GBP exactly. Inconsistencies create conflicting signals.
Adding schema that isn't represented on the visible page. Schema should describe content that exists on the page. Adding review schema without visible reviews, or adding service schema for services you don't offer, creates misleading markup.
Not updating schema when business information changes. Hours, phone numbers, and addresses get updated on the website but the schema is forgotten. Both need to be updated simultaneously.
โ ๏ธ Common Mistake: Setting "openingHours" to match your GBP hours but forgetting to update the schema when you change your hours seasonally. Google catches the inconsistency and reduces confidence in both sources.
Flento's Google Business Profile Optimizer includes a schema consistency check that compares your website's LocalBusiness schema against your GBP data. If your schema phone number, address, or hours don't match your GBP, Flento flags the specific discrepancy, so you fix it once instead of discovering it months later when you're wondering why your ranking isn't improving.
<head> section of relevant pagesโ Done? Verify your schema consistency with Flento's GBP Optimizer โ [Try Flento free]
Is schema markup required for local SEO? Not technically required, but it's one of the highest-leverage technical local SEO investments available. Businesses without schema are less likely to appear in AI Overviews and rich search results, and they miss the co-citation signal between their website and GBP.
How often should I update my LocalBusiness schema? Whenever your business information changes: hours, phone number, address, or services. Schema should be kept current in real time, treat it the same as updating your GBP.
Can incorrect schema hurt my rankings? Yes. Incorrect or inconsistent schema, especially if it conflicts with your GBP, can reduce Google's confidence in your business data. Broken JSON-LD syntax can cause Google to ignore the schema entirely.
Do I need schema on every page of my website? LocalBusiness schema should be on your homepage at minimum. Service pages should have Service schema. Location pages should have LocalBusiness schema with location-specific details. FAQ sections should have FAQ schema.
What's the difference between schema and Open Graph tags? Schema markup communicates with search engines (Google, Bing). Open Graph tags communicate with social platforms (Facebook, Twitter) for link preview display. Both are useful but serve different purposes.