What Is LocalBusiness Schema and How Do You Add It?
Local business schema is the LocalBusiness JSON-LD markup that tells Google your name, address, hours and category directly. This guide covers the properties that matter, a complete copy-paste example, and how to validate what you add.
Local business schema is the LocalBusiness JSON-LD markup you add to your website's code so Google can read your name, address, hours, category and reviews as structured data instead of guessing from plain text. It will not push you up the map pack by itself, but it is one of the quickest technical fixes I make on a new client site, and this guide gives you a complete, copy-paste example.
I add LocalBusiness schema to nearly every local client site I touch, usually in the first week, right after the Google Business Profile itself is sorted. This guide covers the properties Google actually documents, a complete example you can copy for a clinic, salon or shop, how to handle multiple locations or a service area, and how to validate what you add before you trust it.
What LocalBusiness schema actually is, and is not
LocalBusiness is a type defined by Schema.org, the shared vocabulary Google, Bing and other search engines read to understand a page's content. Written as JSON-LD, a block of plain JSON sitting inside a script tag, it describes a physical or service-area business: what it is called, where it operates, when it is open and what it costs.
It is easy to confuse this with your Google Business Profile, but the two are separate systems that happen to describe the same business. Your Business Profile is what you manage directly at business.google.com, and it is what actually powers your Maps pin and your place in the local pack. LocalBusiness schema is code on your own website that helps Google's knowledge panel and general web understanding of your business, and Google's own documentation notes it can feed the panel that appears when someone searches your business by name, separately from how Maps ranks you.
This guide goes deep on LocalBusiness alone. For the broader picture of all eight schema types a small business site needs, Article and FAQPage included, my schema markup guide is the pillar post this one sits underneath. If your interest is really in ranking higher on Maps rather than in the markup itself, my guide to Google's local ranking factors covers the signals that actually move that needle, of which schema is a small supporting piece, not the main lever.
The properties Google actually looks for
Schema.org itself defines dozens of properties on LocalBusiness, but Google only documents a shorter list as meaningfully consumed by its systems. Getting these right matters more than adding every property you can find.
Per Google's own structured data documentation, only two properties are strictly required: name and address, with address written as a full PostalAddress object rather than a single line of text. A block with just those two is technically valid, but it wastes most of what the markup can do.
Google lists a longer set as recommended rather than required: telephone, url, geo coordinates, openingHoursSpecification, priceRange (kept under 100 characters), aggregateRating and review where genuine ratings exist, and menu or servesCuisine for food businesses specifically. None of these are mandatory for the markup to parse, but each one is a small piece of information Google would otherwise have to guess at or skip entirely.
The table below is the version of this I actually work from when I mark up a new site, roughly in the order I fill each property in.
| Property | Status | What it does |
|---|---|---|
| name, address | Required | Identifies the business and its physical location |
| telephone, url | Recommended | Contact and canonical website link |
| geo | Recommended | Exact map coordinates as GeoCoordinates |
| openingHoursSpecification | Recommended | Days and hours you are open |
| priceRange | Recommended | Relative cost, under 100 characters |
| sameAs | Recommended | Links to your Maps listing and social profiles |
| areaServed | Situational | Cities or regions for service-area businesses |
| aggregateRating, review | Recommended if genuine | Real review data only, never invented |
Choose the most specific subtype, not plain LocalBusiness
LocalBusiness itself is a generic type, and Schema.org, alongside Google's own guidance, recommends using the most specific subtype your business fits rather than the generic type on its own. A more specific type carries every property LocalBusiness has, plus a few of its own, and gives Google a sharper signal about exactly what kind of business it is reading.
A clinic should use Dentist or the broader MedicalBusiness rather than plain LocalBusiness. A salon fits under BeautySalon, itself a subtype of HealthAndBeautyBusiness. A brokerage or property consultant fits RealEstateAgent. A restaurant or cafe uses Restaurant, which adds access to servesCuisine and menu, two properties that do not exist on the generic type at all.
If nothing specific enough exists for your category, and Schema.org's list runs to hundreds of types, fall back to a closer parent type before settling for plain LocalBusiness. A gym is a HealthClub, a law office is a LegalService, a repair shop is often a ProfessionalService. Five minutes searching Schema.org's type hierarchy for your category is worth the small relevance gain.
A complete LocalBusiness example for a Pune clinic
Here is a full, working example for a fictional dental clinic in Baner, Pune. Copy it, replace every value with your own business details, and keep the property names exactly as written since these are fixed by the Schema.org specification.
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Sahyadri Dental Studio",
"image": "https://sahyadridentalstudio.in/exterior.jpg",
"telephone": "+91-98765-11223",
"url": "https://sahyadridentalstudio.in/",
"address": {
"@type": "PostalAddress",
"streetAddress": "212 Baner Road",
"addressLocality": "Pune",
"addressRegion": "Maharashtra",
"postalCode": "411045",
"addressCountry": "IN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "18.56360",
"longitude": "73.78450"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday", "https://schema.org/Saturday"],
"opens": "10:00",
"closes": "20:00"
}
],
"priceRange": "Rs 500 to Rs 15000",
"sameAs": [
"https://www.google.com/maps/place/?q=place_id:REPLACE_WITH_YOUR_PLACE_ID",
"https://www.instagram.com/sahyadridentalstudio/",
"https://www.facebook.com/sahyadridentalstudio/"
]
}
Every value in that block, including the phone number, address and coordinates, is invented for this example. Do not publish it as-is. Swap in your real details, and drop any property you cannot fill in honestly rather than leaving a placeholder live on your actual site.
Opening hours, geo coordinates and sameAs, explained
openingHoursSpecification takes an array, since most businesses need more than one entry to cover different hours on different days. Each entry lists the days it applies to under dayOfWeek, written as full Schema.org URLs or short day names, alongside opens and closes times in 24-hour hh:mm format. A clinic open 10am to 8pm on weekdays but closing early on Sunday needs two separate entries in the array, not one trying to cover both.
geo takes latitude and longitude as a GeoCoordinates object. Pull the exact figures from Google Maps by right-clicking your pin and copying the coordinates shown, rather than estimating. Five to six decimal places is precise enough to pin an exact building rather than a general neighbourhood.
sameAs is not specific to LocalBusiness, it is a general Schema.org property that lists other web pages that unambiguously represent the same entity. For a business, that means your Google Maps listing URL, and any social profiles that are genuinely yours: Instagram, Facebook, LinkedIn. This is the same property this site's own Person schema uses to link to its LinkedIn, Instagram and YouTube profiles. Only include profiles you actually control and update; a dead or abandoned account under sameAs does more harm than leaving the property out.
Multiple locations and service-area businesses
A business with more than one branch needs a separate LocalBusiness block on each location's own page, each with its own accurate address, phone number and hours. Do not describe two branches inside one block, and do not copy the same schema onto every location page with only the address swapped, since that usually means the hours or phone are wrong somewhere and nobody notices for months.
If your locations share a parent brand, Schema.org supports a department property for tying related business units together under one parent, though for most small businesses with genuinely separate branches, a clean, independent LocalBusiness block per branch page is simpler to maintain and less likely to drift out of sync.
A business that travels to the customer, a plumber, an electrician, a home tutor, rather than operating from a storefront customers visit, should add areaServed to list the cities or localities it covers. Keep the address property, since Google's documentation still expects it, but consider limiting it to your locality and region rather than a full street address if that matches how you have set your Google Business Profile up as a service-area business.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Kharadi Home Plumbing Services",
"areaServed": [
{"@type": "City", "name": "Pune"},
{"@type": "City", "name": "Pimpri-Chinchwad"},
{"@type": "City", "name": "Hinjawadi"}
]
}
List only the areas you genuinely serve and can respond to the same day. Listing every city in Maharashtra to widen your reach reads as spam to anyone checking, and it dilutes the relevance signal for the areas you actually care about.
Keep your schema consistent with your Google Business Profile
Your LocalBusiness schema and your Google Business Profile describe the same business to the same company, so they need to agree. A name, address or phone number that differs between the two creates exactly the kind of doubt that inconsistent NAP across directories creates, just inside your own website's code instead of across the wider web.
Before publishing, open your live Business Profile and your draft schema side by side. Confirm the business name matches character for character, the address matches down to the floor or shop number, the phone number is identical including the country code format, and your opening hours agree, including any seasonal or festival exceptions you have set on your profile.
This is a five-minute check, and it is the single most common mistake I find when auditing schema someone else wrote: a developer template a business name from the footer, while the actual Business Profile uses a slightly different legal name upstairs. Both being technically valid on their own does not stop Google from noticing the mismatch between them.
How to validate your LocalBusiness schema
Three checks, every time you add or change this markup, before you consider it finished.
Google's Rich Results Test, at search.google.com/test/rich-results, takes a live URL or pasted code and shows exactly what Google's own systems parsed from it, along with any blocking errors. This is the first check I run after writing or editing any schema block.
The Schema Markup Validator at validator.schema.org checks against the full Schema.org specification rather than only what Google supports, which catches a property that does not actually belong on that type, a mistake the Rich Results Test sometimes misses.
Search Console's Enhancements report shows every page across your whole site carrying a given schema type once Google has recrawled them, split into valid and invalid counts. This is how you catch a mistake that made it into a shared template and is now repeated across every location page instead of just one.
How to add LocalBusiness schema to your site in 6 steps
The sequence below takes under an hour for a single-location business once you have your details gathered.
Step 1: Gather your exact business details
Collect your legal business name exactly as it appears on your Google Business Profile, full address, phone number with country code, opening hours including any seasonal exceptions, and your Maps listing URL. A common pitfall is copying an old address from a business card instead of what is currently live on your profile. Verify it worked by opening your live Business Profile in a second tab while you work.
Step 2: Choose your subtype
Pick the most specific Schema.org type your business fits, Dentist, Restaurant, BeautySalon, RealEstateAgent, or a close parent type if nothing exact exists. A common pitfall is defaulting to plain LocalBusiness out of convenience. Verify it worked by checking your chosen type's page on Schema.org lists the properties you plan to use.
Step 3: Write the JSON-LD from the example above
Copy the example in this guide and replace every value with your real details, dropping any property you cannot fill in honestly. A common pitfall is leaving a placeholder value, like the example phone number, live by accident. Verify it worked by reading through the finished block once for any value that still says "example" or "replace".
Step 4: Place the script tag in your page head
Wrap the JSON in a script tag with type application/ld+json and add it to the head of the specific page describing that business or location, using your CMS's custom code or header field if you are not editing raw HTML. A common pitfall is adding it sitewide when you have multiple locations, which describes every location page as the same business. Verify it worked by viewing the page's source and confirming the script tag appears once.
Step 5: Test with the Rich Results Test before publishing
Paste your draft code or the live URL into the Rich Results Test and fix every error it flags before moving on. A common pitfall is ignoring warnings entirely; they will not block the markup but usually point at a property worth adding. Verify it worked by confirming the tool reports the page as eligible with no errors.
Step 6: Publish and recheck in Search Console over the following weeks
Once live, run the real URL through the Schema Markup Validator for a second, stricter check, then watch Search Console's Enhancements report over the following weeks. A common pitfall is publishing once and never checking back, missing a template error that spreads silently. Verify it worked by confirming the page count in Enhancements climbs and the error count stays at zero.
Common mistakes with LocalBusiness schema
The mistake I see most often is schema that describes a different business than the page's own content, usually left over from a template built for a different client and never fully updated. Every value in the block should be true of the exact page it sits on.
Close behind is mismatched NAP between the schema and the live Google Business Profile, covered above, and broken JSON syntax: a trailing comma, a missing closing brace, an unescaped quote inside an address line. Any one of these breaks the whole script block silently, with no visible error on the page itself.
A subtler mistake is adding aggregateRating or review data that is not genuinely sourced from real customer reviews. Schema describing ratings a visitor cannot verify anywhere on the page is treated as manipulative structured data, and it risks the same kind of enforcement action as fake reviews on your profile.
Honest limits: what this schema will not do
LocalBusiness schema will not lift your position in the local pack. That ranking is governed by the factors covered in my guide to Google's local ranking factors, relevance, distance and prominence, driven mainly by your Business Profile, reviews and citations, not by code on your website.
What this markup does is make your business easier for Google to parse correctly wherever it already shows up: knowledge panels, general web results, and increasingly AI-generated answers that lift a fact or an address from a page that is easy to read cleanly. That is a real, worthwhile improvement. It is just not the same improvement as ranking higher on Maps.
If ranking is genuinely your goal, treat this schema as the last five percent of a technical SEO pass, after your technical SEO basics are solid and your Business Profile itself is complete. Run your site through the free website SEO checker first to see what else needs fixing, then come back and add this markup as the finishing step, not the first one.
Frequently asked questions
What is local business schema used for?
Local business schema is JSON-LD code, usually the LocalBusiness type or a specific subtype like Dentist or Restaurant, that tells Google your business name, address, phone number, hours and category in a format it can read directly rather than infer from your page's text. It sits in your website's own code, separately from your Google Business Profile. Search engines use it mainly to build knowledge panels and to understand your business correctly across the web, not to decide your Google Maps ranking position.
Is a LocalBusiness schema generator safe to use?
Most free generators produce technically valid JSON-LD, so using one to save time is fine as a starting point. The risk is not the tool, it is publishing the output without checking every value against your actual Google Business Profile, since a generator has no way to know your real hours or address. Always review and edit the generated code by hand, then run it through the Rich Results Test before publishing, rather than trusting the output blindly.
Where can I get a working local business schema example?
This guide includes one: a complete JSON-LD block for a fictional Pune dental clinic, covering name, address, phone, opening hours, geo coordinates and social profile links through sameAs. Copy it directly and replace every value with your own business details rather than starting from a blank file. Schema.org's own LocalBusiness reference page also shows minimal examples for individual properties if you need to check the exact format for one field.
How do I validate my local business schema?
Run it through Google's Rich Results Test to see exactly what Google's systems parsed and whether any errors block a result. Then check it again with the Schema Markup Validator at validator.schema.org, which tests against the full specification rather than only what Google supports. Once the page is live, watch Google Search Console's Enhancements report over the following weeks to confirm the page counts as valid and no errors appear across your site.
Does adding LocalBusiness schema improve my Google Maps ranking?
No, not directly. Your Google Maps and local pack position is governed by relevance, distance and prominence, driven mainly by your Google Business Profile, reviews and citations, which are separate from your website's code entirely. LocalBusiness schema helps Google parse your business details correctly for knowledge panels, general web results and AI-generated answers, which is a genuine benefit, just not a map-pack ranking one. Treat it as a technical finishing touch, not a substitute for profile and review work.
Related guides
- Google's local ranking factors explained
- Schema markup guide (all 8 types)
- NAP consistency for local SEO
- Google Business Profile optimization guide
- What is local SEO?
- Technical SEO basics for business owners
- Schema markup for category pages
- FAQ schema for Google AI Overviews
Your next step
Run your homepage or best local landing page through the free website SEO checker to see what else needs fixing, then come back and add the LocalBusiness example above as your finishing step. If you would rather have this done for you, get in touch.
Get new guides in your Google Search & Discover feed.