Google Structured Data: What It Is, How Google Uses It, and How to Add It
Last Updated: February 25, 2026 · 16 min read
When Google crawls your website, it reads two things: the content your visitors see, and any structured data you've added underneath. Structured data is a standardised way of labelling your content so Google knows exactly what it's looking at — is this a product? A recipe? A business location? An event? Without structured data, Google has to guess. With it, you get rich results in search that stand out from every plain blue link.
This guide covers what Google structured data actually is, why Google built support for it, the three formats it accepts, how to write and deploy it, and how to confirm it's being picked up correctly.
What is structured data, actually?
Your web page has content (the text, images, and video your visitors see) and markup (the HTML code that structures it). Structured data sits alongside that markup as a block of code that describes your content using a shared vocabulary — Schema.org.
Think of it like a label on a product in a warehouse. Without a label, a box just looks like a box. With a label that says "contains 12 glass jars, fragile, refrigerate below 5°C", warehouse staff know exactly what to do with it. Structured data gives Google the same clarity about your content.
Schema.org is the vocabulary — a shared list of types (Article, Product, Recipe, Event, LocalBusiness, etc.) and properties (name, price, datePublished, author, etc.) that Google, Bing, Yahoo, and other search engines all agreed to use. When you add structured data using this vocabulary, every search engine that supports it can understand your content the same way.
What does Google do with structured data?
Google uses structured data for two main purposes. The first is rich results — enhanced search result formats that show more information directly in the search page. The second is entity understanding — building a more accurate picture of what your website, your business, and your content actually represents.
Rich results
A standard search result shows a title, a URL, and a short description. A rich result can show much more — star ratings and a price for a product, a photo and cook time for a recipe, expandable question and answer dropdowns for an FAQ, or a thumbnail and duration for a video.
These enhancements only appear when you have the right structured data on a page. Without it, you are never eligible regardless of how good your content is. With it, Google can decide to show the enhanced format — and pages that get rich results typically see 20–50% more clicks than plain results in the same position.
| Schema type | Rich result it unlocks |
|---|---|
| Product + Offer | Price, availability, star rating in search |
| Recipe | Recipe card with image, cook time, and rating |
| FAQPage | Expandable Q&A dropdowns below the result |
| Event | Event listing with date, time, and location |
| LocalBusiness | Knowledge Panel and Maps listing details |
| VideoObject | Video thumbnail with duration in search |
| JobPosting | Google Jobs listing with salary and location |
| HowTo | Numbered step previews on mobile |
| BreadcrumbList | Clean URL path instead of raw URL |
| Article / NewsArticle | Top Stories carousel eligibility |
Entity understanding
Beyond rich results, Google uses structured data to build its understanding of who you are. When you add Organization schema with your company name, logo, founded date, and links to your social profiles, you're giving Google the raw material to add your brand to its Knowledge Graph — a giant database of real-world entities.
Once Google recognises your brand as a Knowledge Graph entity, your business gets a Knowledge Panel in search results, Google associates your content with your brand more reliably, and you become more trustworthy in Google's eyes — which affects rankings but cannot be bought or faked.
The three structured data formats Google accepts
Google supports three ways to write structured data: JSON-LD, Microdata, and RDFa. All three communicate the same information but in different ways.
JSON-LD
JSON-LD is a separate block of JSON code placed inside a <script type="application/ld+json"> tag. It lives completely separately from your HTML content. You can add it to the head or anywhere in the body. Google officially recommends JSON-LD because it is easy to read, easy to update, and impossible to accidentally break by editing your page design.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Make Sourdough Bread",
"datePublished": "2026-02-25T09:00:00Z",
"author": { "@type": "Person", "name": "Jane Smith" }
}
</script>Microdata
Microdata embeds structured data directly into your HTML using itemscope, itemtype, and itemprop attributes. It works but it makes your HTML messy and is much harder to maintain. If a designer edits the template and removes an element, you silently lose structured data.
<div itemscope itemtype="https://schema.org/Article"> <h1 itemprop="headline">How to Make Sourdough Bread</h1> <span itemprop="datePublished" content="2026-02-25">Feb 25</span> </div>
RDFa
RDFa is similar to Microdata but uses different attribute names (typeof, property). It is mainly used in academic, government, and content management systems that built RDFa support into their templates. Unless you are already using a system with RDFa built in, do not start here.
Which format should you use?
JSON-LD. Every time. Google says it is the preferred format, it is the easiest to write and debug, and it works identically across all frameworks — plain HTML, WordPress, React, Next.js, Shopify, everything.
How to write your first piece of structured data
Every JSON-LD block has the same basic structure. There are three parts you always need:
- @contextAlways
"https://schema.org". This tells Google which vocabulary you are using. Never change this value. - @typeThe type of thing you are describing.
Article,Product,Recipe,LocalBusiness,Event, etc. Pick the most specific type that fits your content. - propertiesThe specific facts that describe the thing — its name, date, price, author, image, etc. Each type has a defined set of properties. Some are required for rich results, others are recommended.
Here is a complete Article example you can copy and customise:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article Title Here",
"datePublished": "2026-02-25T09:00:00Z",
"dateModified": "2026-02-25T09:00:00Z",
"author": {
"@type": "Person",
"name": "Your Name",
"url": "https://yoursite.com/about"
},
"publisher": {
"@type": "Organization",
"name": "Your Site Name",
"logo": {
"@type": "ImageObject",
"url": "https://yoursite.com/logo.png"
}
},
"image": "https://yoursite.com/article-image.jpg",
"description": "A 1–2 sentence summary of what this article covers.",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://yoursite.com/your-article-url"
}
}
</script>Where to place the structured data on your page
The <script> tag can go anywhere in your page — inside <head> or anywhere in <body>. Google finds it regardless of where it appears in the HTML.
The one firm rule: the structured data must appear in the initial HTML response from the server. If it is injected by JavaScript after the page loads, Google may not process it. This is why frameworks like Next.js that render pages server-side are excellent for structured data — the JSON-LD is in the HTML before any JavaScript runs.
Common mistake: client-side injection
If you add structured data inside a useEffect() hook in React, or via document.createElement in plain JavaScript, it will appear in the DOM but not in the raw HTML. Google sees the raw HTML first. Your schema will either be missed entirely or delayed by days while Google re-crawls with JavaScript rendering. Always render structured data server-side.
Adding structured data on different platforms
Plain HTML
Paste the <script> block directly into the <head> section of the page. For pages that share a template, add it to the template file so every page gets the sitewide schema (Organization, WebSite), then add page-specific schema to individual page files.
WordPress
Install a schema plugin such as Yoast SEO, RankMath, or Schema Pro. These generate structured data automatically from your post content and settings. For custom types not covered by plugins, use the "Header and Footer Scripts" plugin to inject JSON-LD into specific pages, or add it to your theme's functions.php using wp_head hooks.
Shopify
Edit theme Liquid template files (product.liquid, article.liquid) to output JSON-LD using Liquid variables. Shopify renders these server-side, so Google sees the structured data immediately.
Next.js (App Router)
Use dangerouslySetInnerHTML in Server Components. Since Server Components render on the server, the JSON-LD appears in the initial HTML. Put sitewide schema in layout.tsx and page-specific schema in each page.tsx.
Required vs recommended properties
Every schema type has two categories of properties. Required properties are the minimum Google needs to consider your markup valid for rich results. Missing a required property means no rich result, full stop. Recommended properties add detail that makes the rich result richer — more fields visible in search, more eligibility.
For example, a Product schema requires name and a valid offers block with a price. But to show star ratings you also need aggregateRating. To show shipping information you need shippingDetails. Each additional property you add improves how the result looks — the baseline gets you in the door, the extras make you stand out.
How Google validates structured data
Google processes structured data at crawl time and again when it renders your page with JavaScript. It then runs the parsed structured data through a validation process:
- 1Syntax check: Is the JSON valid? A single missing comma or unclosed brace will cause the entire block to be ignored.
- 2Vocabulary check: Is the @type recognised? Are the property names valid for that type on schema.org?
- 3Required fields check: Are all required properties present and non-empty?
- 4Policy check: Does the content follow Google's rich results policies? Misleading data, spammy reviews, and promotional content in structured data fields gets rejected.
- 5Representativeness check: Does the structured data actually match the visible page content? Structured data that describes something the page doesn't show is a policy violation.
How to check your structured data is working
Step 1 — View page source
Right-click your page → View Page Source → search for application/ld+json. If you can see your JSON block in the raw HTML, it is server-rendered correctly. If it is missing from source but visible in DevTools, it is client-injected — a problem.
Step 2 — Run it through a validator
Paste the JSON-LD into SchemaValidator.org. This gives you a detailed report of every error (blocking rich results) and warning (missing recommended properties). Fix all errors before deploying.
Step 3 — Google Rich Results Test
Go to search.google.com/test/rich-results. Enter your page URL (after deploying). You will see which structured data types Google detected and which rich results your page is eligible for.
Step 4 — Google Search Console Enhancements
After a week or two, check GSC → Enhancements. You will see all the schema types Google has processed across your site, with counts for valid items, warnings, and errors. This is your ongoing monitoring dashboard.
Common structured data mistakes to avoid
✗ Describing content that isn't on the page
If your structured data says a product costs £29 but the page shows £49, Google calls this a mismatch. This can result in a manual action that removes your rich results entirely.
✗ Adding AggregateRating with made-up numbers
Do not add star ratings unless they come from real reviews on your own site. Fake ratings are a policy violation and will get your rich results suppressed.
✗ Using the wrong @type
Marking every page as an Article regardless of content, or marking a blog post as a Product, confuses Google. Use the most accurate type for each page.
✗ Forgetting to update schema when page content changes
If you change a product price but forget to update the offers.price in your schema, you have a mismatch. Whenever content changes, review the schema too.
✗ One big schema block for the whole site
Structured data should describe the specific page it is on. A single schema block in your footer covering every product or article is not how it works. Each page needs its own page-specific schema.
Validate Your Structured Data
Paste your JSON-LD or enter a URL. Get an instant report covering every error, warning, and rich result your page is eligible for.
Check Structured Data Now →