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 typeRich result it unlocks
Product + OfferPrice, availability, star rating in search
RecipeRecipe card with image, cook time, and rating
FAQPageExpandable Q&A dropdowns below the result
EventEvent listing with date, time, and location
LocalBusinessKnowledge Panel and Maps listing details
VideoObjectVideo thumbnail with duration in search
JobPostingGoogle Jobs listing with salary and location
HowToNumbered step previews on mobile
BreadcrumbListClean URL path instead of raw URL
Article / NewsArticleTop 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.

Recommended

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>
Legacy

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>
Specialist

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:

  1. 1
    Syntax check: Is the JSON valid? A single missing comma or unclosed brace will cause the entire block to be ignored.
  2. 2
    Vocabulary check: Is the @type recognised? Are the property names valid for that type on schema.org?
  3. 3
    Required fields check: Are all required properties present and non-empty?
  4. 4
    Policy check: Does the content follow Google's rich results policies? Misleading data, spammy reviews, and promotional content in structured data fields gets rejected.
  5. 5
    Representativeness 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 →