LocalBusiness Schema for AI Citations
schema.org/LocalBusiness is the canonical JSON-LD type for a physical business with a defined location, hours, and service area. It dual-inherits from Organization and Place, which means it represents both the corporate entity and the spot on a map. AI engines such as Perplexity, ChatGPT, and Google AI Overviews use LocalBusiness markup to match local-intent queries ("best dentist near me", "Italian restaurant in Boston open now") to specific venues. NAP consistency between this schema, Google Business Profile, and directory listings is a stronger signal than schema completeness alone.
TL;DR
Mark up the location page with JSON-LD @type: LocalBusiness (or its most specific subtype). Required: name, address, telephone. Strongly recommended: openingHoursSpecification, geo, url, image, priceRange, sameAs (links to GBP and major directories), aggregateRating. Keep the schema's NAP identical to your Google Business Profile. Use the most specific subtype available (Restaurant, Dentist, Store, MedicalClinic) instead of generic LocalBusiness. AI citation rates for local queries correlate strongly with structured-data + directory consistency, not schema volume alone.
Definition
LocalBusiness is a Schema.org type for "a particular physical business or branch of an organization. Examples include a restaurant, a particular branch of a restaurant chain, a branch of a bank, a medical practice, a club, a bowling alley, etc." It dual-inherits from both Organization and Place, giving it access to organizational properties (founders, employees, NAICS code) and place properties (address, geo, hours).
LocalBusiness has 30+ direct subtypes including AnimalShelter, AutomotiveBusiness, ChildCare, Dentist, DryCleaningOrLaundry, EmergencyService, EmploymentAgency, EntertainmentBusiness, FinancialService, FoodEstablishment (→ Restaurant, Bakery, BarOrPub, CafeOrCoffeeShop, FastFoodRestaurant), GovernmentOffice, HealthAndBeautyBusiness, HomeAndConstructionBusiness, InternetCafe, LegalService, Library, LodgingBusiness, MedicalBusiness, ProfessionalService, RadioStation, RealEstateAgent, RecyclingCenter, SelfStorage, ShoppingCenter, SportsActivityLocation, Store, TelevisionStation, TouristInformationCenter, TravelAgency. Always pick the deepest matching subtype.
Why LocalBusiness schema matters for AI search
A March 2026 audit of thousands of listing pages reported that AI search engines recommend only 1.2% of local businesses, with the rest invisible largely because they lack the location signals AI engines need. A separate analysis of 267,280 AI citations across ChatGPT, Perplexity, and Gemini found that LocalBusiness schema, NAP consistency, and high-quality first-party content correlate most strongly with citation likelihood for local queries.
Three concrete reasons it matters:
- Entity grounding. AI engines use @id and sameAs to bind a single business to its representations across the web (your site, Google Business Profile, Yelp, Apple Maps, industry directories). Without this binding, AI sees "Joe's Pizza Boston" as potentially several entities.
- Hours and availability. openingHoursSpecification answers the unspoken "is it open right now?" sub-question that drives many local queries. AI engines that surface real-time recommendations need machine-readable hours.
- Geographic precision. geo.latitude/geo.longitude lets AI engines compute distance from the user's known location. Address text alone requires geocoding, which adds latency and error.
Note: a 36% citation lift figure is sometimes cited for schema-rich pages. Treat that as directional, not authoritative; underlying methodology varies by study.
Required and recommended properties
Google's required-property bar for the LocalBusiness rich result is intentionally low; recommendations grow longer because they shape Knowledge Panel and AI citation behavior.
| Property | Type | Status | Description |
|---|---|---|---|
| name | Text | Required | Business name. Match GBP exactly. |
| address | PostalAddress | Required | Full address; use PostalAddress, not a single string. |
| telephone | Text | Required (effective) | E.164 international format preferred (+1-617-555-0100). |
| image | URL or ImageObject | Required | Logo or storefront photo; multiple aspect ratios preferred. |
| url | URL | Required (effective) | Canonical URL of the business location page. |
| priceRange | Text | Recommended | $, $$, $$$, $$$$ or "$10-$50". |
| openingHoursSpecification | OpeningHoursSpecification | Recommended | Structured hours per day-of-week with optional validity windows. |
| geo | GeoCoordinates | Recommended | Latitude + longitude. Critical for distance ranking. |
| sameAs | URL (array) | Recommended | Authoritative external profiles: GBP, Yelp, Wikipedia, Wikidata, LinkedIn, Apple Maps, Bing Places. |
| hasMap | URL | Recommended | Direct link to the business on Google Maps. |
| aggregateRating | AggregateRating | Recommended | Third-party rating average + count. Self-rating is penalized. |
| review | Review (array) | Recommended | Up to 5 representative reviews. |
| paymentAccepted | Text | Optional | E.g., "Cash, Credit Card, Apple Pay". |
| currenciesAccepted | Text | Optional | ISO 4217 codes ("USD"). |
| areaServed | AdministrativeArea or GeoShape | Optional | If service extends beyond the physical site. |
| department | LocalBusiness | Optional | Sub-departments (e.g., a hospital with sub-clinics). |
| branchOf | Organization | Optional | Use when this location is a branch of a parent chain. |
| founder, foundingDate | Person, Date | Optional | Inherited from Organization. |
| slogan | Text | Optional | Tagline. |
| additionalType | URL | Optional | Link to Wikidata or other ontology for stronger entity grounding. |
Canonical example: independent restaurant
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://example-restaurant.com/#localbusiness",
"name": "Trattoria Esempio",
"image": [
"https://example-restaurant.com/images/storefront-1x1.jpg",
"https://example-restaurant.com/images/storefront-4x3.jpg",
"https://example-restaurant.com/images/storefront-16x9.jpg"
],
"url": "https://example-restaurant.com",
"telephone": "+1-617-555-0100",
"priceRange": "$$",
"servesCuisine": ["Italian", "Mediterranean"],
"acceptsReservations": "True",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Hanover St",
"addressLocality": "Boston",
"addressRegion": "MA",
"postalCode": "02113",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 42.3641,
"longitude": -71.0540
},
"hasMap": "https://maps.google.com/?cid=1234567890",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Thursday"],
"opens": "17:00",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "17:00",
"closes": "23:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "16:00",
"closes": "21:00"
}
],
"sameAs": [
"https://www.google.com/maps/place/?q=place_id:ChIJExampleId",
"https://www.yelp.com/biz/trattoria-esempio-boston",
"https://www.opentable.com/r/trattoria-esempio",
"https://www.facebook.com/trattoriaesempio"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "312"
},
"paymentAccepted": "Cash, Credit Card, Apple Pay",
"currenciesAccepted": "USD"
}
</script>Canonical example: medical practice (chain branch)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://example-dental.com/locations/cambridge#localbusiness",
"name": "Example Dental — Cambridge",
"image": "https://example-dental.com/cambridge/exterior.jpg",
"url": "https://example-dental.com/locations/cambridge",
"telephone": "+1-617-555-0200",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Massachusetts Ave",
"addressLocality": "Cambridge",
"addressRegion": "MA",
"postalCode": "02139",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 42.3676,
"longitude": -71.0942
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
],
"branchOf": {
"@type": "Organization",
"@id": "https://example-dental.com/#organization",
"name": "Example Dental Group"
},
"medicalSpecialty": ["Dentistry", "Orthodontics"],
"sameAs": [
"https://www.google.com/maps/place/?q=place_id:ChIJExampleDental",
"https://www.healthgrades.com/dentist/example-dental-cambridge",
"https://www.zocdoc.com/practice/example-dental-cambridge"
]
}
</script>NAP consistency: the strongest local AI signal
NAP = Name, Address, Phone. AI engines (especially Perplexity) cross-reference your LocalBusiness schema against authoritative directories. Discrepancies cause AI to either skip the business or split the entity into two.
Rules:
- Use the same casing, punctuation, and abbreviation everywhere. "Trattoria Esempio" ≠ "Trattoria Esempio LLC" ≠ "Trattoria Esempio Ristorante".
- Phone in E.164 format consistently (+1-617-555-0100).
- Address fields filled separately (street, city, region, postal, country); never collapse into a single string.
- The single source of truth should be Google Business Profile. All other listings (your schema, Yelp, Apple Maps) match GBP exactly.
- When you change anything (move locations, rebrand, new phone), update GBP first, then propagate to schema and directories within 7 days.
openingHoursSpecification patterns
Standard hours (year-round)
[
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "21:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "10:00",
"closes": "23:00"
}
]Seasonal hours
Use validFrom and validThrough to scope hours to a date window.
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "11:00",
"closes": "21:00",
"validFrom": "2026-05-01",
"validThrough": "2026-09-30"
}Special closures
Use specialOpeningHoursSpecification for holiday closures. Set opens and closes to the same value (e.g., "00:00") and use validFrom/validThrough for the closed day.
24-hour businesses
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
"opens": "00:00",
"closes": "23:59"
}Subtype selection
Use the deepest matching subtype:
- Pizza place → PizzaPlace (preferred) over Restaurant over FoodEstablishment over LocalBusiness.
- Dentist office → Dentist over MedicalBusiness over LocalBusiness.
- Auto repair shop → AutoRepair over AutomotiveBusiness over LocalBusiness.
- Single-location bookstore → BookStore over Store over LocalBusiness.
Deeper subtypes inherit all parent properties and add type-specific ones (servesCuisine for restaurants, medicalSpecialty for medical, branchOf for chains).
Validation pipeline
- Schema.org Validator — syntax check.
- Google Rich Results Test — confirms eligibility for the local business rich result.
- NAP audit — manually compare schema NAP vs GBP, Yelp, Apple Maps, top 3 industry directories.
- Search Console — monitor Enhancements > Local Business after deployment.
- AI smoke test — query Perplexity, ChatGPT, and Google AI Overviews for "[business type] in [city]" and "[business name]". Track citation behavior over 30-60 days.
Common mistakes
- Generic LocalBusiness instead of subtype. Always use the deepest matching type.
- Address as a single string. Always structured PostalAddress.
- Self-reported aggregateRating without third-party reviews. Google penalizes; AI engines downweight.
- NAP drift between schema and GBP. The single biggest local-AI signal regression. Audit quarterly.
- Multiple LocalBusiness blocks for the same location. Causes entity confusion. Use one canonical block with @id.
- Using openingHours text format and openingHoursSpecification together inconsistently. Pick one (prefer openingHoursSpecification).
- No geo coordinates. Forces AI to geocode, adding error.
- Stale hours after schedule changes. Update within 24 hours of any hours change.
- No sameAs links. Eliminates entity-graph linking to authoritative profiles.
How to apply
- Pick the deepest matching subtype.
- Draft JSON-LD with name, address (PostalAddress), telephone, image, url, geo, openingHoursSpecification, sameAs.
- Cross-check NAP against GBP exactly.
- Validate with Schema.org Validator + Google Rich Results Test.
- Deploy in on the location page (one block per physical location).
- For multi-location businesses, deploy one block per location page; use branchOf to link to the parent Organization.
- Monitor AI citations and Search Console enhancements over 30-60 days; iterate on sameAs and review counts.
FAQ
Q: What are the required properties for LocalBusiness?
Google's documented requirements are name, address, image. In practice, telephone and url are effectively required for AI citation and rich-result quality.
Q: Do I need separate LocalBusiness blocks per location?
Yes. Each physical location should have its own LocalBusiness JSON-LD block on its dedicated location page, with a unique @id and unique geo coordinates.
Q: Should I use LocalBusiness or Organization?
Use both. Organization represents the corporate entity (one per brand). LocalBusiness represents each physical location (one per branch). Link locations to the Organization via branchOf.
Q: How do I handle service-area businesses (no public storefront)?
Use LocalBusiness (or a relevant subtype) with address set to your administrative address and areaServed set to the geographic service area. Include serviceArea (deprecated alias) only if your CMS still requires it.
Q: Does adding LocalBusiness schema improve AI citations?
It is necessary but not sufficient. The strongest signal in audited datasets is NAP consistency across schema, GBP, and major directories. Schema alone without consistency does not move citations.
Q: How fast do hour changes propagate to AI engines?
Google Business Profile updates reach Google AI Overviews within hours. Perplexity and ChatGPT (which crawl periodically) typically pick up changes within 1-7 days. Update GBP first, then schema, then propagate to directories.
: Schema.org, "LocalBusiness" type — verified 2026-05-03 — supports canonical type and dual-inheritance from Organization + Place. https://schema.org/LocalBusiness
: Google Search Central, "Local Business (LocalBusiness) Structured Data" — verified 2026-05-03 — supports required-property bar and rich result documentation. https://developers.google.com/search/docs/appearance/structured-data/local-business
: Schema App, "How-to Guide for LocalBusiness Schema Markup" — verified 2026-05-03 — supports required vs recommended property breakdown. https://www.schemaapp.com/schema-markup/how-to-do-schema-markup-for-local-business/
: Schema.org, "OpeningHoursSpecification" type — verified 2026-05-03 — supports validFrom/validThrough scoping. https://schema.org/OpeningHoursSpecification
: Jasmine Directory, "Advanced Schema Hacks: How Structured Data Can Boost Local Visibility" — verified 2026-05-03 — supports subtype-depth recommendation. https://www.jasminedirectory.com/blog/advanced-schema-hacks-how-structured-data-can-boost-local-visibility/
: MapAtlas, "Perplexity AI Citations: How to Get Your Local Business Recommended" — verified 2026-05-03 — supports NAP consistency as the top signal. https://mapatlas.eu/blog/perplexity-ai-local-business-citations
: LocalDominator, "267,280 Citations Reveal Where AI Gets Local Data" — verified 2026-05-03 — supports schema + directory consistency as top correlate. https://localdominator.co/case-study/ai-local-seo-citations-report/
: National Law Review (press release), "AI Search Recommends Only 1.2% of Local Businesses" — verified 2026-05-03 — supports invisibility statistic. https://natlawreview.com/press-releases/ai-search-recommends-only-12-local-businesses-rest-are-invisible
: WPRiders, "Schema Markup: 8 Tactics to Boost AI Citations" — verified 2026-05-03 — supports 36% citation lift figure (treat as directional). https://wpriders.com/schema-markup-for-ai-search-types-that-get-you-cited/
Related Articles
Event Schema for AI Search
Schema.org Event JSON-LD spec for AI search: required name/startDate/location, virtual and hybrid events, eventStatus, performer linkage, and AI citation patterns.
Service Schema for AI Search
Schema.org Service spec for AI search citations: required JSON-LD properties, areaServed, provider, serviceType, hoursAvailable, and entity-linking patterns.
Structured Data for AI Search
How to implement structured data (JSON-LD / Schema.org) to improve AI search visibility. Covers TechArticle, FAQPage, HowTo, and entity definitions.