Structured data and rich results
Structured data states the facts about your business in a format machines read without guessing: what you are, where you are, when you open, and what you charge.
What it is
Structured data is a block of machine-readable markup, usually JSON-LD in a script tag, that describes the page using the shared vocabulary at schema.org.
It doesn't change what a visitor sees. It exists so that search engines and assistants don't have to infer your opening hours from a sentence in a paragraph.
Why it matters
It's what makes rich results possible: star ratings, opening hours, prices and frequently asked questions shown directly in search results.
It has become considerably more important with AI answer engines, which prefer explicit machine-readable facts over prose they have to interpret.
Choosing the right type
schema.org defines dozens of types under LocalBusiness, from Dentist and Electrician to Restaurant and AutoRepair. Use the most specific one that genuinely fits, because it tells search engines more than the general type does. If none fits exactly, LocalBusiness itself is fine, and a more specific type can be added later.
A small set of properties carries most of the value: the business name, address, phone number, opening hours, the website address, and the geographic coordinates. Links to official profiles elsewhere, given in sameAs, help search engines connect the website with the business's listings. A price range and the area served are useful where they apply. None of it needs to be elaborate; it needs to be accurate.
What it can and can't do now
Structured data makes a page eligible for rich results; it doesn't guarantee them. Google decides case by case, and has narrowed some features over time. FAQ rich results, for example, are now shown only for a small set of well-known government and health sites, so FAQ markup on a business site rarely changes how its result looks. The markup is still read and understood, and other search engines and assistants use it too.
Test every change with Google's Rich Results Test, which shows what Google can use, and with the schema.org validator, which checks the markup against the full vocabulary. Then make keeping it accurate part of routine updates. When the hours, phone number or address change, the structured data should change in the same edit, or the page will contradict itself.
Adding it without a developer
Most website platforms can produce basic structured data without anyone writing code. WordPress SEO plugins generate LocalBusiness or Organization markup from a settings screen, and hosted builders such as Squarespace and Wix add some business details automatically when they are filled in. Check what your platform already outputs before adding anything, using the Rich Results Test on the live page.
Where the platform falls short, a single block of JSON-LD can be pasted into the header or footer code area that almost every platform provides. Keep it to one block that describes the business, on every page or at least on the home and contact pages. It doesn't have to be perfect on day one; it has to be correct.
The most common problem after installation is duplication. A theme, an SEO plugin and a reviews widget can each add their own business markup, with slightly different names or hours. Search engines then have to choose between conflicting statements. Turn off all but one source, so the page makes one clear claim about the business rather than three competing ones.
Treat the markup as part of the page rather than as a technical extra. Whenever the visible details change, such as new opening hours over the holidays, a new phone number or a move to new premises, the structured data needs the same change on the same day. Search engines compare the two, and markup that disagrees with the page can be ignored entirely.
How to fix it
- Add a LocalBusiness block, or the more specific type that fits, such as Plumber, Dentist or HairSalon.
- Include name, address, phone, opening hours, service area and the URL, and keep them identical to what appears on the page.
- Add FAQPage markup where you have genuine questions and answers.
- Validate with Google's Rich Results Test before and after publishing.
- Re-run the Rich Results Test after any change to the theme or plugins, since either can add or remove markup without warning.
What good looks like
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Watson Plumbing",
"telephone": "+61 3 5300 0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Sturt Street",
"addressLocality": "Ballarat",
"addressRegion": "VIC",
"postalCode": "3350",
"addressCountry": "AU"
},
"openingHours": "Mo-Fr 07:00-17:00"
}
</script>
Common mistakes
- Marking up information that doesn't appear on the page, which breaches Google's guidelines.
- Inventing review ratings. Fabricated review markup risks a manual penalty.
- Leaving the details to drift out of date after a move or a phone number change.
- Letting two or more plugins output their own business markup, so the page makes conflicting claims about the same business.
Check your own site. ppclift checks this automatically on every page it audits. Run a free audit and see every check on one page, with no account required.
Doing this for a client? This is one of 15 checks. ppclift is SEO lead generation software that audits every local business in a suburb at once, so you can find SEO clients who already need this work. Free plan, no card.