Index of every page on this site: llms.txt
TypeScript
Schema

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"
    }
  ]
}
Use the Schema.org Generator to build your structured data visually.

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.

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.
  • 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: currency from resolved page metadata. See global options

Sub-Types

  • 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

Resolves

See Global Resolves for full context.

  • for the primary identity, a string logo creates a root ImageObject with the #logo ID and a compact Organization node with the absolute logo URL
  • @type resolve: Dentist -> ['Organization', 'LocalBusiness', 'Dentist']
  • aggregateRating, department, geo, and review resolve as typed nested nodes
  • a relative menu URL 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>
}
Did this page help you?