Local business schema: the short answer
Local business schema is structured data, usually a short block of JSON-LD in a page's code, that states your business name, address, phone number, hours, and type in a vocabulary search engines can read. It helps Google understand facts that are already on the page.
It is not a ranking switch. Google does not promise that markup will produce any rich result, does not describe it as a ranking boost, and says no special schema is needed for its AI features. For most small businesses, the right amount is one accurate block on the page that shows your details, matching that page and your Google Business Profile word for word.
What is local business schema?
Schema.org is a shared vocabulary for describing things on the web. It defines the LocalBusiness (opens in a new tab) type as a particular physical business or branch of an organization, and describes a service area separately with the areaServed property. LocalBusiness has more specific subtypes: under HomeAndConstructionBusiness (opens in a new tab) you will find Plumber, Electrician, HVACBusiness, and RoofingContractor. Google's LocalBusiness documentation (opens in a new tab) asks for the most specific subtype available.
Google recommends JSON-LD (opens in a new tab), a block of code that sits in the page without changing what visitors see. For its local business feature, Google lists two required properties, name and address, and several recommended ones, including telephone, url, and openingHoursSpecification.
What local business schema markup changes, and what it does not
| Common claim | What Google's documentation supports |
|---|---|
| It helps search engines read your business details | Yes. Structured data gives Google explicit clues about what a page means. |
| It can feed business details in search results | Possibly. Google says markup lets you tell it about hours, departments, and more, and that results may show a knowledge panel for the business. |
| It produces a rich result or knowledge panel | Not reliably. Google's general guidelines (opens in a new tab) say it does not promise that structured data will appear in results. |
| It raises rankings | Google does not describe it that way. A structured data manual action removes rich result eligibility and, per Google, does not affect how the page ranks. |
| It is required for AI Overviews or AI Mode | No. Google's AI features page (opens in a new tab) says there is no special schema.org structured data you need to add. |
| It can show review stars for your own business | No. Self-serving reviews are ineligible, as covered below. |
| It replaces or updates your Business Profile | No. The profile is managed separately and should say the same thing. |
Your Business Profile has its own fields; the Google Business Profile checklist covers them.
Check what your site already outputs
Before writing markup, find out what the page already declares. Some builders, themes, and SEO plugins generate it from business settings, and each can add its own block.
- Open the page that shows your business details, view the page source, and search for
ld+json. Each match is one block of JSON-LD. - Note how many blocks there are, which
@typeeach one declares, and whether their name, phone, address, and hours agree with each other and with the page. - Run the page through Google's Rich Results Test, covered in the testing steps below, to see what Google reads.
If an accurate block already exists, your job is maintenance, not writing. If the details are wrong, fix them in the setting that generates the block rather than adding a second block by hand. If the source search finds nothing, confirm with the Rich Results Test before writing a new block; the example below is a starting point.
A minimal JSON-LD example for a service-area business
This example is hypothetical: Brightwater Plumbing is fictional, and the domain and 555 phone number are placeholders. It describes a business that works at customers' homes and does not receive visitors at its own address.
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Brightwater Plumbing",
"url": "https://www.example.com/",
"telephone": "+1-217-555-0142",
"address": {
"@type": "PostalAddress",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
},
"areaServed": [
{ "@type": "City", "name": "Springfield, IL" },
{ "@type": "City", "name": "Chatham, IL" }
],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:30",
"closes": "17:30"
}
]
}
To adapt it, replace each value with what your page shows, using this field map:
| Property | What to put | Must match |
|---|---|---|
@type | The most specific subtype that fits, such as Plumber rather than the generic LocalBusiness | What the business actually does |
name | Your real-world business name | The name on the truck, the page, and the Business Profile. Google's profile guidelines (opens in a new tab) ask for the real-world name used consistently, and the markup should follow the same rule |
url | The page that represents the business | A working page on your own domain |
telephone | The main number customers call | The number printed on the page, not a different tracking number |
address | Only the address parts you show publicly | The address on the page and profile; see the next section for service-area businesses |
areaServed | The towns or areas you serve. Schema.org defines it (opens in a new tab) as the geographic area where a service is provided | The areas the page and profile already name |
openingHoursSpecification | One entry for each set of days that share the same hours, written as in the example | The hours shown on the page and profile |
Three things are left out on purpose. There is no rating or review markup, because self-serving reviews are ineligible. There are no geo coordinates, because they would reveal a location the business has chosen not to publish. And there is no priceRange, an optional property Google says must be shorter than 100 characters; leave it out unless you can state a range that stays accurate.
Address handling for service-area businesses
Google's Business Profile help tells service-area businesses to remove their address (opens in a new tab) if they do not serve customers there, and to set service areas by city, postal code, or another area. Google's structured data documentation, meanwhile, lists address as required and asks you to include as many address properties as possible, but does not mention service-area businesses or areaServed at all.
No Google structured data guidance resolves that tension, so this is a judgment call. The example follows two rules Google does state: do not mark up content that is not visible to readers, and keep markup a true representation of the page. Mark up the address parts you actually publish, list your service areas, and do not put a street address in code that you hide everywhere else. A testing tool may still report missing optional fields; accept that tradeoff knowingly.
If customers do visit your location, use the full street address exactly as it appears on the page and your profile. A storefront can also add the geo coordinates Google's LocalBusiness documentation lists as recommended, because its location is already public. In this hypothetical storefront version, the street is a placeholder:
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Example Street",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
}
How to add local business schema
If your site has no block yet, the markup goes inside a script element with the type application/ld+json, usually in the page head: through a custom code setting on a builder, a plugin field or theme setting on WordPress, or the page template on a custom site. Place it on the page that shows your details, usually the homepage or contact page. A business with several locations should describe each location on its own page.
Common local business schema mistakes
- Review stars for your own business. Google's review snippet guidelines (opens in a new tab) say that when a business controls the reviews about itself, pages using LocalBusiness or Organization markup are ineligible for the star review feature. That includes reviews pulled in through an embedded widget, such as a Google or Facebook reviews widget.
- Markup that disagrees with the page. A different phone number, old hours, or a name variation in the code is a mismatch. Google's AI features page recommends making sure structured data matches the visible text.
- Markup that disagrees with your other listings. The page, the markup, the Business Profile, and directory listings should state the same facts. The local citations review covers why consistency across listings matters.
- Duplicate blocks. A hand-written block added on top of one a theme or plugin already outputs. Repeat the source check above after publishing.
- A generic type. LocalBusiness works, but a specific subtype that fits is better.
- Forgotten updates. When hours, phone numbers, or service areas change, the markup has to change too.
How to test local business schema
Run the Rich Results Test. Paste the page address into Google's Rich Results Test and fix any critical errors, as Google's LocalBusiness documentation recommends.
Check the vocabulary. Run the same page through the Schema Markup Validator (opens in a new tab), which checks schema.org markup in general rather than Google's feature rules.
Compare by eye. Put the markup, the visible page, and your Business Profile side by side. Name, phone, hours, and areas should match exactly.
Inspect the live page. After publishing, use URL Inspection in Search Console to see how Google sees the page. If the page is not indexed yet, the new-site indexing checklist covers the usual blocks.
Recheck after changes. Repeat these steps whenever hours, phone numbers, service areas, or the site template change, and once a year when you run your small business website audit, alongside its Business details check.
Cleland & Co.'s technical-readiness checklist gives a quick first look at one page. It checks whether the page's JSON-LD parses, whether it declares an Organization or LocalBusiness type, whether the page's JSON-LD includes address, phone, and hours fields when a LocalBusiness type is declared, and whether the business name (loosely matched) and phone in the markup appear in the text of the page's HTML, with scripts and styles removed. It does not validate markup against Google's rich result rules, check your Business Profile or directory listings, or measure whether AI answers mention you. For how local search is shifting more broadly, see local SEO in 2026.




