Local search and Google Business Profile
Local business schema markup, done properly
A short block of code that tells search engines exactly who you are and where you work. Easy to write, easy to get subtly wrong, and quick to test.
Schema markup is structured data: a block of code on your web page that states facts about the page in a vocabulary search engines agree on. The vocabulary lives at schema.org. For a local business, the relevant type is LocalBusiness, or one of its more specific subtypes. Google recommends writing it as JSON-LD, which is a script block in the page that visitors never see.
It does not rank you by itself, and nothing in Google's documentation says it does. What it does is remove ambiguity. Your name, address, phone, hours and the area you serve are stated in one machine-readable place, in the same form as your Google Business Profile, instead of being inferred from your footer.
Which type to use
Use the most specific type that is true. Schema.org has subtypes of LocalBusiness for many trades, for example Plumber, Electrician, HVACBusiness, RoofingContractor, AutoRepair, Dentist, AccountingService and LegalService. If one fits, use it rather than plain LocalBusiness.
Which properties matter
Google's local business documentation lists two required properties, name and address, and a set of recommended ones. The ones that matter for most service businesses:
| Property | What to put in it | Watch out for |
|---|---|---|
| name | Your real trading name | Same as your sign and your Google profile. No keywords |
| address | A PostalAddress with street, city, region, postal code and country | Must match your profile exactly, in the same format |
| telephone | Your main local number, with country code | The same number your listings carry |
| url | The canonical URL of your site | https, and the same www or non-www version you use everywhere |
| openingHoursSpecification | Days and opening and closing times | Update it when hours change. Stale hours here contradict the profile |
| geo | Latitude and longitude of the actual premises | Google asks for at least five decimal places of precision. Only use real coordinates |
| areaServed | The cities or counties you work in | Use for service-area businesses. Only list places you actually serve |
| sameAs | Links to your official profiles elsewhere | Only profiles the business actually controls |
| image, logo | A real photo and your logo | Must be crawlable URLs on a site you control |
A minimal example for a service-area business
Here is the shape of a small JSON-LD block for a fictional plumber that works across part of Central Florida. Replace every value with your own. It goes inside a script tag with type="application/ld+json" in the page head or body.
Notice what is not in it. There is no geo block, because a business that hides its address on Google and works from home has no premises to point at. There are no review stars. There is no list of fifty towns.
areaServed for a service-area business
If customers come to you, your address does most of the work. If you go to them, areaServed is how you say where. Schema.org accepts a place, an administrative area, a geographic shape or plain text. Naming cities and counties as places is the clearest option for most businesses.
Keep it honest and consistent with your Google profile's service area. Google says a profile's service area should not extend farther than about two hours of driving from your base. Listing every city in the state in your markup does not make you local in any of them.
There is a real tension for a home-based business: the address property is required for Google's local business rich result, but you may not want your home address public. Do not invent an address to fill the field. If your street address should stay private, talk through the options with whoever builds your site. Leaving out a property you cannot fill honestly is better than filling it with something false.
The mistakes that cause problems
- Marking up your own reviews to get stars. Google says star review rich results are not shown for LocalBusiness or Organization markup where the business controls the reviews about itself. Its guidelines also say not to aggregate reviews or ratings from other websites, so copying your Google rating into your markup is out too.
- Inventing coordinates. A geo block pointing at the middle of a city you want to rank in, rather than at your premises, is false data. Google's general structured data policies say markup must be a true representation of the page content and must not be misleading.
- Marking up things the page does not show. Google says not to mark up content that is not visible to readers of the page. If your hours are in the markup, they should be on the page too.
- Details that disagree with the profile. A different phone number, an old suite number or a different name spelling in the markup is exactly the inconsistency you were trying to remove.
- Copying a plugin default and never looking at it. Many site builders add schema automatically, sometimes with the wrong type or with placeholder values. View the page source and read what is actually there.
- Two conflicting blocks on the same page, one from a plugin and one added by hand. Pick one.
How to test it
Use two tools, because they answer different questions.
- Google's Rich Results Test (search.google.com/test/rich-results) shows whether Google can read your markup and whether it is eligible for any Google rich result. Google recommends fixing any critical errors it reports and addressing the warnings where you can. Test the live URL after publishing, not only a code snippet.
- The Schema Markup Validator (validator.schema.org) checks your markup against the full schema.org vocabulary, including properties Google does not use for rich results. It is the better tool for catching a misspelled property or a wrong type.
- After it is live, Google Search Console's URL Inspection tool confirms Google can actually fetch the page and is not blocked by robots.txt or a noindex tag.
Google also notes that markup can pass the Rich Results Test and still not produce a rich result. Passing the test means the code is readable, not that anything will change in the results.
What to do next
Open your homepage in the Rich Results Test and the Schema Markup Validator and see what is already there. If nothing is, write a small block like the example, with your real details, and check it against your Google profile line by line. If something is there, read it and remove anything false. It is an hour of careful work you can do yourself. Corsa Media House also builds and maintains this markup as part of its sites for Central Florida businesses.
Questions
What is local business schema markup?
It is structured data, usually written as a JSON-LD script block, that states your business name, address, phone, hours and service area using the schema.org vocabulary. It helps search engines read those facts directly instead of inferring them from the page.
Should I use ProfessionalService or LocalBusiness?
Use the most specific LocalBusiness subtype that fits, such as Plumber, Electrician or AccountingService. Schema.org notes the general ProfessionalService type for local businesses was deprecated because it was confused with Service. If no subtype fits, use plain LocalBusiness.
Can I add my Google review stars to my schema markup?
No. Google does not show star review rich results for LocalBusiness or Organization markup where the business controls the reviews about itself, and its guidelines say not to aggregate ratings from other websites.
How do I test local business schema?
Run the live page through Google's Rich Results Test to see what Google can read and whether it is eligible for rich results, and through the Schema Markup Validator to check it against the full schema.org vocabulary. Then use Search Console's URL Inspection tool to confirm Google can fetch the page.
