LocalBusiness Schema Markup: The Complete Guide + Examples
LocalBusiness schema explained: the properties that matter, a copy-ready JSON-LD example, service-area and multi-location patterns.
On this page
Your website is the source search engines and AI assistants trust most when your business details disagree across the web, and LocalBusiness schema is how you make that source unambiguous. LocalBusiness schema is the machine-readable copy of your master NAP: the same name, address and phone you use on Google and on every citation, stated once in JSON-LD so nothing has to be inferred from your page layout. This guide covers what it is, the properties that matter, a copy-ready example, the service-area and multi-location patterns, and the mistakes that turn it into a liability.
What LocalBusiness schema is, and what it is not
Schema.org is a shared vocabulary for describing things on the web. LocalBusiness is the type for a business with a physical presence or service area, and it has dozens of more specific subtypes (Dentist, Plumber, Restaurant, RealEstateAgent, Locksmith), covered in LocalBusiness schema types. You add it to a page as a <script type="application/ld+json"> block; visitors never see it, crawlers and AI systems read it directly.
What it does: it states your entity’s facts without ambiguity. A crawler reading “Call us at (212) 555-0100” in a footer has to guess that the number belongs to the business and not to a partner; a crawler reading "telephone": "+1 212-555-0100" inside a LocalBusiness object does not.
What it does not do: it does not rank you by itself, it does not replace your Google Business Profile, and it does not fix inconsistent citations. It is one more copy of your NAP, on the most authoritative source you control, which is exactly why it must match the others. The short definition lives in our glossary entry for LocalBusiness schema; this guide is the how.
The properties that matter
Keep the block small and correct rather than large and speculative. In practice:
| Property | What it is | Notes |
|---|---|---|
@type | The most specific LocalBusiness subtype that fits | Dentist, not LocalBusiness, if you are a dentist |
@id | A stable identifier URL for the entity | Usually your homepage plus #business |
name | The real-world business name | Exactly as on your signage, Google profile and citations |
address | A PostalAddress object | streetAddress, addressLocality, addressRegion, postalCode, addressCountry |
telephone | One number, international format | The same number as your listings, never a tracking number |
url | The canonical site URL | |
image | A photo of the premises or the logo | Google recommends it for the local business rich result |
openingHoursSpecification | Hours per day | Must match Google and directories |
geo | GeoCoordinates with latitude and longitude | Take them from the entrance, not the car park |
priceRange | A rough band such as a run of currency symbols | Optional |
sameAs | Your profile URLs | Google profile, Facebook, Apple, Foursquare, industry directories |
areaServed | Places you serve | Service-area businesses, see below |
Two properties deserve a warning. aggregateRating must reflect reviews that are genuinely on that page and collected under the platform rules; marking up ratings you do not display, or ratings copied from Google, violates structured-data policies. And sameAs is only useful when the profiles it points to carry the same NAP; pointing at a stale Yelp page hands the crawler a contradiction with a signpost.
A copy-ready example
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://www.example-dental.com/#business",
"name": "Northside Dental",
"url": "https://www.example-dental.com/",
"image": "https://www.example-dental.com/images/office.jpg",
"telephone": "+1 512-555-0134",
"address": {
"@type": "PostalAddress",
"streetAddress": "1200 North Lamar Blvd, Suite 210",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78703",
"addressCountry": "US"
},
"geo": { "@type": "GeoCoordinates", "latitude": 30.2795, "longitude": -97.7534 },
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"], "opens": "08:00", "closes": "17:00" },
{ "@type": "OpeningHoursSpecification", "dayOfWeek": "Friday", "opens": "08:00", "closes": "13:00" }
],
"sameAs": [
"https://www.facebook.com/example-dental",
"https://foursquare.com/v/example-dental"
]
}
Replace every value from your master NAP, not from memory. If your Google profile says “Suite 210” and the schema says “Ste 210”, you have just published a NAP inconsistency on the one source that was supposed to settle arguments.
Service-area businesses
If customers do not visit your address, you still need LocalBusiness schema, with two changes. Add areaServed, listing the same towns or region you declare on Google and Bing (each as a City or AdministrativeArea object, or a plain string), so the site and the profiles agree about where you operate. And decide, deliberately, whether to include the street address. Including it keeps your schema consistent with the address on record everywhere; omitting it keeps a home address off the page. Either is defensible; what is not defensible is a street address in the schema that differs from the hidden address on your profiles. The platform-by-platform rules are in service area business citations.
Multi-location businesses
One LocalBusiness block per location, on that location’s page, each with its own @id, address, phone and hours. The homepage carries an Organization block for the brand and can list the locations as subOrganization or link to them. The mistake to avoid is the reverse: a single block with head office’s address on every location page, which tells crawlers that all your branches are one entity at one address. The per-location discipline (store IDs, one master record per unit) is the same one that governs citations; see franchise SEO.
Where it fits in the rest of your local SEO
Search engines and AI assistants decide how much to trust your business by checking whether its details agree across sources: your site, your Google profile, Apple and Bing, and the directories that cite you. Schema makes your site’s vote in that check explicit. That is why the order of work matters: write the master NAP first, put it on your Google profile and your citations, then encode the same values in schema. Done the other way round, the schema becomes the odd one out. Our guide to getting recommended by ChatGPT explains why agreement between sources is the signal assistants reward, and the industry guides under local SEO show where schema sits in each vertical’s plan.
Validate it, then check it against your listings
Two checks, in this order:
- Is the markup valid? Paste the page URL into a schema validator and fix every error and warning that concerns the LocalBusiness object. How to validate LocalBusiness schema walks through the tools and the common errors.
- Does it agree with the rest of the web? Run the free NAP checker with your website filled in. It parses every JSON-LD block on the page, reads the LocalBusiness or Organization name, address and telephone, and compares them with the open directories. It reports whether a LocalBusiness block exists at all, and where the site and your listings disagree.
Valid schema that contradicts your citations is worse than no schema, because it publishes the contradiction in the format machines trust most.
The mistakes we see most
- Two blocks on one page. An SEO plugin emits one LocalBusiness object, the theme emits another, and they disagree. Pick one source. The WordPress specifics are in how to add LocalBusiness schema in WordPress.
- Generic
@type.LocalBusinesswhenPlumberexists. The subtype is a category signal; use the most specific one that is true. - Tracking numbers. A call-tracking number in the schema and the real number on Google is a phone mismatch on your own site.
- Copied coordinates.
geotaken from a city centre or a search result rather than the entrance. In one of our own client builds the coordinates supplied by the owner were more than two hundred metres off, on top of another shop; a directory built from them would have placed the business in the wrong building. - Marked-up ratings that are not on the page. A policy violation that can cost you rich results across the site.
- Set once, never updated. A move, a rebrand or new hours change the schema too. Add it to the checklists in changing your business address and changing your business name.
Citation Builder does not write your website’s schema; it builds the directory citations that the schema must agree with, from one canonical NAP, and its free checker tells you whether the two match today. Check your NAP with your website included, then fix the schema or the listings, whichever is wrong.
Frequently asked questions
What is LocalBusiness schema?
Structured data, written as JSON-LD in your page's HTML, that states your business's name, address, phone, hours, category and location in a form machines read directly instead of guessing from the page text. It uses the LocalBusiness type from schema.org, or one of its more specific subtypes such as Dentist, Plumber or Restaurant. Search engines and AI assistants use it to verify the business entity behind the site.
Does LocalBusiness schema improve local rankings?
Not directly and not on its own. It makes your site's NAP unambiguous, which strengthens the cross-check search engines and AI assistants run between your site, your Google Business Profile and your directory citations. It can also make your page eligible for certain rich results. Treat it as the machine-readable copy of your master NAP, not as a ranking trick.
Which properties are required in LocalBusiness schema?
For Google's local business rich result, name and address are required and image is strongly recommended; telephone, url, openingHoursSpecification, geo and priceRange are recommended. For entity verification the practical minimum is name, a complete PostalAddress, telephone, url and the most specific @type that fits, all matching your Google profile and citations exactly.
Where on the site should LocalBusiness schema go?
On the page that represents the location: the homepage or contact page for a single-location business, and each location page for a multi-location one. It is fine to emit it site-wide as long as it is the same entity with the same @id everywhere. Never emit two different LocalBusiness blocks on one page, which is the classic plugin-plus-theme conflict.
Does the free NAP checker read my schema?
Yes. When you enter your website, the checker parses every JSON-LD block on the page, reads the LocalBusiness or Organization name, address and telephone, and compares them with what the open directories publish. It tells you whether a LocalBusiness block exists at all, and where the site disagrees with your listings.
Get these citations built for you
Citation Builder ranks the best citation sites for your country and industry, and builds your optimized citations.
Start freeFound this useful? Pin us in Google and our pages carry a preferred badge in your own Top Stories and AI results.
Add us as a preferred source on GoogleCitation sites for your market
Every directory below is ranked from our live catalog, with the free ones marked.