What structured data is
Structured data is a small block of code that describes the facts on your page in a format machines can read without guessing. Instead of hoping Google figures out that "MonβFri 7β6" are your opening hours, you state it plainly: this is a bakery, this is the address, these are the hours.
The shared vocabulary for this is schema.org, which is supported by Google, Bing and others. The format Google recommends is JSON-LD: a <script type="application/ld+json"> tag with the data inside. It doesn't change how your page looks to visitors.
Why it helps
- Rich results: Google can show extras like product prices, availability or ratings next to your result. Those results tend to stand out, which can lift your click-through rate.
- Local information: For a local business, markup confirms your name, address, phone and opening hours. It supports what Google shows about you, alongside your Google Business Profile.
- Clear facts for other systems: Search engines, voice assistants and AI tools read the web too. Clean, consistent facts make it easier for them to get your details right.
Structured data makes your page eligible for rich results. It doesn't guarantee them, and it isn't a ranking boost on its own.
Which type to use for what
| Type | Use it for | Example |
|---|---|---|
| LocalBusiness | A business with a location or service area customers visit or call | Bakery, hair salon, plumber, cafΓ©, physiotherapist |
| Organization | Your company in general: name, logo, contact, social profiles | Online shop or agency homepage |
| FAQPage | A page with a list of questions and answers written by you | "Frequently asked questions" page |
| Article | Blog posts, news and guides | "5 tips for storing sourdough" |
| Product | A single product page with price and availability | Product page in an online shop |
| BreadcrumbList | The path from the homepage to the current page | Home βΊ Cakes βΊ Wedding cakes |
For LocalBusiness, pick the most specific subtype schema.org offers, such as Bakery, HairSalon, Plumber, CafeOrCoffeeShop or Physiotherapy. If nothing fits, LocalBusiness itself is fine. Use one main type per page and add BreadcrumbList on top where it makes sense.
What to fill in for each type
LocalBusiness
Name, full address, phone, opening hours and your website URL are the core. Add geo coordinates and priceRange (for example $$) if you like. Use the exact same name, address and phone as on your Google Business Profile.
Organization
Name, URL and logo, plus sameAs links to your official social profiles. This suits online shops and businesses without a public location.
Product
Name, image and description, plus an offer with price, currency and availability. Ratings are optional and only belong there if real customer reviews are shown on the same page.
Article
Headline, author, publish date and an image. Add an update date if you revise the post, and only if you really changed it.
BreadcrumbList
Each step of the path with its name and URL, in order from the homepage to the current page. It should match the breadcrumb links visitors see.
Example: JSON-LD for a bakery
This is what the generator produces for a LocalBusiness. Replace the example values with your own details:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Bakery",
"name": "Maple Street Bakery",
"url": "https://www.maplestreetbakery.example/",
"image": "https://www.maplestreetbakery.example/images/storefront.jpg",
"telephone": "+1-217-555-0142",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Maple Street",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.7990,
"longitude": -89.6440
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "14:00"
}
]
}
</script>
Opening hours use English day names and 24-hour times like 07:00 and 18:00. The phone number works best in international format. The geo coordinates can be copied from Google Maps: right-click your location and the coordinates appear at the top of the menu.
How to add it to your website
Paste the full <script> block into the HTML of the page it describes. It can go in the <head> or anywhere in the <body>; Google reads both.
- Your own HTML: paste it before the closing
</head>tag. - WordPress: SEO plugins such as Yoast SEO, Rank Math or All in One SEO add basic schema automatically. For custom markup, use a plugin that lets you insert code into the header, or your theme's custom code option.
- Wix: Wix has a structured data section in each page's SEO settings, and custom code can be added in the site settings.
- Squarespace: use Code Injection (site-wide header) or a Code Block on a single page. Availability depends on your plan.
- Shopify: most themes already output Product markup. Check it before adding your own, so you don't end up with duplicates.
Put LocalBusiness or Organization markup on the homepage or contact page, not on every single page.
How to test your markup
- Open the Rich Results Test and enter your page URL, or paste the code directly.
- Check which rich result types Google detects and fix any errors. Warnings are optional fields; fill them if you have the data.
- For types that don't have a Google rich result, use the Schema Markup Validator. It checks against the full schema.org vocabulary.
- After publishing, watch the Enhancements section in Google Search Console for errors over time.
Google's own structured data documentation lists the required and recommended fields for each rich result type.
Common mistakes
- Data that isn't on the page. Markup must describe what visitors can actually see. Don't add a price, rating or opening hours that the page itself doesn't show.
- Wrong opening hours format. Use
"opens": "09:00", not "9 am". Days need full English names. If you close for lunch, add two entries for the same day. - Outdated details. When your hours or phone number change, update the markup too. Conflicting data looks unreliable.
- Fake or self-written reviews. Never mark up reviews you made up. Also note Google's rule on self-serving reviews: star ratings for a LocalBusiness or Organization, published on that business's own site, don't get review stars in search.
- Copied example data. Check that no placeholder values, like a sample address, are left in.
Example: opening hours
"openingHours": "Mon to Fri 7am till 6pm"
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "07:00", "closes": "18:00"
Machines need a fixed format. Free text gets misread or ignored.
An honest note on FAQ rich results
In 2023 Google limited FAQ rich results, the expandable questions under a search result, to well-known, authoritative government and health websites. For a cafΓ© or plumber, those dropdowns will almost certainly not appear anymore.
FAQPage markup is still valid schema.org and can help other systems understand your questions and answers. Add it if you have a real FAQ section, but don't expect it to change how your result looks in Google. If you want AI tools to find your key pages, an llms.txt file is another small step you can take.
Before you start, a quick SEO check shows whether your page already has structured data and what else is missing.