LocalBusiness Schema: Address, Hours & Local Search Results
The most common misconception about local business markup is thinking that adding LocalBusiness structured data to your website guarantees inclusion in Google's map pack or local rankings. The reality is that local results are primarily driven by Google Business Profile, while structured data serves to help Google connect the dots between your website's business information—name, address, hours—and the physical establishment. Understanding this division of labor is key to using LocalBusiness where it actually matters.
What is LocalBusiness#
LocalBusiness is a Schema.org type describing physical business establishments—restaurants, stores, clinics, gyms, law firms, and more. It tells search engines: this is a local business with a specific address, operating hours, and contact information. Google may use this information to present business information more richly in search results, knowledge panels, and other features.
Official documentation: Google Search Central: Local business (LocalBusiness) structured data.
Division of Labor with Google Business Profile#
| Google Business Profile | LocalBusiness Structured Data | |
|---|---|---|
| Where | Google's business backend | JSON-LD on your website pages |
| Primary Purpose | Drives map pack, local finder, business panel | Helps Google understand website-to-physical-location mapping |
| Priority | Primary data source for local results | Supplementary, corroborative, consistency |
| Can Self-Rate | Reviews from real users | Cannot self-rate stars |
The correct sequence: first claim and optimize your Google Business Profile, then markup your corresponding location pages on your website with LocalBusiness using the same business name, address, phone, and hours—let both sources validate each other.
Required & Recommended Fields#
Google has minimal hard requirements for LocalBusiness—essentially just name and address; but for information to be genuinely useful, you should fill out nearly all recommended fields.
| Field | Required | Description |
|---|---|---|
name | Required | Business name, consistent with signage and business profile |
address | Required | Use PostalAddress, break down address fields where possible |
telephone | Recommended | Contact phone with country code |
openingHoursSpecification | Recommended | Structured operating hours, supports cross-day and special dates |
geo | Recommended | GeoCoordinates latitude/longitude |
url | Recommended | Official URL for this location |
image | Recommended | Business or product photos |
priceRange | Recommended | Price tier, e.g., $$ |
Complete JSON-LD Example#
Below is an example for a restaurant location page, using the more specific subtype Restaurant (which inherits from LocalBusiness).
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Chenguang Noodle House · Wangjing Branch",
"image": "https://example.com/photos/storefront.webp",
"url": "https://example.com/stores/wangjing",
"telephone": "+86-10-12345678",
"priceRange": "$$",
"servesCuisine": "Noodles",
"address": {
"@type": "PostalAddress",
"streetAddress": "101, No. 1 Wangjing Street",
"addressLocality": "Beijing",
"addressRegion": "Beijing",
"postalCode": "100102",
"addressCountry": "CN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.9968,
"longitude": 116.4810
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "21:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "10:00",
"closes": "22:00"
}
]
}
The page should display the same business name, address, phone, and hours visible to users—structured data is simply the machine-readable counterpart of this visible information.
Use More Specific Subtypes#
LocalBusiness has numerous subtypes—use the most specific type available rather than the generic LocalBusiness.
Restaurant,CafeOrCoffeeShop,BarOrPub: dining, can addservesCuisine,menu;Storeand its subclasses (ClothingStore,GroceryStore, etc.): retail;MedicalBusiness,Dentist,LegalService: professional services;LodgingBusiness,HealthClub,AutoRepair, and more.
The more specific the type, the better Google can understand what this business offers. If no exact subtype matches, fall back to LocalBusiness.
How to Write Opening Hours#
openingHoursSpecification is clearer than the old string format and can express special cases:
- Cross-day hours (e.g., 22:00–02:00 next day): split into two segments or use appropriate opens/closes;
- 24-hour operations: set both
opensandclosesto00:00; - Holiday special hours: add entries with
validFromandvalidThrough; - Closed for the day: use
opensandclosesboth00:00and do not cover that day, or follow official guidance for expressing closures.
How to Markup Multiple Locations#
Best practices for chains and multi-location brands:
- Create a separate, crawlable, indexable page for each location;
- Markup only that location's LocalBusiness on each page, using its own address, geo, phone, and hours;
- Do not mix multiple locations in a single structured data block;
- Use
Organizationon the main brand site to describe the enterprise as a whole (see Organization).
Do Not Self-Rate Stars#
The most common compliance trap for local businesses is embedding AggregateRating or Review pointing to themselves on their own website's LocalBusiness markup to artificially inflate ratings.
Why This Site Doesn't Implement LocalBusiness#
MagicSEO is a content website, not a physical business—it has no street address or operating hours. Therefore, this page will not force-fit LocalBusiness markup purely for demonstration purposes.
Validation and Monitoring#
- Use Rich Results Test to check syntax and required fields.
- Verify that name, address, phone, and hours are consistent across three sources: page content, Google Business Profile, and structured data.
- Claim and optimize your Google Business Profile—this is the primary engine for local results.
- For multiple locations, check each page's structured data individually to ensure it points to the correct address.
- After launch, monitor invalid items in Search Console's relevant enhancement reports.
Common Mistakes#
| Mistake | Why It's Risky | Fix |
|---|---|---|
| Thinking markup guarantees map pack inclusion | Misunderstanding local ranking mechanics | Start with Google Business Profile; structured data is supplementary |
| Writing address as a single string | Hard to parse, prone to inconsistency | Use PostalAddress with broken-out fields |
| Self-rating stars | Ineligible for review snippet feature | Do not markup own pages with AggregateRating/Review |
| Stuffing multiple locations on one page | Cannot map to specific entities | Dedicated page and markup per location |
| Conflicting info between site and Business Profile | Weakens trust signals | Unify name, address, phone, hours across all three sources |
LocalBusiness Launch Checklist#
- Claimed and optimized Google Business Profile
- name matches signage and business profile
- address uses PostalAddress with broken-out fields
- Include telephone, geo, url, image, priceRange where possible
- openingHoursSpecification covers normal and special hours
- Use most appropriate subtype (Restaurant, Store, etc.)
- Multiple locations: separate page and markup per location
- Do not self-rate stars on own pages
- Page visible content matches JSON-LD
- Rich Results Test passes with no critical errors
Frequently Asked Questions#
Does marking up LocalBusiness structured data guarantee inclusion in the local three-business map pack?
No, it does not directly guarantee inclusion. Local results (map pack, local finder) are primarily driven by Google Business Profile, while structured data helps Google better understand information about your business on your website—it is not a switch for entering the local pack. To improve local rankings, first claim and optimize your Google Business Profile, then use LocalBusiness markup to keep your website information consistent with your profile.
What fields are required for LocalBusiness?
Google's core requirements for LocalBusiness are name and address. Address should use PostalAddress and include streetAddress, addressLocality, addressRegion, postalCode, and addressCountry where possible. To display more information, supplement with recommended fields like telephone, openingHoursSpecification, geo, url, image, and priceRange.
Can local businesses display their own star ratings on their website?
No. Google explicitly excludes self-rated star ratings on pages controlled by the reviewed entity from the review snippet feature. Businesses should not embed AggregateRating or Review pointing to themselves on their own LocalBusiness pages to artificially inflate ratings—let genuine user reviews accumulate through compliant channels.
How should I mark up multiple locations?
Create separate, crawlable pages for each location. On each page, markup only that location's LocalBusiness with its own address, geo, opening hours, and telephone. Do not combine multiple locations in a single structured data block on one page, and do not stuff all locations onto your homepage.