LocalBusiness JSON-LD schema showing address, telephone, opening hours, and geo coordinates fields
SEO Tools

Schema Markup for Local Business — Required Fields and How to Validate

Sunny Pal Singh · · 7 min read

Google's local Knowledge Panel draws from multiple sources: Google Business Profile, local citations, and structured data on the business's own website. Schema markup on your site is the one source you control completely. Getting it right costs 20 minutes; getting it wrong costs you local pack visibility.

Most local business websites either skip schema markup entirely or copy a minimal snippet that's missing half the fields Google wants. The LocalBusiness type isn't complex — there are maybe six fields you need to get right. But those fields have specific formats (especially address and openingHoursSpecification) that trip up most implementations.

This guide covers the complete LocalBusiness JSON-LD template, what each field does, how to choose a more specific @type, and how to validate before publishing.

Key Takeaways

  • LocalBusiness schema on your site reinforces your Google Business Profile data — consistency across sources strengthens local ranking signals
  • @type can be more specific than LocalBusinessRestaurant, MedicalBusiness, LegalService, etc. inherit LocalBusiness properties and add type-specific ones
  • address must use PostalAddress with streetAddress, addressLocality, postalCode, addressCountry — not a plain string
  • openingHoursSpecification is preferred over the legacy openingHours string for structured hours data
  • Validate with the Schema Markup Tester before publishing — a missing required field won't crash the site but will silently block rich result eligibility

What LocalBusiness Schema Does

LocalBusiness is a schema.org type that describes a physical business with a location. When correctly implemented, it helps Google confirm your business name, address, and phone (NAP) match your Google Business Profile, understand your opening hours and price range, and associate your website with your location for local search intent queries.

It does not replace Google Business Profile — you need both. GBP carries more weight for local pack rankings. But schema markup is the one local signal you control without waiting for Google to update, and NAP consistency between your schema and your GBP is a genuine ranking signal.

The Complete LocalBusiness Schema Template

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Sunny's Bakery",
  "description": "Artisan sourdough bakery specialising in slow-ferment loaves and pastries.",
  "url": "https://www.sunnysbakery.example.com",
  "telephone": "+44-131-555-0123",
  "email": "[email protected]",
  "image": "https://www.sunnysbakery.example.com/images/storefront.jpg",
  "priceRange": "££",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "42 Bread Street",
    "addressLocality": "Edinburgh",
    "addressRegion": "Scotland",
    "postalCode": "EH3 9AF",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 55.9486,
    "longitude": -3.2008
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday"],
      "opens": "08:00",
      "closes": "14:00"
    }
  ],
  "sameAs": [
    "https://www.google.com/maps/place/...",
    "https://www.facebook.com/sunnysbakery"
  ]
}

Required vs Recommended Fields

Field Required? Notes
@type Required LocalBusiness or a subtype
name Required Exact business name
address Required Must be a PostalAddress object, not a plain string
telephone Recommended Include country code
url Recommended Your website URL
image Recommended At least one image URL
openingHoursSpecification Recommended Preferred over legacy openingHours string
geo Recommended Lat/long strengthens location association
priceRange Optional £ / $$ / ££ — free-form but follow convention
sameAs Recommended Links to GBP, social profiles for entity disambiguation

Choosing a More Specific @type

LocalBusiness is the base type. Google recognises hundreds of subtypes that inherit all LocalBusiness properties and may unlock type-specific rich results. Use the most specific type that accurately describes the business:

  • Restaurant — adds servesCuisine, menu, acceptsReservations
  • MedicalBusinessPhysician, Dentist, Optician — adds medicalSpecialty
  • LegalServiceAttorney, Notary — adds legalName
  • AutomotiveBusinessAutoDealer, AutoRepair
  • FoodEstablishmentBakery, CafeOrCoffeeShop, FastFoodRestaurant
  • HealthAndBeautyBusinessBeautySalon, HairSalon

More specific types give Google more confidence in what your business does, which can improve local search accuracy and eligibility for type-specific rich results.

Address Format Details

The address field must be a PostalAddress object — not a plain string. This is the most common LocalBusiness schema mistake:

// WRONG — plain string
"address": "42 Bread Street, Edinburgh EH3 9AF"

// CORRECT — PostalAddress object
"address": {
  "@type": "PostalAddress",
  "streetAddress": "42 Bread Street",
  "addressLocality": "Edinburgh",
  "postalCode": "EH3 9AF",
  "addressCountry": "GB"
}

addressCountry must be the ISO 3166-1 alpha-2 country code (GB, US, DE, AU) — not the full country name. Full country names are not recognised by the validator.

NAP consistency matters: the name, address, and phone in your schema must exactly match your Google Business Profile listing. Even minor differences (St vs Street, +1 vs 1-) dilute the signal.

Opening Hours Format

openingHoursSpecification takes an array of objects, one per time block. Group consecutive days with the same hours:

"openingHoursSpecification": [
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "09:00",
    "closes": "18:00"
  },
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Saturday", "Sunday"],
    "opens": "10:00",
    "closes": "16:00"
  }
]

For 24-hour operation: "opens": "00:00", "closes": "23:59". For closed days: omit that day from all specifications. For special hours (holidays): add validFrom and validThrough date strings to the specification object.

The legacy openingHours string format ("Mo-Fr 09:00-18:00") still works but is less structured. Google's documentation recommends openingHoursSpecification for new implementations.

The sameAs Array — Entity Disambiguation

The sameAs property links your schema entity to verified external profiles. This is particularly valuable for entity disambiguation — it tells Google that your LocalBusiness entity on your website is the same entity as your Google Business Profile, Facebook page, and LinkedIn company page.

"sameAs": [
  "https://www.google.com/maps/place/your-business-id",
  "https://www.facebook.com/yourbusiness",
  "https://www.yelp.com/biz/yourbusiness"
]

Each URL must resolve. A sameAs pointing to a 404 is worse than omitting it.

Validating Before Publishing

Note: The Schema Markup Tester checks all 18 schema types including LocalBusiness — it flags missing required fields like address not being a PostalAddress object, and warns on recommended fields like missing telephone or image.

Three validation tools:

  1. Google Rich Results Test — checks whether Google can parse the schema; shows which rich result types the page is eligible for.
  2. schema.org Validator — strict spec conformance; catches type mismatches and incorrect property values.
  3. ByteWaveNetwork Schema Markup Tester — validates LocalBusiness required and recommended fields, reports missing PostalAddress, incorrect addressCountry format, and missing openingHoursSpecification. Run it after adding schema to confirm before publishing.

After validation, cross-reference your schema against your Google Business Profile: the business name, address, phone, and website URL should be identical in both places. Discrepancies between your GBP and your on-page schema send mixed signals to Google's local algorithm.

Validate LocalBusiness Schema on Any Page

Free, no signup. The Schema Markup Tester extracts and validates JSON-LD from any URL — checks LocalBusiness required fields, address format, and recommended properties in one pass.

Try the Schema Markup Tester Free →
SP

Sunny Pal Singh

Fellow · Technical Director — AI Infrastructure, Cloud Orchestration & Network Automation

Sunny is a Fellow and Technical Director specialising in AI infrastructure, cloud orchestration, and network automation. With hands-on depth across AWS, Azure, GCP, Red Hat OpenStack, and OpenShift, he leads high-performing teams of architects and engineers building transformative solutions at scale. He built ByteWaveNetwork to bring the same engineering rigour to everyday web tooling.

Affiliate disclosure: Some links on this page may be affiliate links. We only mention tools we've personally used and have an honest opinion about. Affiliate revenue helps keep ByteWaveNetwork's tools free and maintained. We are not paid by any of the tools compared in this article for favorable coverage.

Choose design