Local business schema markup is a small block of code on your website that describes your business in a format search engines can read without guessing. Humans see your address in the footer; Google sees it too, but structured data states unambiguously that this is the business's address, this is its phone number and these are its opening hours.
It is not a ranking trick, and Google is clear that structured data does not guarantee any particular appearance in search. But it is part of a well-built local website, it reinforces the details on your Business Profile, and it gives search engines and AI systems a clean source of facts about you.
What Google requires and recommends
Google's documentation for LocalBusiness structured data lists two required properties and a set of recommended ones. At the time of writing:
| Property | Required or recommended | What to put |
|---|---|---|
| name | Required | Your business name, as on your signage and Business Profile |
| address | Required | A PostalAddress with street, town, postcode and country |
| telephone | Recommended | Your main number, ideally with the country code, such as +44 1392 123456 |
| url | Recommended | The page for this business or location |
| geo | Recommended | Latitude and longitude of the location |
| openingHoursSpecification | Recommended | Days and opening and closing times |
| priceRange | Recommended | A short relative price indicator |
| menu and servesCuisine | Recommended for restaurants | Menu URL and cuisine type |
| department | Recommended where relevant | Separate departments within a location |
Choose the most specific type, then write the markup
LocalBusiness is a general type. Schema.org also defines more specific types that inherit from it, such as Dentist, Restaurant, HairSalon, AutoRepair, Plumber, Electrician, LegalService, AccountingService and many more. Use the most specific type that fits, the same way you would choose a specific Business Profile category. If nothing fits, LocalBusiness itself is fine.
Here is a simplified example for a fictional café, in JSON-LD, which is the format Google recommends. It goes inside a script tag of type application/ld+json in the page's HTML, usually on the home page or contact page for a single-location business.
{ "@context": "https://schema.org", "@type": "CafeOrCoffeeShop", "name": "Quayside Coffee", "url": "https://www.quaysidecoffee.co.uk/", "telephone": "+44 1392 000000", "address": { "@type": "PostalAddress", "streetAddress": "12 The Quay", "addressLocality": "Exeter", "postalCode": "EX2 4AN", "addressCountry": "GB" }, "geo": { "@type": "GeoCoordinates", "latitude": 50.71842, "longitude": -3.52878 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "08:00", "closes": "17:00" } ], "servesCuisine": "Coffee" }
The details are invented for illustration. Replace every value with your own, and make sure each one matches what is visible on the page and on your Business Profile.
Service-area businesses
Google's LocalBusiness documentation lists address as required, and it does not describe a special approach for service-area businesses. If you do not want your home address in your code, remember that structured data is public: anyone can read it in the page source. Only include address details you are happy to publish.
Many service-area businesses include the town and postcode district without a street address, matching what their website already shows. Schema.org also has an areaServed property to list the places you cover. Google does not list areaServed in its LocalBusiness documentation, so treat it as helpful description rather than something that changes how Google displays you.
Multiple locations
- Give each location its own page, and put that location's LocalBusiness markup on that page only.
- Use the same brand name in each, with that location's own address, phone, hours and geo coordinates.
- Set url to the location page, and link the location page from its Business Profile.
- For separate departments inside one location, such as a pharmacy inside a larger shop, Google recommends nesting them with department and including the store name in the department name.
- Describe the organisation as a whole, with your logo and social profiles, in separate Organization markup on the home page if you want to.
Where to add it, and keeping hours current
Most website platforms have a way to add structured data. Some generate LocalBusiness markup automatically from your settings; others use a plugin; on a custom-built site it can be added to the page template so it always matches the details shown in the footer. Whichever route you use, look at the page source afterwards to confirm the markup is actually there and only appears once.
Keep one source of truth. If your hours are typed separately into the footer, the contact page and the markup, one of them will eventually be wrong. The best set-up pulls all three from the same place, so a single change updates everything.
openingHoursSpecification can describe regular weekly hours and, with validFrom and validThrough dates, special hours such as Christmas closures. Keep it simple: mark up your normal hours accurately, and make sure your Business Profile carries the special hours, since that is what most customers see.
If your hours change seasonally, such as a café that closes earlier in winter, update the markup when the visible hours change. Out-of-date markup is worse than none, because it gives search engines a confident but wrong answer.
Rules that keep markup safe
Google's general structured data guidelines say markup must represent the main content of the page and must not describe content that is invisible to users. It must be accurate and up to date. Markup that is misleading can make a page ineligible for rich results, and in serious cases lead to a manual action.
- Only mark up information that is also visible on the page.
- Keep hours and phone numbers in the markup updated whenever they change.
- Do not add review markup for reviews about your own business.
- Do not mark up locations you do not operate from.
- Copying a generic example and forgetting to change some of the values, so the markup describes a different business.
- Marking up an address or hours that do not match the Business Profile.
- Adding the same markup to every page, including pages for other locations.
- Using review or aggregateRating markup for your own reviews, expecting stars.
- Leaving errors unfixed after a website update changes the template.
How to test it
- Google's Rich Results Test (search.google.com/test/rich-results) checks whether your markup is valid for Google's features and shows errors and warnings.
- The Schema Markup Validator (validator.schema.org) checks your markup against the full schema.org vocabulary.
- After publishing, use URL Inspection in Search Console to confirm Google can see the page and its structured data.
- Check the Enhancements section in Search Console over time for any new errors.
What schema will and will not do
LocalBusiness markup helps search engines understand your details reliably and consistently. It will not, on its own, lift you into the map pack; Google's local results are driven by your Business Profile, relevance, distance and prominence. Think of it as tidy paperwork: it removes ambiguity and supports everything else.
Every Nerdsharks website includes LocalBusiness structured data, set up to match your Business Profile and updated when your details change, so you do not have to touch the code yourself.