New: The $100M AI Visibility Roadmap, built from 7,960 live pages and 197 A/B tests. Get it free →

Home / Blog / JSON-LD SEO: How to Use Structured Data in 2026

Technical SEO · 11 min read

JSON-LD SEO: How to Use Structured Data in 2026

JSON-LD is the structured data format Google recommends. It makes pages eligible for rich results and clarifies what a page is about, but it does not raise rankings on its own. Here is how to use it well on an…

Robert Battle · Updated

Key takeaways
  • JSON-LD is a script block that describes a page with schema.org vocabulary, and Google says it recommends JSON-LD when your setup allows it.
  • Structured data makes a page eligible for rich results, but Google states it does not guarantee they will show, and markup must match what users can see.
  • For a store, the core set is Product with Offer on product pages, BreadcrumbList on products and collections, and Organization plus WebSite on the homepage.
  • Google removed the FAQ rich result in 2026 and retired seven other features in 2025, so audit old markup against the current search gallery.
  • An Ahrefs study of 1,885 pages that added JSON-LD found no meaningful rise in AI citations, so treat schema as accuracy work, not an AI visibility shortcut.

JSON-LD is a block of code, placed in a <script type="application/ld+json"> tag, that tells search engines exactly what a page represents: a product with a price, an organization with a logo, a breadcrumb trail. For SEO, its job is to make your pages eligible for rich results such as product prices, ratings and breadcrumbs, and to remove guesswork about your content. It does not raise rankings by itself.

This guide is for e-commerce and Shopify teams who want structured data that is correct, current and worth the effort. You will get what Google supports in 2026, which JSON-LD types a store actually needs, copyable examples, how Shopify handles it, a testing routine and a fix list for the errors we see most often in audits.

What is JSON-LD in SEO?

JSON-LD stands for JavaScript Object Notation for Linked Data. It is a W3C standard for writing linked data as JSON, and on the web it is almost always used with the schema.org vocabulary, a shared set of types (Product, Organization, BreadcrumbList) and properties (name, price, logo) maintained by the major search engines.

Three keys do most of the work:

  • @context says which vocabulary you are using, normally https://schema.org.
  • @type says what the thing is, for example Product.
  • @id gives the thing a stable identifier so other blocks can point to it, for example linking a WebSite to the Organization that publishes it.

Everything else is a property of that type. Because the block sits in its own script tag, shoppers never see it, and you can add, change or remove it without touching your layout. That separation is the main reason developers and search engines prefer it to older inline formats.

If you want the broader picture first, including how schema relates to ChatGPT and AI search, read our guide to schema markup. This post focuses on the format and the implementation.

Why Google recommends JSON-LD over Microdata

Google Search supports three structured data formats: JSON-LD, Microdata and RDFa. Its introduction to structured data labels JSON-LD as recommended and says Google generally recommends it "if your site's setup allows it." The same page notes that all three formats are equally fine for Google when the markup is valid, so you do not need to rip out working Microdata in a panic. You should, however, write anything new in JSON-LD.

FormatWhere it livesStrengthWeakness
JSON-LDA separate script blockEasy to generate from data, edit and debug; Google can read it when injected with JavaScriptEasy to let drift out of sync with visible content
MicrodataAttributes on visible HTML elementsStays tied to the content it describesTangled with templates, easy to break during redesigns
RDFaAttributes on HTML elementsWidely used for Open Graph style metadataVerbose and rarely used for Google rich results

The open web is moving the same way. The HTTP Archive Web Almanac 2024 found JSON-LD on 41% of pages, up from 34% in 2022. RDFa scores higher only because Open Graph meta tags, the ones that control link previews on social platforms, are counted as RDFa.

Share of web pages using each structured data format2024 crawl; pages can use more than one format; RDFa includes Open Graph meta tags
RDFa66%
Open Graph64%
JSON-LD41%
Microdata26%
View the data
Value
RDFa66%
Open Graph64%
JSON-LD41%
Microdata26%

Source: HTTP Archive, Web Almanac 2024, Structured Data chapter

What JSON-LD does and does not do for SEO

Most disappointment with structured data comes from expecting the wrong thing. Here is what Google's own documentation supports.

What it does

  • Makes pages eligible for rich results. Product prices, availability, ratings, breadcrumbs, videos and more depend on structured data. Google's search gallery lists 25 features as of its October 2026 update.
  • Removes ambiguity. A price in a script block is unambiguous in a way that a price in a styled span is not. Google uses schema.org markup and the og:image tag when choosing preview images, according to a March 2026 documentation update.
  • Feeds Search Console reports. Valid markup unlocks rich result reports, such as Merchant listings and Breadcrumbs, that show errors across the whole site.

What it does not do

  • It does not guarantee display. Google's general structured data guidelines say plainly that Google does not guarantee structured data will show up, even when the Rich Results Test passes.
  • It is not a ranking factor in the usual sense. None of Google's structured data pages promise a ranking boost. The value is a richer listing and a clearer page, which can lift clicks.
  • It is not an AI search shortcut. Google's guidance on AI features and your website says no special schema is needed to appear in AI Overviews or AI Mode. In May 2026, Ahrefs tracked 1,885 pages that added JSON-LD against matched control pages for 30 days before and after. Citations in AI Mode and ChatGPT moved by amounts statistically indistinguishable from zero, and AI Overview citations fell slightly.

What changed in 2025 and 2026

Google has been pruning features. On June 12, 2025, it marked seven types as deprecated: book actions, course info, estimated salary, ClaimReview, learning video, special announcement and vehicle listing. In a changelog entry dated May 8, 2026, Google deprecated the FAQ rich result, which stopped appearing in Google Search on May 7, 2026; the FAQ documentation was removed on June 15, 2026. HowTo rich results were removed back in September 2023. Breadcrumbs now appear only in desktop results (January 2025). Meanwhile, merchant features grew: return policies, loyalty programs, merchant-level shipping policies (November 2025) and sale-price date properties (July 2026).

The practical lesson: markup that was best practice three years ago may now do nothing in Google. FAQPage markup is still valid schema.org and harmless, but if you added it only to win FAQ snippets, that reason is gone. Our post on FAQ schema not showing in Google covers what to do with it.

Get a technical SEO plan for your store

We benchmark your store against your top three competitors on Google and AI answers, flag the structured data and technical fixes that matter, and show the revenue math.

Get my technical SEO plan →

JSON-LD types every e-commerce site needs

You do not need dozens of types. A store needs a small set, implemented completely and kept accurate. This table maps each type to the page it belongs on and what Google requires.

TypePageGoogle featureRequired by Google
Product with OfferProduct pages you sell fromMerchant listings (price, availability, shipping, returns)Product: name, image, offers. Offer: price above zero and priceCurrency
Product (snippet)Review or comparison pages that do not sellProduct snippets (ratings, price range)name, plus one of review, aggregateRating or offers
ProductGroupProducts with variantsVariant-aware merchant listingsVariants linked with isVariantOf and inProductGroupWithID
BreadcrumbListProducts, collections, articlesBreadcrumb trail (desktop)itemListElement with ListItem position and name
OrganizationHomepage or About pageLogo and brand details, store-wide shipping and return policiesNo single required property; name, url and logo recommended
Article or BlogPostingBlog postsArticle enhancementsNo required properties; headline, image, datePublished, author recommended

Two points from Google's merchant listing documentation trip up many stores. First, Google recommends defining shipping and return policies once in Organization markup, and using offer-level shippingDetails and hasMerchantReturnPolicy only as overrides for specific products. Second, product rich results are for pages about one product or its variants, not for collection pages listing many products. Do not put Product markup for every item on a collection page.

Here is what the rest of the web actually uses. The Web Almanac's most common JSON-LD types skew toward site-level markup; Product appears on under 1% of mobile pages, which is one reason well-marked-up stores still stand out.

Most common JSON-LD types on mobile pagesShare of mobile pages using each schema.org type in JSON-LD, 2024 crawl
WebSite12.7%
Organization7.2%
BreadcrumbList5.7%
LocalBusiness4%
ItemList2.4%
WebPage1.5%
BlogPosting1.4%
Product0.8%
View the data
Value
WebSite12.7%
Organization7.2%
BreadcrumbList5.7%
LocalBusiness4%
ItemList2.4%
WebPage1.5%
BlogPosting1.4%
Product0.8%

Source: HTTP Archive, Web Almanac 2024, Structured Data chapter

For deeper dives by type, see our guides to Product schema on Shopify and Organization schema markup.

JSON-LD examples you can copy

These examples use placeholder values. Replace every value with real data from the page, and never mark up a rating, price or review the shopper cannot see.

Product with Offer and rating

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Merino Wool Runner",
  "image": ["https://www.example.com/images/merino-runner.jpg"],
  "description": "Lightweight merino wool running shoe.",
  "sku": "MWR-001",
  "gtin13": "0123456789012",
  "brand": { "@type": "Brand", "name": "Example Co" },
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/products/merino-runner",
    "price": "98.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "212"
  }
}
</script>

Notes: availability and itemCondition take schema.org URLs, not free text. Use the most specific GTIN you have, in numeric form; Google does not accept GTINs written as URLs. Only include aggregateRating if the rating and count are shown on the page and come from real customers.

Organization and WebSite linked with @id

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://www.example.com/#organization",
      "name": "Example Co",
      "url": "https://www.example.com/",
      "logo": "https://www.example.com/logo.png",
      "sameAs": ["https://www.instagram.com/exampleco"]
    },
    {
      "@type": "WebSite",
      "@id": "https://www.example.com/#website",
      "url": "https://www.example.com/",
      "name": "Example Co",
      "publisher": { "@id": "https://www.example.com/#organization" }
    }
  ]
}
</script>

The @graph array holds several connected items in one block, and @id lets the WebSite point to its publisher without repeating the Organization. Google's guidelines suggest @id for exactly this kind of linking. Put this block on the homepage.

BreadcrumbList

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Shoes", "item": "https://www.example.com/collections/shoes" },
    { "@type": "ListItem", "position": 2, "name": "Running", "item": "https://www.example.com/collections/running-shoes" }
  ]
}

Wrap it in the same script tag as above. The trail should match the breadcrumb a shopper sees on the page, in the same order.

How to add JSON-LD on Shopify

On Shopify, most structured data comes from your theme, and the rest often comes from apps. That is convenient and also the source of most problems, because two sources frequently output overlapping markup.

The structured_data filter

Shopify's Liquid language includes a structured_data filter that converts a product or article into schema.org markup. A product without variants becomes a Product; a product with variants becomes a ProductGroup; an article becomes an Article. Shopify's documented usage is:

<script type="application/ld+json">
  {{ product | structured_data }}
</script>

The filter is the easiest way to keep markup in sync with your catalog, since prices and availability come straight from product data. It does not cover everything, so you may still want Organization, WebSite and BreadcrumbList blocks in your theme layout and collection templates.

A safe workflow for Shopify stores

  1. Inventory what you already output. Open a product page, view the source and search for application/ld+json. Note every block and where it comes from (theme section, snippet or app).
  2. Pick one source per type. If your theme and a reviews or SEO app both output Product, disable one. Two Product blocks with different prices or ratings send conflicting signals.
  3. Add what is missing. Typically Organization and WebSite on the homepage, BreadcrumbList on products and collections, and shipping and return policies in Organization.
  4. Edit a duplicate theme first. Make changes in a copy, preview it and run the tests in the next section before publishing.
  5. Pair markup with your Merchant Center feed. Merchant listings can use both, and Shopify's Google and YouTube channel manages the feed. Keep prices and availability consistent across the two.
Go beyond schema with the AI Visibility Roadmap

Schema alone will not get you cited. Our free roadmap, built from 7,960 live pages and 197 A/B tests, covers getting cited by ChatGPT, Google AI Overviews and Perplexity.

Get the free roadmap →

How to test and monitor JSON-LD

Valid markup on launch day can break the next time a developer edits a template. Build testing into your routine.

ToolWhat it checksWhen to use it
Rich Results TestWhether a page or code snippet is eligible for Google rich results, with errors and warningsBefore publishing any template change
Schema Markup ValidatorValid schema.org syntax for any type, including ones Google does not useFor types outside Google's gallery
URL Inspection in Search ConsoleWhether Google found structured data on the indexed version of a pageAfter deploy, on a few key URLs
Rich result reports in Search ConsoleValid and invalid items across the whole site, such as Merchant listings and BreadcrumbsWeekly or monthly
Performance report in Search ConsoleClicks and impressions, filterable by search appearanceTo compare results before and after a change

Google's introduction recommends this sequence: validate during development with the Rich Results Test, confirm with URL Inspection after deploy, then watch the rich result reports for breakage caused by templating or serving issues.

Common JSON-LD mistakes and how to fix them

These are the problems that most often stop structured data from working. Each one is covered by Google's guidelines.

SymptomLikely causeFix
Rich Results Test shows two Product itemsTheme and an app both output ProductKeep one source and disable the other
Price in search differs from the pageHard-coded or cached markup after a price changeGenerate offers from live product data, for example with the structured_data filter
Ratings never showSelf-serving reviews on Organization or LocalBusiness, or reviews not visible on the pageMark up only real, visible customer reviews on product pages
Invalid item: missing fieldRequired property absent, such as image or priceCurrencyAdd the required property; items missing one are ineligible
Markup is valid but nothing showsFeature retired (FAQ, HowTo) or Google chose a plain resultCheck the current search gallery and stop chasing retired features
Manual action for structured dataMarkup describes hidden, misleading or irrelevant contentRemove the offending markup and request review in Search Console

A manual action for structured data removes rich result eligibility, but Google says it does not change how the page ranks in web search. Also remember that pages blocked by robots.txt or noindex cannot earn rich results at all, and image URLs in your markup must be crawlable.

Where to start this week

If you only have an afternoon, do this in order: run your homepage, one collection and your best-selling product through the Schema Markup Validator, remove duplicate Product blocks, make sure every product page has a Product with an Offer that matches the visible price, then add Organization and BreadcrumbList where they are missing. Check the Merchant listings report in Search Console two weeks later.

Structured data is one part of a sound technical foundation, alongside crawlability, indexing and page speed. Our technical SEO audit checklist covers the rest, and our technical SEO team can audit it for you. If you want a second pair of eyes on your markup and how your store compares with competitors, get in touch.

Book a free 30-minute plan call

Bring your store. We will compare it with your top three competitors, show which pages are ready to move and prioritize the fixes, including structured data.

Get my custom plan →
FAQ

Questions & answers

Is JSON-LD a ranking factor?
Not directly. Google's documentation presents structured data as a way to become eligible for rich results and to help Google understand the page, not as a ranking boost. Richer listings can earn more clicks.
Where should JSON-LD go, the head or the body?
Either works. Google reads JSON-LD in the head or the body, and it can also read JSON-LD injected with JavaScript. Put it on the page it describes.
Can I use JSON-LD and Microdata on the same page?
Yes, Google supports both. The risk is describing the same product twice with different values, so pick one source per type and remove duplicates.
Does Shopify add JSON-LD automatically?
Many themes output Product markup, often through Shopify's structured_data Liquid filter, but coverage varies. View the page source and search for application/ld+json to see what your theme and apps output.
Does JSON-LD help with ChatGPT or AI Overviews?
Google says no special schema is needed for AI features, and a May 2026 Ahrefs study found adding JSON-LD did not meaningfully change AI citations. Accurate markup still helps search engines read your product data.
Free custom plan

Find the revenue you're leaving on the table

A free 30-minute call where we build the first version of your plan with you. You leave with a plan either way.

  • Your score across Google, AI citations, branded demand, and reviews
  • The pages on your site that are ready to move right now
  • Your first Flagship page and the first three tests we'd run

Step 1 of 3

Get your free custom plan

Free. Takes about 30 seconds.