LocalBusiness Schema Markup: A Practical Guide for Owners
Learn which LocalBusiness schema fields matter, see a JSON-LD example to adapt, and test it with free tools before your business details go live.
If you run a café, a dental practice, a plumbing firm or a yoga studio, search engines need the basics about you: name, address, phone number and opening hours. Schema markup is a small block of structured data that states them in a format machines can read, instead of leaving them to guess from your page layout.
This guide is for owners and the people who look after their websites. By the end you will know which fields to fill in, have a working example to adapt, and be able to test it before you leave it live.
In short:
LocalBusinessmarkup (written as JSON-LD) labels your business details for search engines. It does not control rankings or what Google shows. Use the most specific type that fits, fill in only true facts, and make sure they match your visible page and your Google Business Profile.
Three things that are easy to confuse
- The Schema.org vocabulary. The full list of types and properties you may use. The Schema Markup Validator checks against it.
- Google's rich-result features. A smaller set of markup that Google documents and may use in search results. Google decides whether and where anything appears.
- Your Google Business Profile. A separate product you manage directly, which Google uses for local results. Your website markup does not replace it.
Your markup sits in the first two groups. It does not control the third.
What it will and won't do
LocalBusiness markup helps search engines interpret details that are already on your page. It will not:
- rank a brand-new site by itself;
- fix a page with no visible address, hours or contact details;
- override a different set of details in your Business Profile;
- earn review stars from reviews you wrote about yourself. Google's review snippet guidelines don't allow self-serving reviews in LocalBusiness or Organization markup.
Treat it as a layer on top of a page that already says clearly who you are and where you are.
The fields that matter
Google's LocalBusiness structured data documentation lists name and address as required. It lists many others as recommended, such as geo, telephone, url, openingHoursSpecification and priceRange. Check that page for the current list before you rely on any single field.
| Field | What to put |
|---|---|
name | The name you trade under |
url | Your main website address |
telephone | Full international format, e.g. +44-20-7946-0000 |
address | Street, city, region, postcode, country |
geo | Latitude and longitude of the premises, to at least 5 decimal places |
openingHoursSpecification | Regular days and hours |
image, logo | Full URLs of a storefront photo and your logo |
priceRange | A short symbolic range such as $$ |
sameAs | Profiles you control, such as social pages |
@id | A stable identifier, e.g. https://yourbusiness.com/#business |
Only include what you can fill in truthfully. A missing field is better than an invented one.
If you work from home
Never publish a private address just to satisfy a schema field. Google lists address as required for this markup, but its page doesn't cover service-area businesses, so check Google's current guidance before deciding what to publish. Your privacy comes first. A page can still be valid Schema.org markup without being eligible for any Google feature.
Pick the most specific type
LocalBusiness is the general type. Schema.org has many sub-types, and Google advises using the most specific one that fits. Examples include:
Restaurant,CafeOrCoffeeShop,BakeryDentist,MedicalClinicHairSalon,BeautySalonPlumber,Electrician,LocksmithStore,ClothingStoreLegalService,AccountingService
Browse the list at schema.org/LocalBusiness and check the exact spelling. Names you might expect, such as Cafe, are not real types. If nothing fits, stay with LocalBusiness.
A working example
This block is for a fictional café. Replace every value with your own, including the URLs, address and coordinates. The values below are placeholders, so don't copy them to a live site.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CafeOrCoffeeShop",
"@id": "https://yourbusiness.com/#business",
"name": "Your Business Name",
"url": "https://yourbusiness.com/",
"image": "https://yourbusiness.com/photos/storefront.jpg",
"logo": "https://yourbusiness.com/logo.png",
"telephone": "+44-20-7946-0000",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Street",
"addressLocality": "Your City",
"addressRegion": "Your Region",
"postalCode": "AB1 2CD",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 51.50000,
"longitude": -0.10000
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "09:00",
"closes": "17:00"
}
],
"sameAs": [
"https://www.facebook.com/your-own-page",
"https://www.instagram.com/your-own-account"
]
}
</script>
Notes on the details:
- Phone: include the country code and area code, as Google's documentation asks.
- Coordinates: Google asks for latitude and longitude with at least 5 decimal places, so don't round them. Use the real position of your premises.
- Country: use a two-letter country code such as
GB,US,AUorSG. - Hours: use 24-hour times (
14:30, not2:30pm). Leave out days you are never open. - Holiday closures: Google's documentation handles closures within
OpeningHoursSpecification. For a day closed all day, setopensandclosesto00:00. For seasonal hours, usevalidFromandvalidThroughwith dates in YYYY-MM-DD format. Check Google's page for current details. sameAs: list only profiles your business actually controls.- Several locations: give each location its own page and its own block with a distinct
@id.
Where to put it
Put the block on the page where the same details are visible to visitors. That is usually the contact page or a location page, and a single-site business may also use the home page. Markup and visible content on a page should agree.
Before adding anything, check whether your theme, SEO plugin or another extension already outputs LocalBusiness markup. Two conflicting blocks cause more trouble than one tidy one.
How you add it depends on your platform:
- WordPress: many SEO plugins have local-business or schema settings. Which features you get can depend on the plugin and its plan, so read its current documentation.
- Shopify, Wix, Squarespace: these generally offer some form of custom code or header injection. Where it lives and what it can target varies by plan and template, so use your platform's help pages.
- Hand-built sites: paste the block into the page's
<head>, or just before</body>. JSON-LD works from either place.
How to test it
- Look at the live page. View page source shows what your server sent. Developer tools (F12, then Elements) show the page after JavaScript has run. If a plugin or script adds your markup, check both.
- Run Google's Rich Results Test on the live URL. It covers only features Google supports, and a pass doesn't mean anything will be displayed.
- Run the Schema Markup Validator. It checks your markup against the Schema.org vocabulary itself.
Fix any errors. Treat warnings one by one: add recommended details where you have accurate ones, and never invent values just to clear a warning.
Check: the page must be reachable. It shouldn't sit behind a login or carry a
noindextag, and your robots.txt file shouldn't block it.
Common problems
| Symptom | Likely cause | Fix |
|---|---|---|
| Tool finds no markup | Script added by JavaScript, or wrong page tested | Test the live URL and compare source with rendered HTML |
| Duplicate or clashing entries | Theme and plugin both output it | Switch one off |
| Missing field warning | Optional detail not supplied | Add it only if it is true |
| Hours differ across the web | Website not updated after a change | Align schema, page and Business Profile |
Keep it honest and in sync
The quickest way to cause problems is to publish details that disagree with the rest of your online presence. If your schema says you close at 20:00 and your Business Profile says 18:00, customers and search engines get conflicting answers.
Run through this whenever something real changes, such as a new number, new hours, a new address or a holiday closure. It is also worth doing after plugin or theme updates:
- Opening hours match on the page, in the schema and on your Business Profile.
- Phone digits are identical in all three places.
- The address matches, including unit or suite numbers.
- Every
sameAslink still works and belongs to you. - The live URL has been retested.
Schema is only one part of local SEO. The page still needs clear content, a sensible title and description, and links from the rest of your site. To see how a page of yours looks on those basics, you can run Lordevo's free single-page SEO scan. If you later get a full audit, how to read an SEO audit helps you decide what to fix first.
Key takeaways
- Use JSON-LD with the most specific LocalBusiness sub-type that fits.
- Include
nameandaddress, plus every recommended field you can answer truthfully. - Keep schema, visible page content and your Google Business Profile identical.
- Put the block on the page that shows those details, and remove duplicate markup from themes or plugins.
- Test the live page with the Rich Results Test and the Schema Markup Validator.
- Retest after plugin or theme updates, and update the markup whenever something real changes.
FAQ
Will LocalBusiness schema get me into the local pack?
Not on its own. Google decides what appears, and your Business Profile plays a separate, central role. Markup helps search engines understand your page. It doesn't promise any placement.
Do I need a developer?
Not always. Some SEO plugins can output the markup from a settings screen. If you paste it by hand, change every placeholder value and test it afterwards.
Can I add star ratings from my own reviews?
Google's guidelines don't allow self-serving reviews about your own business in LocalBusiness markup, so leave them out.
Should every page of my site include it?
Usually not. Put it where your business details are shown, such as the contact page or a location page. Multi-location businesses should give each location its own page and block.