LocalBusiness Schema - JSON-LD Guide & Examples
LocalBusiness structured data tells Google about a physical business location, including its name, address, opening hours, and services. A Google Business Profile is managed separately.
Use the most specific accurate subtype, such as Dentist, Restaurant, or ProfessionalService, rather than the generic LocalBusiness type.
JSON-LD Example
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Dave's Steak House",
"address": {
"@type": "PostalAddress",
"streetAddress": "148 W 51st St",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10019",
"addressCountry": "US"
},
"telephone": "+12122459600",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "11:30",
"closes": "23:00"
}
]
}
Schema.org LocalBusiness
Type: defineLocalBusiness<T extends Record<string, any>>(input?: LocalBusiness & T)
Describes a business that customers can visit. Use it for the business behind a website or on a page about a specific location.
Useful Links
- LocalBusiness - Schema.org
- Local Business Schema Markup - Google Search Central
- Choose an Identity - LocalBusiness
Google requirements
Google requires both name and address for a LocalBusiness rich result. The Unhead input type requires both properties.
- name
string
The name of the business. - address
NodeRelations<PostalAddress>: PostalAddress
The physical address of the business.
Recommended Properties
- openingHoursSpecification
NodeRelations<OpeningHoursSpecification>: OpeningHoursSpecification
The specification for when the business is open. - paymentAccepted
string
The methods of payment accepted by the business.
Minimal Example
defineLocalBusiness({
name: 'Harbor Dental',
logo: '/logo.png',
address: {
addressCountry: 'Australia',
postalCode: '2000',
streetAddress: '123 st',
},
openingHoursSpecification: [
{
dayOfWeek: 'Saturday',
opens: '09:30',
closes: '13:30',
},
{
dayOfWeek: ['Monday', 'Tuesday'],
opens: '10:30',
closes: '15:30',
},
]
})
Defaults
- @type:
['Organization', 'LocalBusiness'] - @id:
${canonicalHost}#identity - url:
${canonicalHost} - currenciesAccepted:
currencyfrom resolved page metadata. See global options
Sub-Types
AnimalShelterArchiveOrganizationAutomotiveBusinessChildCareDentistDryCleaningOrLaundryEmergencyServiceEmploymentAgencyEntertainmentBusinessFinancialServiceFoodEstablishmentGovernmentOfficeHealthAndBeautyBusinessHomeAndConstructionBusinessInternetCafeLegalServiceLibraryLodgingBusinessMedicalBusinessProfessionalServiceRadioStationRealEstateAgentRecyclingCenterSelfStorageShoppingCenterSportsActivityLocationStoreTelevisionStationTouristInformationCenterTravelAgency
Resolves
See Global Resolves for full context.
- for the primary identity, a string
logocreates a root ImageObject with the#logoID and a compact Organization node with the absolute logo URL @typeresolve:Dentist->['Organization', 'LocalBusiness', 'Dentist']aggregateRating,department,geo, andreviewresolve as typed nested nodes- a relative
menuURL becomes absolute
Types
type ValidLocalBusinessSubTypes = 'AnimalShelter'
| 'ArchiveOrganization'
| 'AutomotiveBusiness'
| 'ChildCare'
| 'Dentist'
| 'DryCleaningOrLaundry'
| 'EmergencyService'
| 'EmploymentAgency'
| 'EntertainmentBusiness'
| 'FinancialService'
| 'FoodEstablishment'
| 'GovernmentOffice'
| 'HealthAndBeautyBusiness'
| 'HomeAndConstructionBusiness'
| 'InternetCafe'
| 'LegalService'
| 'Library'
| 'LodgingBusiness'
| 'MedicalBusiness'
| 'ProfessionalService'
| 'RadioStation'
| 'RealEstateAgent'
| 'RecyclingCenter'
| 'SelfStorage'
| 'ShoppingCenter'
| 'SportsActivityLocation'
| 'Store'
| 'TelevisionStation'
| 'TouristInformationCenter'
| 'TravelAgency'
export interface LocalBusinessSimple extends Organization {
'@type'?: ['Organization', 'LocalBusiness'] | ['Organization', 'LocalBusiness', ValidLocalBusinessSubTypes] | ValidLocalBusinessSubTypes
'address': NodeRelations<PostalAddress>
/**
* The primary public telephone number of the business.
*/
'telephone'?: string
/**
* The primary public email address of the business.
*/
'email'?: string
/**
* The primary public fax number of the business.
*/
'faxNumber'?: string
/**
* The price range of the business, represented by a string of dollar symbols (e.g., $, $$, or $$$ ).
*/
'priceRange'?: string
/**
* An array of GeoShape, Place or string definitions.
*/
'areaServed'?: unknown
/**
* A GeoCoordinates object.
*/
'geo'?: NodeRelation<GeoCoordinates>
/**
* The VAT ID of the business.
*/
'vatID'?: string
/**
* The tax ID of the business.
*/
'taxID'?: string
/**
* The currency accepted.
*/
'currenciesAccepted'?: string
/**
* The methods of payment accepted by the business.
*/
'paymentAccepted'?: string
/**
* The operating hours of the business.
*/
'openingHoursSpecification'?: NodeRelations<OpeningHoursSpecification>
'aggregateRating'?: NodeRelation<AggregateRating>
'department'?: NodeRelations<LocalBusiness>
'menu'?: string
'review'?: NodeRelations<Review>
'servesCuisine'?: Arrayable<string>
}
Related Schemas
- Organization: Parent organization
- Event: Business events
- Product: Products/services offered
JobPosting Schema - JSON-LD Guide & Examples
Implement JobPosting structured data with Unhead. JSON-LD examples, required fields for Google Jobs, salary markup, and validation tips.
MathSolver Schema
Add Google Math solver structured data with defineMathSolver(), including SolveMathAction URL templates and learning resource metadata.