Search engines are good at reading text, but they still have to guess what things are. Is “Apple” a fruit or a company? Is “£49” a price, and for which product? Is that date when an event starts or when an article was published?
Structured data removes the guesswork. It is code that labels the content on a page using a shared vocabulary – schema.org – so search engines and AI systems can understand it precisely.
What structured data does for you
- Eligibility for rich results – enhanced listings such as product prices and ratings, breadcrumbs, event dates, recipe details and video thumbnails
- Better understanding – helping search engines connect your organisation, products, authors and content as entities
- Clearer signals for AI systems that read pages to build answers
Structured data is not a direct ranking factor. But rich results stand out on the results page and often earn more clicks, and clear entity information helps machines represent your business accurately.
JSON-LD: the recommended format
There are three formats – JSON-LD, Microdata and RDFa. Google recommends JSON-LD, a block of script that sits in the page without being tangled into your HTML:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Acme Coffee Roasters",
"url": "https://acmecoffee.example",
"logo": "https://acmecoffee.example/logo.png",
"sameAs": [
"https://www.instagram.com/acmecoffee",
"https://www.linkedin.com/company/acmecoffee"
]
}
</script>
@contextsays which vocabulary is used (schema.org)@typesays what the thing is- The other properties describe it
Create JSON-LD structured data for articles, FAQs, products, businesses, events and more.
The schema types most sites need
Organization (or LocalBusiness) – on the homepage
Describes who you are: name, URL, logo, social profiles and contact details. Local businesses should use LocalBusiness (or a more specific subtype such as Restaurant or Dentist) with address, phone number and opening hours.
WebSite – on the homepage
Declares your site name, which Google can use for the site name shown in results.
BreadcrumbList – on most pages
Describes the page’s position in your site hierarchy. Google often shows breadcrumbs instead of the raw URL in results.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Guides", "item": "https://example.com/guides/" },
{ "@type": "ListItem", "position": 3, "name": "Composting at home" }
]
}
Article / BlogPosting – on articles
Headline, author, publish and update dates, and image. Author and date information also supports trust signals.
Product – on product pages
Name, image, description, brand, and an Offer with price, currency and availability. Adding genuine review ratings can make products eligible for review stars. Merchant listing features also draw on shipping and return policy information.
Other useful types
- Event – name, dates, location and tickets
- Recipe – ingredients, cooking time, ratings
- VideoObject – title, thumbnail, upload date and duration
- JobPosting – for job listings in Google’s jobs experience
- FAQPage – questions and answers
A note on FAQ and HowTo: since 2023, Google shows FAQ rich results mainly for well-known, authoritative government and health websites, and it has stopped showing HowTo rich results. The markup is still valid and can help machines understand Q&A content, but most sites should not expect those rich results.
Rules to follow
- Mark up only what is visible on the page. Describing content users cannot see goes against Google’s guidelines.
- Be accurate. Prices, availability and ratings must match the page.
- No fake reviews. Self-serving review markup – a business marking up reviews of itself on its own site – is not eligible for review stars in Google.
- Use the most specific type that fits (Restaurant rather than just LocalBusiness).
- Include required and recommended properties for the rich result you are targeting.
Breaking these rules can lead to a manual action that removes rich results from your site.
How to add structured data
- WordPress: SEO plugins (Yoast, Rank Math, All in One SEO) add Organization, Website, Article and Breadcrumb markup automatically; WooCommerce adds Product markup
- Shopify: most themes include Product markup; apps can extend it
- Custom sites: add JSON-LD to your page templates, generated from the same data that fills the page
- Google Tag Manager can inject JSON-LD, but server-rendered markup is more reliable
How to test your markup
- Validate the syntax – a single missing comma makes the whole block invalid
- Check for missing recommended properties
- Use Google’s Rich Results Test to confirm eligibility for specific rich results
- Monitor Search Console’s enhancement reports for errors across the site
Extract and check JSON-LD and microdata schema on a page, or paste code to test.
Combining several types with @graph
Pages often need several types. You can either use multiple script blocks or combine them in one @graph and link them with @id references – for example, an Article whose publisher is the Organization defined on the same page. Both approaches are valid.
A complete example for a local business
Here is homepage markup for a fictional café that combines several types in one @graph:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "CafeOrCoffeeShop",
"@id": "https://beanandleaf.example/#business",
"name": "Bean & Leaf Café",
"url": "https://beanandleaf.example/",
"image": "https://beanandleaf.example/images/cafe-front.jpg",
"telephone": "+44 113 496 0000",
"priceRange": "££",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Market Street",
"addressLocality": "Leeds",
"postalCode": "LS1 6DT",
"addressCountry": "GB"
},
"openingHours": ["Mo-Fr 07:30-17:00", "Sa 09:00-16:00"],
"sameAs": ["https://www.instagram.com/beanandleaf"]
},
{
"@type": "WebSite",
"@id": "https://beanandleaf.example/#website",
"name": "Bean & Leaf Café",
"url": "https://beanandleaf.example/",
"publisher": { "@id": "https://beanandleaf.example/#business" }
}
]
}
The @id values let the WebSite refer to the business without repeating its details. Every fact in the markup – address, phone, hours – must match what visitors see on the page and on your Google Business Profile.
Structured data for products in detail
Product pages are where structured data most often produces visible results. A solid Product block includes:
name,image(several images if possible) anddescriptionbrand,skuand, where available, a global identifier such asgtinofferswithprice,priceCurrency,availabilityand the producturlaggregateRatingandreview– only for genuine reviews from customers, shown on the page- Shipping details and return policy information, which feed Google’s merchant listing features
Keep prices in sync. If the markup says £49 and the page says £59, Google may ignore the markup or flag it in Search Console.
Structured data and AI systems
Search engines and AI systems increasingly think in terms of entities – people, organisations, products, places – and the relationships between them. Structured data is one of the clearest ways to state those facts: who published this article, which organisation sells this product, where this business is located. Consistent entity information across your site, structured data, social profiles and business listings makes it easier for any machine to describe your business correctly.
Maintaining structured data over time
Markup breaks quietly when templates change. Build a few habits:
- Generate JSON-LD from the same data that renders the page, so they cannot drift apart
- Validate markup after any template or theme update
- Check Search Console’s enhancement reports monthly for new errors or warnings
- Review schema.org and Google’s documentation once a year for new properties and deprecated features
Key takeaways
- Structured data labels your content with the schema.org vocabulary so machines understand it precisely.
- Use JSON-LD, Google’s recommended format.
- Most sites need Organization or LocalBusiness, WebSite, BreadcrumbList and Article or Product markup.
- Mark up only information that is visible on the page, and keep it accurate.
- Valid markup makes pages eligible for rich results but does not guarantee them.
- Validate markup after template changes and watch Search Console’s enhancement reports.
Frequently asked questions
Does schema markup improve rankings?
Not directly. It helps search engines understand your content and can earn rich results, which often increase click-through rate.
Why is my valid schema not producing rich results?
Valid markup makes a page eligible but does not guarantee rich results. Google also considers content quality, policy compliance and whether a rich result suits the query.
Can I use more than one schema type on a page?
Yes. A product page might use Product, BreadcrumbList and Organization together.
Should I use Microdata or JSON-LD?
JSON-LD. It is Google’s recommended format and the easiest to maintain.
Check your own site
Run a free audit with 55+ checks and get a fix for every issue.