Shopify Structured Data: Fix Your Product Schema for 2026 Rich Results
What your theme emits, where duplicate Product blocks hide, and how to fill the gaps.
Shopify structured data is the JSON-LD markup your store emits so Google and AI search engines can read your products as structured facts — name, price, availability, reviews — instead of guessing from raw HTML. Every modern Shopify theme already ships some of it through the Liquid {{ product | structured_data }} filter, but the default output is thin, and a surprising number of stores silently break it by stacking a second, conflicting Product block from a review or SEO app. This guide shows you exactly what Shopify emits, how to spot duplicates, and how to fill the gaps that decide whether you earn rich results.
The stakes rose in 2026: Google's merchant listing experiences lean heavily on per-page Product markup, and AI Overviews increasingly surface products whose structured data is complete and unambiguous. A single duplicated Product block can push Google to ignore both copies — so clean markup is no longer a nice-to-have. If you want the strategic picture first, our pillar on schema markup for AI search explains which types matter most; this article is the Shopify-specific how-to. (En español: datos estructurados en Shopify.)
What Shopify structured data actually outputs
Shopify ships a built-in Liquid filter, structured_data, that converts an object into schema.org JSON-LD. On a product template you drop it inside a script tag:
<script type="application/ld+json">
{{ product | structured_data }}
</script>
Per Shopify's own developer docs, the product object renders a schema.org Product when the product has no variants, or a ProductGroup when it has one or more. The output includes brand, name, image and the product URL, plus a nested Offer with availability, price, currency and a variant-specific URL. That is a solid skeleton — but it is only a skeleton.
The gaps in Shopify's default Product schema
Google splits product markup into two experiences: product snippets (pages you can't buy from directly) and merchant listings (pages where a shopper can purchase). For merchant listings, Google's documentation lists only three required Product properties plus two on the Offer — everything else is recommended, and that is precisely where Shopify's defaults leave money on the table.
| Property | Shopify default | Why it matters |
|---|---|---|
name, image, offers | Present (required) | Baseline eligibility — these must exist or you get nothing. |
offers.price, offers.priceCurrency | Present (required) | Merchant listings require a real Offer with a price greater than zero. |
sku / gtin / mpn | Often missing | Product identifiers help Google match your item to a known catalog entry. |
aggregateRating, review | Not emitted | Star ratings in results — recommended, and only valid with genuine reviews. |
hasMerchantReturnPolicy, shippingDetails | Not emitted | Return and shipping annotations in merchant listings. |
priceValidUntil, itemCondition | Usually missing | Reduces "price may be out of date" suppression and clarifies condition. |
One important nuance from Google: merchant listings require an Offer, not an AggregateOffer, because you must be the seller. And Product rich results, in Google's words, "only support pages that focus on a single product" — so collection and category pages should not emit Product markup at all. If your theme or an app injects Product JSON-LD on collection pages, strip it there.
Not sure which recommended properties your theme is actually missing? A $9.99 Clariola audit lists the schema types found on every product template, so you fix the real gaps instead of guessing.
The duplicate Product schema trap
This is the single most common Shopify schema failure. Your theme already emits one Product block. Then you install a reviews app — the classic example is the Shopify Product Reviews app, which injects its own Product block so it can attach aggregateRating. Now the same product page carries two Product entities, and Google Search Console starts reporting duplicate merchant-listing items. In the worst case Google can't tell which prices and ratings to trust and drops the rich result entirely.
Where to look for the second block:
layout/theme.liquid— app blocks or legacy snippets often inject here, near the opening body.sections/main-product.liquidor the oldersections/product-template.liquid.- App embed blocks in your theme's app-embed settings (toggled from the theme editor, not the code).
A word of caution: more than one <script type="application/ld+json"> on a page is not automatically wrong — an Organization block and a Product block can coexist happily. The problem is two Product blocks describing the same item. Confirm which one Google actually reads before you delete anything.
How to fix Shopify structured data step by step
- Duplicate your theme first. In Online Store → Themes, duplicate the live theme as a backup before touching any Liquid.
- View source and count the blocks. Open a live product page, view source, and search for
application/ld+json. Note every block and whether its@typeis Product, Organization, BreadcrumbList or something an app added. - Run the Rich Results Test. Paste the live URL into Google's test tool and see how many Product items it detects. More than one Product per page is your signal to consolidate.
- Keep one Product source. Decide whether the theme block or the review app's block is your canonical Product. Disable the duplicate — usually by turning off the app's schema option, or by removing the extra snippet include.
- Enrich the surviving block. Add the recommended properties your store can honestly support:
sku/gtin,priceValidUntil,itemCondition, andaggregateRatingonly if it reflects real reviews. - Add Organization markup in theme.liquid. Emit a single store-wide
Organizationblock and, per Google, nest your standard return policy asMerchantReturnPolicyunder it rather than on every Offer. - Validate and request recrawl. Re-test the URL, then open the duplicate error under Merchant listings in Search Console and click "Validate fix" so Google recrawls.
If your catalog spans variants and bundles, also review Google's product variant structured data guidance — Shopify's ProductGroup output is the right foundation, but the variant url and identifier fields still need to be correct.
Ecommerce schema moves fast. For the broader catalog-level changes (like the 2026 Product.category update) and for the policy fields that intersect with conversions, pair this with our guides on your ecommerce return policy and on LocalBusiness schema if you also run physical locations.
Shopify structured data FAQ
Does Shopify add structured data automatically? Partly. Modern themes emit a basic Product/ProductGroup block via the structured_data filter, but identifiers, ratings, shipping and return details are usually missing, and apps can add conflicting blocks.
Will two JSON-LD scripts hurt my SEO? Two different types (Organization + Product) are fine. Two Product blocks describing the same item are the problem — consolidate to one.
Do I need an app or can I edit Liquid? Either works. A no-code schema app is faster but can create duplicates; editing the theme gives full control but one misplaced bracket can break the product template, so always back up first.
When you need an audit
Consider a Clariola audit when: Search Console shows duplicate or invalid merchant-listing items you can't trace; your rich results disappeared after installing a reviews or SEO app; or you simply can't tell which of several JSON-LD blocks Google is reading. Clariola crawls your store's raw HTML the way a non-JavaScript crawler does, lists the schema types found on each page, flags any schema type Google has retired (with the date it was deprecated), and reviews your SEO, content structure, competitors and AI-search visibility — then delivers a prioritized PDF action plan by email for a one-time USD 9.99. It is not a speed lab test or a backlink audit; it's the schema-and-structure X-ray most Shopify stores never get.
If duplicate Product markup might be quietly costing you rich results, run a $9.99 Clariola audit and get the exact list of schema types per page, with what to fix first.
Keep reading
- technical seo7 min read
Google's July 2026 Product.category update: fix your merchant listing schema
Google added Product.category and tightened sale-duration rules on July 7, 2026. Here is the exact JSON-LD, Shopify and WooCommerce fixes, and a 6-point readiness checklist so expired priceValidUntil values stop killing your rich results.
- SEO8 min read
WordPress Schema Plugin in 2026: Yoast vs Rank Math (and How to Stop Duplicate Markup)
If you installed both Yoast and Rank Math, Google is probably seeing two Organizations, two WebSites and two Articles on every page. Here's how to pick one, disable the other cleanly and ship a single valid JSON-LD graph.
- mobile design6 min read
Google Lens SEO: How to Get Your Images Found by Camera Search
Search Console now reports traffic from Google Lens, Circle to Search and image uploads. Here's how Google Lens SEO works and the 7 steps that make your product photos findable by camera search.
