Skip to content
SEO

Shopify schema markup: what to fix first

Shopify's Online Store 2.0 themes already output basic Product JSON-LD. Here is what they leave out, and how to find and fix the gaps without a developer.

By Ibrahem HelalAI-assisted, reviewed by Jeremy Zava6 min read

Shopify's Online Store 2.0 themes already output basic Product JSON-LD — name, image, price — without you touching anything. What they skip is Organization markup, breadcrumbs on collections, and FAQPage or Review markup, and what they get wrong is usually an empty price or availability field on an edge-case variant.

That gap-filling is one piece of a larger Shopify SEO strategy: schema markup does nothing for a page Google cannot crawl or a store still fighting duplicate URLs, so treat it as one item on a longer list, not the whole plan.

On this page

What schema markup does a Shopify theme add by default?

Most stock and premium Online Store 2.0 themes render Product structured data automatically, built from the same product object your theme already has loaded [4]. That typically covers name, image, description, sku, brand and an offers block with price, priceCurrency and availability.

What it usually does not cover: AggregateRating and Review (unless you run a reviews app that injects its own JSON-LD), BreadcrumbList on collection and product pages, Organization markup anywhere on the site, and FAQPage on policy or support content. None of these are required for a product listing to be eligible for a rich result, but each one is a property Google can use if it is there and cannot use if it is not [2].

What a stock Online Store 2.0 theme typically ships vs. what is usually missing
Usually shipped by defaultUsually missing
Product name, image, SKUAggregateRating / Review
Offers: price, currency, availabilityBreadcrumbList on collections
Brand (when set on the product)Organization markup site-wide
Basic product descriptionFAQPage on support pages

Where does Shopify's JSON-LD actually live?

In the theme's Liquid, usually a snippet included from theme.liquid or the product template, rendering a <script type="application/ld+json"> block server-side. Because it is built from the same product object that renders the page, a field that is blank on the page — no price because no variant is selected, no image because the featured image was removed — is blank in the JSON-LD too.

That is why checking the rendered page beats reading the theme code: the Liquid can look correct and still output broken JSON on a specific product because of what is set on that product, not what the template says.

  1. View source on a live product page

    Search the page source for `application/ld+json` and copy the block out. This is what Google actually receives, not what you assume the theme does.

  2. Run it through a validator

    Paste the URL into Google's Rich Results Test or Schema.org's own validator. Both list every property found and flag anything required that is missing or empty.

  3. Check a product with no default variant and one that is sold out

    These are where price and availability fields go blank. If your catalog has bundles or made-to-order items, check one of those too.

  4. Repeat on a collection page and the homepage

    Collections often carry no structured data at all in a stock theme. Confirming that now avoids assuming markup that was never there.

How do you add Organization and BreadcrumbList markup?

By adding a small JSON-LD snippet to theme.liquid, once, sitewide, since both are properties of the business and the page hierarchy rather than of any one product. Organization markup names the business, its logo and its official social profiles; BreadcrumbList states the path from home to the current collection or product.

Neither needs an app. A developer can drop a static Organization block into the theme's layout file in under an hour, and a BreadcrumbList snippet that reads the current collection and product handles from Liquid variables is a similarly small job. Where this gets expensive is a fully custom or headless build, where nothing is rendered by a theme at all and the JSON-LD has to be assembled in application code instead.

Should you install a JSON-LD app instead?

Sometimes. An app earns its keep when you want FAQPage markup on pages your theme does not already generate, when a reviews app is not already outputting its own Review schema, or when the theme is a fully custom build where editing Liquid directly is impractical for your team.

Skip the app when the fix is genuinely small — most Organization and breadcrumb additions are a few lines, and paying a recurring app fee for something a developer can add once in an hour is a bad trade. Check what your reviews app already outputs before adding a second schema source: two plugins both writing Review markup on the same page is a duplicate-markup problem, not a fix.

Before installing anything, check for a schema app you already have running from an earlier fix nobody removed. It is common to find two structured-data apps active on the same store — one added by a past freelancer for FAQPage markup, one added later by a reviews app for AggregateRating — each unaware of the other, both writing JSON-LD to the same page. A validator run on the live page catches this in a minute; auditing the app list in the Shopify admin catches it in five.

Do you need GTINs and MPNs in your product schema?

Not required, but worth adding if you have them. Google's product structured data guidance treats a GTIN (the barcode number: UPC, EAN or ISBN) and an MPN (the manufacturer's own part number) as strong identifiers that help match your listing to the same product elsewhere, which matters for Shopping surfaces more than for a standard search result [1].

Shopify stores a barcode field on every variant, but the default theme JSON-LD does not always map it to the gtin property automatically — check what your theme actually renders before assuming it is covered. If you import products from a supplier feed, the barcode field is often already populated and the fix is a one-line addition to the JSON-LD snippet, mapping the existing field rather than collecting new data.

Where this genuinely matters is a catalog selling recognisable branded goods next to other retailers of the same product. A private-label or made-to-order catalog with no real barcodes gets little from forcing the field, and a blank or fabricated GTIN is worse than none — Google's own guidance is explicit that an incorrect identifier can hurt more than a missing one, so leave the field out rather than guess.

What is the most common schema error on Shopify stores?

An empty or zero offers.price. It happens on products with no variant selected by default, on sold-out items where the theme drops the price block instead of keeping it with an OutOfStock availability, and on bundles priced entirely through a third-party app the theme's JSON-LD never sees [1]. The markup validates as present, and it is still wrong.

The second most common error is stale data: a product whose JSON-LD price does not match the price shown on the page, usually because of a caching layer or a currency conversion app that changes the display price without touching the underlying Liquid variable. Both errors are invisible until you check a live product page, which is why "the theme handles it" is not the same claim as "the theme handles it correctly."

Does schema markup affect Shopify SEO rankings directly?

No. Structured data is not a ranking factor [2]. What it changes is eligibility for a richer listing — a star rating, a price, an availability badge — once the page has already earned a ranking on its own. Get the underlying page right first: fix duplicate content across product and tag URLs, get page speed under control, then write content that answers the query. Schema markup is what makes that listing look better once it is there, not what gets it there.

That ordering matters for where you spend an afternoon. A perfectly marked-up page that is slow, duplicated three ways, or thin on content will not outrank a competitor's page that loads fast and answers the question, no matter how complete its JSON-LD is.

Questions people also ask

  • Does my Shopify theme already add schema markup?

    Most Online Store 2.0 themes output basic Product JSON-LD with a name, image and price on their own. What they usually skip is Organization, BreadcrumbList on collections, Review markup and FAQPage on support content, and any of it can render with empty fields if a variant has no price set.

  • Do I need an app for Shopify structured data?

    No, not for the basics. A JSON-LD app is worth it if you want FAQPage or Review markup on pages your theme does not already cover, or if you are editing a hand-built theme where nobody wants to touch the Liquid. For a stock theme, the fixes are usually a few lines in theme.liquid.

  • Will schema markup make my products rank higher?

    No. Schema markup does not change ranking by itself. It changes whether Google is confident enough in your data to show a rich result — a price, a star rating, a stock status — next to a listing that already ranks.

  • How do I check whether my Shopify schema markup is valid?

    Paste a live product URL into Google's Rich Results Test or Schema.org's validator. Both will list every property they found and flag missing required fields, and both are free.

  • What is the most common Shopify JSON-LD error?

    A price of 0 or an empty offers.price on a product that is out of stock or has no default variant selected. It validates as present but reads as broken data, and it is the single most common reason a rich result disappears after looking fine in testing.

Sources

  1. Product structured data | Google Search Central — Google Search Central (checked 22 September 2026)
  2. Intro to how structured data markup works — Google Search Central (checked 22 September 2026)
  3. Product - Schema.org Type — Schema.org (checked 22 September 2026)
  4. product object | Shopify Liquid objects — Shopify Developer Documentation (checked 22 September 2026)

Get your Shopify schema markup audited, free

Book a free 30-minute consultation with Ibrahem and Jeremy. We look at your site while we talk, and you leave with a prioritised plan.

Who wrote this

Ibrahem HelalCo-founder

Leads strategy and delivery.

Works on: SEO, GEO

Reviewed before publishing by Jeremy Zava, Co-founder.

Posts by Ibrahem Helal

More on this