Local Business Schema: Complete Implementation Guide
If your business has a physical location that customers visit, LocalBusiness schema is the single most impactful piece of structured data you can implement. It tells search engines and AI systems where you are, when you're open, what you offer, and how to contact you. Without it, AI engines have to guess these details from unstructured text, and they often guess wrong.
This guide covers the full Schema.org LocalBusiness specification with production-ready JSON-LD examples for the most common business types: restaurants, retail stores, medical practices, and professional services.
Understanding the LocalBusiness Type Hierarchy
LocalBusiness is a subtype of both Organization and Place in Schema.org's hierarchy. This dual inheritance means it carries properties from both: organizational identity (name, logo, sameAs) and physical location data (address, geo coordinates, opening hours).
The hierarchy matters because search engines and AI systems use it for categorization. A Restaurant inherits from FoodEstablishment, which inherits from LocalBusiness, which inherits from Organization and Place. Each level adds specificity. Here are the most commonly used subtypes:
| Business Type | Schema.org Type | Key Additional Properties |
|---|---|---|
| Restaurant, cafe, bar | Restaurant | servesCuisine, hasMenu, acceptsReservations |
| Retail store | Store | paymentAccepted, currenciesAccepted |
| Doctor, dentist, clinic | MedicalBusiness | medicalSpecialty, isAcceptingNewPatients |
| Lawyer, accountant, consultant | ProfessionalService | knowsAbout, hasOfferCatalog |
| Auto dealer, repair shop | AutoDealer / AutoRepair | makesOffer |
| Hotel, motel, B&B | LodgingBusiness | starRating, checkinTime, checkoutTime |
| Gym, yoga studio | SportsActivityLocation | event |
| Beauty salon, barber | BeautySalon / BarberShop | hasOfferCatalog |
Restaurant (or even PizzaPlace if applicable), not generic LocalBusiness. Specific types help AI engines match your business to specific user queries. According to Google's local business documentation, using the most specific type enables richer search features.
Restaurant Schema: Complete Example
Restaurants benefit enormously from structured data because AI engines frequently answer queries like "best Italian restaurant near downtown" or "restaurants open late on weekdays." Here is a production-ready Restaurant schema with all recommended properties:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Bella Cucina Trattoria",
"alternateName": "Bella Cucina",
"url": "https://bellacucinatrattoria.com",
"image": [
"https://bellacucinatrattoria.com/images/storefront.jpg",
"https://bellacucinatrattoria.com/images/interior.jpg",
"https://bellacucinatrattoria.com/images/pasta-dish.jpg"
],
"logo": {
"@type": "ImageObject",
"url": "https://bellacucinatrattoria.com/logo.png",
"width": 250,
"height": 250
},
"description": "Family-owned Italian trattoria serving handmade pasta, wood-fired pizza, and seasonal Italian dishes in downtown Portland since 2008.",
"servesCuisine": ["Italian", "Mediterranean"],
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "742 NW Everett Street",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97209",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.5265,
"longitude": -122.6816
},
"telephone": "+1-503-555-0142",
"email": "info@bellacucinatrattoria.com",
"hasMap": "https://maps.google.com/?cid=12345678901234567890",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "11:30",
"closes": "21:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "11:30",
"closes": "22:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "12:00",
"closes": "21:00"
}
],
"hasMenu": {
"@type": "Menu",
"url": "https://bellacucinatrattoria.com/menu",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Pasta",
"description": "Handmade fresh daily"
},
{
"@type": "MenuSection",
"name": "Pizza",
"description": "Wood-fired in our imported Neapolitan oven"
}
]
},
"acceptsReservations": "True",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "847",
"bestRating": "5",
"worstRating": "1"
},
"sameAs": [
"https://www.yelp.com/biz/bella-cucina-trattoria-portland",
"https://www.tripadvisor.com/Restaurant_Review-bella-cucina",
"https://www.instagram.com/bellacucinapdx",
"https://www.facebook.com/bellacucinatrattoria"
],
"paymentAccepted": "Cash, Credit Card, Apple Pay, Google Pay",
"currenciesAccepted": "USD",
"smokingAllowed": false,
"isAccessibleForFree": false,
"amenityFeature": [
{"@type": "LocationFeatureSpecification", "name": "Outdoor seating", "value": true},
{"@type": "LocationFeatureSpecification", "name": "Wheelchair accessible", "value": true},
{"@type": "LocationFeatureSpecification", "name": "Free Wi-Fi", "value": true},
{"@type": "LocationFeatureSpecification", "name": "Parking available", "value": true}
]
}
</script>
Key Properties Explained
servesCuisine: An array of cuisine types. Be specific. "Italian" and "Mediterranean" are better than just "European." AI engines use this property when answering cuisine-specific queries. The Schema.org specification accepts free-form text strings.
priceRange: Use the dollar-sign convention ($, $$, $$$, $$$$). AI engines map this to budget categories when users ask for restaurants at specific price points.
openingHoursSpecification: Use the structured format with separate objects per schedule group. This is far more reliable than the shorthand openingHours property. AI engines need accurate hours to answer "Is X open right now?" queries. Per Google's guidelines, this structured format is preferred.
hasMenu: Link to your menu page. Some AI engines can parse menu items when constructing recommendations. A structured Menu object with MenuSection children provides richer data than a simple URL.
geo: Latitude and longitude coordinates. Critical for "near me" queries in both traditional and AI search. Always verify these are accurate to your actual storefront location.
Retail Store Schema: Complete Example
Retail businesses need schema that communicates inventory breadth, brand affiliations, and service capabilities. Here is a production-ready Store schema:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Store",
"name": "Summit Outdoor Gear",
"url": "https://summitoutdoorgear.com",
"image": "https://summitoutdoorgear.com/images/storefront.jpg",
"logo": "https://summitoutdoorgear.com/logo.png",
"description": "Independent outdoor retailer specializing in hiking, climbing, and camping equipment. Expert staff with 50+ years combined trail experience. Gear repair and rental services available.",
"address": {
"@type": "PostalAddress",
"streetAddress": "1200 Pearl Street",
"addressLocality": "Boulder",
"addressRegion": "CO",
"postalCode": "80302",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.0177,
"longitude": -105.2812
},
"telephone": "+1-303-555-0198",
"priceRange": "$$-$$$",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "19:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "10:00",
"closes": "17:00"
}
],
"brand": [
{"@type": "Brand", "name": "Patagonia"},
{"@type": "Brand", "name": "Arc'teryx"},
{"@type": "Brand", "name": "Black Diamond"},
{"@type": "Brand", "name": "Osprey"}
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Outdoor Equipment",
"itemListElement": [
{"@type": "OfferCatalog", "name": "Hiking Boots & Shoes"},
{"@type": "OfferCatalog", "name": "Backpacks & Bags"},
{"@type": "OfferCatalog", "name": "Climbing Gear"},
{"@type": "OfferCatalog", "name": "Camping Equipment"},
{"@type": "OfferCatalog", "name": "Gear Rental"}
]
},
"paymentAccepted": "Cash, Credit Card, Debit Card, Apple Pay",
"currenciesAccepted": "USD",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "312",
"bestRating": "5"
},
"sameAs": [
"https://www.yelp.com/biz/summit-outdoor-gear-boulder",
"https://www.google.com/maps/place/summit+outdoor+gear",
"https://www.instagram.com/summitoutdoorgear",
"https://www.facebook.com/summitoutdoorgear"
],
"knowsAbout": [
"Hiking Equipment",
"Rock Climbing Gear",
"Camping Equipment",
"Gear Repair",
"Backcountry Navigation"
],
"areaServed": {
"@type": "GeoCircle",
"geoMidpoint": {
"@type": "GeoCoordinates",
"latitude": 40.0177,
"longitude": -105.2812
},
"geoRadius": "50 mi"
}
}
</script>
brand: List the major brands you carry. When users ask AI engines "Where can I buy Patagonia gear in Boulder?", this property helps match your store to the query.
hasOfferCatalog: Provides a structured overview of your product categories. This gives AI engines a machine-readable inventory summary without listing every individual product.
areaServed with GeoCircle: Defines the geographic area your store serves. Useful for delivery or service-area businesses. AI engines can use this to determine relevance for location-based queries beyond your immediate address.
Medical Business Schema: Complete Example
Medical businesses have additional schema requirements due to the sensitivity and regulatory nature of healthcare information. The MedicalBusiness type and its subtypes (Physician, Dentist, Optician) add healthcare-specific properties. Google's local business structured data documentation emphasizes accuracy for medical providers.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Bright Smile Family Dentistry",
"url": "https://brightsmilefamilydentistry.com",
"image": "https://brightsmilefamilydentistry.com/images/office.jpg",
"logo": "https://brightsmilefamilydentistry.com/logo.png",
"description": "Family dental practice offering preventive, cosmetic, and restorative dentistry. Accepting new patients. In-network with most major insurance plans.",
"medicalSpecialty": "Dentistry",
"isAcceptingNewPatients": true,
"address": {
"@type": "PostalAddress",
"streetAddress": "456 Oak Avenue, Suite 200",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
},
"telephone": "+1-512-555-0167",
"faxNumber": "+1-512-555-0168",
"email": "info@brightsmilefamilydentistry.com",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "08:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "08:00",
"closes": "14:00"
}
],
"availableService": [
{"@type": "MedicalProcedure", "name": "Dental Cleaning and Exam"},
{"@type": "MedicalProcedure", "name": "Dental Implants"},
{"@type": "MedicalProcedure", "name": "Teeth Whitening"},
{"@type": "MedicalProcedure", "name": "Invisalign Orthodontics"},
{"@type": "MedicalProcedure", "name": "Root Canal Treatment"},
{"@type": "MedicalProcedure", "name": "Dental Crowns and Bridges"},
{"@type": "MedicalProcedure", "name": "Pediatric Dentistry"},
{"@type": "MedicalProcedure", "name": "Emergency Dental Care"}
],
"employee": [
{
"@type": "Dentist",
"name": "Dr. Sarah Chen, DDS",
"description": "General and cosmetic dentistry, 15 years experience",
"medicalSpecialty": "General Dentistry"
},
{
"@type": "Dentist",
"name": "Dr. Michael Torres, DMD",
"description": "Pediatric and restorative dentistry",
"medicalSpecialty": "Pediatric Dentistry"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "523",
"bestRating": "5"
},
"sameAs": [
"https://www.healthgrades.com/dentist/bright-smile-family-dentistry",
"https://www.google.com/maps/place/bright+smile+family+dentistry",
"https://www.zocdoc.com/dentist/bright-smile-family-dentistry",
"https://www.facebook.com/brightsmilefamilydentistry"
],
"paymentAccepted": "Cash, Credit Card, Insurance",
"currenciesAccepted": "USD",
"priceRange": "$$"
}
</script>
Healthcare-Specific Properties
isAcceptingNewPatients: Boolean value. Extremely valuable for AI queries like "dentists accepting new patients in Austin." This property is frequently checked by AI engines when constructing provider recommendations.
medicalSpecialty: The specialty area of the practice. Use standardized medical specialty terms. AI engines use this for specialty-specific queries.
availableService: List the procedures and services you offer using MedicalProcedure types. This enables matching when users ask AI engines about specific treatments: "Where can I get dental implants in Austin?"
employee: Listing practitioners with their specialties helps AI engines match individual providers to specific queries about expertise. Include credentials and experience where relevant.
Professional Service Schema: Complete Example
Professional services like law firms, accounting practices, marketing agencies, and consulting firms use the ProfessionalService type. Here is a production-ready example for a law firm:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LegalService",
"name": "Morrison & Associates Family Law",
"url": "https://morrisonassociates.com",
"image": "https://morrisonassociates.com/images/office.jpg",
"logo": "https://morrisonassociates.com/logo.png",
"description": "Family law firm specializing in divorce, custody, child support, and prenuptial agreements. Serving the greater Denver metro area since 2005.",
"address": {
"@type": "PostalAddress",
"streetAddress": "1700 Lincoln Street, Suite 400",
"addressLocality": "Denver",
"addressRegion": "CO",
"postalCode": "80203",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.7432,
"longitude": -104.9879
},
"telephone": "+1-303-555-0234",
"email": "intake@morrisonassociates.com",
"priceRange": "$$$",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:30",
"closes": "17:30"
}
],
"knowsAbout": [
"Family Law",
"Divorce Proceedings",
"Child Custody",
"Child Support",
"Prenuptial Agreements",
"Mediation"
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Legal Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Free Initial Consultation",
"description": "30-minute confidential consultation to discuss your case"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Divorce Representation",
"description": "Full legal representation in contested and uncontested divorce proceedings"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Custody and Visitation",
"description": "Legal advocacy for custody arrangements, modifications, and enforcement"
}
}
]
},
"areaServed": [
{"@type": "City", "name": "Denver"},
{"@type": "City", "name": "Aurora"},
{"@type": "City", "name": "Lakewood"},
{"@type": "City", "name": "Centennial"},
{"@type": "State", "name": "Colorado"}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "198",
"bestRating": "5"
},
"sameAs": [
"https://www.avvo.com/attorneys/morrison-associates",
"https://www.google.com/maps/place/morrison+associates",
"https://www.linkedin.com/company/morrison-associates",
"https://www.martindale.com/morrison-associates"
],
"foundingDate": "2005",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 8,
"maxValue": 12
}
}
</script>
knowsAbout: For professional services, this property functions as a specialization list. When users ask AI engines "family lawyer specializing in custody in Denver," this array helps match your firm to the query.
areaServed: Use an array of City or State types to define your service area. More precise than a GeoCircle for professional services that serve specific municipalities.
hasOfferCatalog: Structure your services as Offers containing Service items. This makes your service offerings machine-readable and allows AI engines to match specific services to user queries.
Multi-Location Businesses
If your business has multiple locations, each location should have its own LocalBusiness schema on its respective page. Additionally, create a parent Organization schema on your main corporate page that references each location:
<!-- On your main corporate homepage -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Summit Outdoor Gear",
"url": "https://summitoutdoorgear.com",
"description": "Independent outdoor retailer with 4 locations across Colorado",
"subOrganization": [
{
"@type": "Store",
"name": "Summit Outdoor Gear - Boulder",
"url": "https://summitoutdoorgear.com/boulder",
"address": {
"@type": "PostalAddress",
"addressLocality": "Boulder",
"addressRegion": "CO"
}
},
{
"@type": "Store",
"name": "Summit Outdoor Gear - Denver",
"url": "https://summitoutdoorgear.com/denver",
"address": {
"@type": "PostalAddress",
"addressLocality": "Denver",
"addressRegion": "CO"
}
}
]
}
</script>
<!-- On each location page, full LocalBusiness schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Store",
"name": "Summit Outdoor Gear - Boulder",
"url": "https://summitoutdoorgear.com/boulder",
"parentOrganization": {
"@type": "Organization",
"name": "Summit Outdoor Gear",
"url": "https://summitoutdoorgear.com"
},
"address": { ... },
"geo": { ... },
"openingHoursSpecification": [ ... ]
}
</script>
This structure helps AI engines understand your corporate hierarchy while maintaining distinct local identities for each location. Each location can appear independently in local search results and AI recommendations.
Alignment with Google Business Profile
Your LocalBusiness schema should be consistent with your Google Business Profile (GBP). AI engines, including Google's AI Overviews, cross-reference your structured data against GBP data. Key alignment points:
- Business name: Must match exactly. If your GBP says "Bella Cucina Trattoria," don't use "Bella Cucina" in your schema name property.
- Address: Same format and components. If GBP includes "Suite 200," include it in your schema.
- Phone number: Use the same primary phone number in both.
- Hours: Keep perfectly synchronized. Conflicting hours between schema and GBP confuse AI engines and users.
- Categories: Your schema type should align with your GBP category. If GBP says "Italian Restaurant," use the Restaurant type with servesCuisine "Italian."
Handling Special Hours and Closures
Businesses that close for holidays, have seasonal hours, or offer special event hours should use the specialOpeningHoursSpecification property:
"specialOpeningHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-12-24",
"validThrough": "2026-12-24",
"opens": "09:00",
"closes": "14:00",
"description": "Christmas Eve - Early close"
},
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-12-25",
"validThrough": "2026-12-25",
"opens": "00:00",
"closes": "00:00",
"description": "Christmas Day - Closed"
},
{
"@type": "OpeningHoursSpecification",
"validFrom": "2026-07-01",
"validThrough": "2026-09-30",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "20:00",
"description": "Extended summer hours"
}
]
When opens and closes are both "00:00" on the same date, it indicates a closure. This is the Schema.org convention for representing days when the business is closed, as noted in the OpeningHoursSpecification documentation.
Testing and Validation
Local business schema requires extra validation steps beyond syntax checking because the data needs to be accurate in the real world, not just structurally correct.
Step 1: Syntax Validation
Test your JSON-LD with Google's Rich Results Test. This confirms your markup is valid JSON-LD and identifies any missing required properties. Also use the Schema.org Validator for full spec compliance.
Step 2: Data Accuracy Audit
Manually compare every field in your schema against your actual business data:
- Business name matches Google Business Profile exactly
- Street address is correct and complete (including suite/unit numbers)
- Geo coordinates point to the correct physical location (verify on a map)
- Phone number is the primary business line (not a personal number)
- Opening hours reflect current, actual operating hours
- Aggregate rating matches verified review platform data (within 0.1 stars)
- Services listed are actually offered at this location
- Payment methods listed are currently accepted
Step 3: Cross-Platform Consistency Check
Compare your schema data against all public profiles:
- Google Business Profile
- Yelp business listing
- Facebook business page
- Industry-specific directories (Healthgrades, Avvo, TripAdvisor, etc.)
- Apple Maps listing
Any discrepancies should be resolved before deploying your schema. AI engines will cross-reference these sources, and inconsistencies reduce credibility.
Step 4: Ongoing Monitoring
Schedule quarterly audits of your LocalBusiness schema. Business details change: hours get adjusted, new services are added, staff members change, ratings accumulate. Use Google Search Console to monitor for schema errors and 42A's AI visibility platform to track how your local business information appears in AI-generated responses over time.
Common Mistakes to Avoid
Frequently Asked Questions
What is the difference between LocalBusiness and Organization schema?
LocalBusiness is a subtype of Organization in Schema.org's hierarchy. Use LocalBusiness when your business has a physical location that customers visit. Use Organization for companies that operate primarily online or don't have a public-facing physical presence. LocalBusiness includes properties like openingHours, geo coordinates, and priceRange that aren't relevant for general organizations.
Should I use LocalBusiness or a more specific subtype like Restaurant?
Always use the most specific subtype available. Restaurant, Store, MedicalBusiness, and ProfessionalService all inherit LocalBusiness properties while adding category-specific ones. Using a specific subtype helps AI engines categorize your business correctly and increases your chances of appearing in category-specific queries like "best restaurants near me" or "dentists in downtown."
How does LocalBusiness schema affect AI search visibility?
AI engines use LocalBusiness schema to understand your physical presence, operating hours, service areas, and business category. When users ask AI assistants for local recommendations, the engine draws on this structured data to identify relevant businesses. Complete LocalBusiness schema with accurate geo coordinates and hours significantly increases the likelihood of appearing in AI-generated local recommendations.
Next Steps
Start by choosing the most specific Schema.org type for your business. Build out the complete JSON-LD using the examples above as templates. Validate, cross-reference against your Google Business Profile, and deploy.
Once your LocalBusiness schema is in place, layer in FAQ schema to answer common customer questions and Organization schema for your corporate identity. The combination provides AI engines with a comprehensive understanding of your business.
For broader structured data strategy, check our homepage guide and tools and validators page.