Happy RankHappy Rank
LocalBusiness Schema Markup: JSON-LD Examples and How to Add It
TECHNICAL SEO

LocalBusiness Schema Markup: JSON-LD Examples and How to Add It

Happy Rank Editorial·Local SEO team·September 14, 2026·6 min read
Short answer

LocalBusiness schema is structured data, usually added as JSON-LD, that describes your business name, address, phone number, opening hours and location in a format search engines read reliably. Google requires only a name and address but recommends phone, URL, coordinates and hours too. Use the most specific business type, match your Business Profile exactly and test with the Rich Results Test.

LocalBusiness schema is a short block of code on your website that describes your business in a format search engines don't have to interpret: what you are, where you are, when you're open and how to reach you. It takes about ten minutes to add, and it's one of the most commonly botched pieces of local SEO.

This guide gives you copy-and-paste JSON-LD for a storefront, a service-area business and a business with several locations, explains which properties Google uses, and shows how to test the result. If you'd rather fill in a form, the free LocalBusiness schema generator writes the code for you.

What LocalBusiness schema does, and what it doesn't

Google's LocalBusiness documentation describes the markup as a way to tell Google about details like your opening hours and departments, which it can show in knowledge panels and business results. In practice it confirms the facts about your business, the same facts your Business Profile holds.

It isn't a ranking shortcut. The local pack and Google Maps run on your Business Profile, and Google hasn't said that marking up your website will move you up in them. Think of schema as removing doubt: when your website, your markup and your profile all say the same thing, Google has nothing conflicting to sort out.

Which properties to include

PropertyStatusWhat to put
@typeRequiredThe most specific type that fits, such as Dentist, Plumber or Restaurant. Google asks for the most specific LocalBusiness subtype
nameRequiredYour business name, exactly as it appears on your Business Profile
addressRequiredA PostalAddress with as many parts as you can give: street, city, region, postcode and country
telephoneRecommendedYour number with country and area code, like +1-512-555-0142
urlRecommendedA working link to this location's page
geoRecommendedLatitude and longitude, to at least five decimal places
openingHoursSpecificationRecommendedOpening and closing times by day. Add holiday or seasonal hours with validFrom and validThrough
priceRangeRecommended$$ or a range like $20–$50, under 100 characters
menu, servesCuisineRestaurantsYour menu URL and cuisine type
imageOptionalPhotos of your premises. Google's own example includes one
sameAsOptionalYour social profile URLs. Valid schema.org, though not listed in Google's LocalBusiness docs
areaServedOptionalThe cities or regions you serve. Useful for service-area businesses
aggregateRating, reviewLeave outGoogle only recommends these for sites that review other businesses

Example 1: a storefront business

A dental practice with a public address, weekday hours and a Saturday morning. Replace every value with your own:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://www.example.com/#dentist",
  "name": "Bright Smile Dental",
  "url": "https://www.example.com/",
  "telephone": "+1-512-555-0142",
  "priceRange": "$$",
  "image": "https://www.example.com/images/practice-front.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street, Suite 210",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.26715,
    "longitude": -97.74306
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/example",
    "https://www.instagram.com/example"
  ]
}
</script>

Five decimal places pin a location to about a metre. To get yours, right-click your entrance in Google Maps on a computer and click the coordinates to copy them.

Example 2: a service-area business

If you hide your address on Google Business Profile because customers don't come to you, don't publish your street address in your schema either. Google requires an address but asks for as many parts as you can give, so include the city, region, postcode and country, and list the places you serve with areaServed:

json
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://www.example.com/#plumber",
  "name": "Rapid Flow Plumbing",
  "url": "https://www.example.com/",
  "telephone": "+1-512-555-0187",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78745",
    "addressCountry": "US"
  },
  "areaServed": [
    { "@type": "City", "name": "Austin" },
    { "@type": "City", "name": "Round Rock" },
    { "@type": "City", "name": "Pflugerville" }
  ],
  "openingHoursSpecification": {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
    "opens": "00:00",
    "closes": "23:59"
  }
}

Opening at 00:00 and closing at 23:59 is how Google's documentation marks a business that's open around the clock. Wrap the block in the same <script> tag as Example 1.

Example 3: a business with several locations

Give each location its own page with its own LocalBusiness block: its own address, phone number, hours and URL. Don't describe every branch as one business on your homepage. LocalBusiness is itself a type of Organization, so to tie the branches to the brand, point each one at a single Organization with parentOrganization:

json
{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://www.example.com/locations/round-rock/#dentist",
  "name": "Bright Smile Dental",
  "url": "https://www.example.com/locations/round-rock/",
  "telephone": "+1-512-555-0163",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "456 Oak Avenue",
    "addressLocality": "Round Rock",
    "addressRegion": "TX",
    "postalCode": "78664",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.50826,
    "longitude": -97.67890
  },
  "parentOrganization": {
    "@type": "Organization",
    "@id": "https://www.example.com/#organization",
    "name": "Bright Smile Dental"
  }
}

Add each location's opening hours the same way as in Example 1. Use the same @id for the Organization everywhere you reference it, and publish its full details once, usually on your homepage. Our guide to multi-location local SEO covers how to build the location pages themselves.

Where to put the code

  • On the page the markup describes: your homepage if you have one location, or each location's own page if you have several.
  • Inside a <script type="application/ld+json"> tag, in either the <head> or the <body>. Google reads both.
  • On WordPress, most SEO plugins have a local business setting, or you can paste the block with a header-code plugin. Check the page source afterwards so you don't end up with two conflicting blocks.
  • On website builders, look for the option to add custom code to a page's header.

How to test your LocalBusiness schema

  • Paste the page URL or the code into Google's Rich Results Test and fix anything it marks as an error.
  • Run the same page through the Schema Markup Validator. It checks everything against schema.org, including properties Google ignores.
  • After publishing, use URL Inspection in Google Search Console to ask Google to recrawl the page.

Common mistakes

MistakeWhy it's a problemFix
Using the generic LocalBusiness typeIt tells Google less than you couldPick the most specific type, like Dentist or AutoRepair
Details that don't match your Business ProfileConflicting phone numbers or hours make both less trustworthyCopy your name, address, phone and hours exactly from your profile (see NAP consistency)
Marking up your own star ratingGoogle doesn't show review stars for a business rating itselfRemove aggregateRating from your own LocalBusiness markup
The same block on every pageDuplicate or conflicting markupPut each location's block on that location's page
Never updating itOld hours or phone numbers linger in the codeUpdate the schema whenever you update your profile
Coordinates that are too roughGoogle asks for at least five decimal placesCopy them from Google Maps

Quick checklist

  • The most specific @type for your business
  • name, address, telephone and url
  • geo with at least five decimal places
  • openingHoursSpecification, including holiday changes
  • Every value matches your Business Profile
  • No errors in the Rich Results Test

Generate your block with the free LocalBusiness schema generator, test it, and add it to your site. Then check the rest of your setup with our local SEO audit checklist.

Frequently asked questions

What is LocalBusiness schema?

Structured data from schema.org that describes a local business, including its name, address, phone number, opening hours and location, so search engines can read those details reliably. It's usually added to a page as a JSON-LD script.

Does LocalBusiness schema help local SEO?

It helps Google confirm your business details, but Google hasn't said it's a ranking factor, and the local pack runs on your Business Profile. It takes minutes to add, so it's still worth doing.

What's the difference between Organization and LocalBusiness schema?

Organization describes a company as a whole. LocalBusiness is a more specific type of Organization for businesses with a physical location or service area, and adds properties such as opening hours and coordinates.

Where do I put LocalBusiness schema?

On the page that represents the business: your homepage for a single location, or each location's own page if you have several. The JSON-LD script can go in the head or the body.

Should a service-area business include its address in schema?

If you hide your address on Google Business Profile, leave the street address out of your schema too. Include your city, region, postcode and country, and list the places you serve with areaServed.

See your real Google Maps visibility

Run a free 13×13 geo-grid scan and get your neighborhood rank baseline in minutes.

Start Free Scan
← Previous Guide19 Free Local SEO Tools Worth Using in 2026Next Guide →How to Get More Google Reviews from Customers (Without Chasing Them)