Structured Data

Shopify Product Structured Data: A Practical Schema Audit Guide

Your theme already outputs product schema, but probably not all of it. How to audit Shopify structured data, fix duplicates and add return policy markup.

Most Shopify stores already output product structured data, because modern themes include it. The problems are usually what's missing, what's duplicated by apps, and what no longer matches the page. This guide is for store owners, marketers and developers who want product schema that's accurate, eligible for Google's merchant listing features, and consistent with the data AI shopping tools read.

Key takeaways

  • Shopify's free themes, including Dawn and Horizon, output product JSON-LD with the Liquid structured_data filter. Products with variants are output as ProductGroup.
  • Google has two product experiences: merchant listings (pages where you sell) and product snippets (review or editorial pages). Store product pages should target merchant listings.
  • Google recommends defining return and shipping policies once at the organization level and referencing them, instead of repeating them on every product.
  • FAQ rich results stopped appearing in Google Search on May 7, 2026. Don't add FAQ markup expecting stars or dropdowns.
  • The most common issue I find is duplicate Product markup from the theme plus review and SEO apps.

Why structured data still matters

Structured data won't get you into AI Overviews by itself. Google says no special markup is needed for AI features. But it still does three useful jobs:

  1. It makes product pages eligible for rich results: price, availability, shipping, returns and review stars in search.
  2. Google uses it alongside your Merchant Center feed to understand and verify your products. Google says using both maximizes eligibility.
  3. It forces you to keep one consistent version of the truth about price, availability and policies, which is what every machine reader, including AI assistants, rewards.

Merchant listings vs product snippets

Merchant listingsProduct snippets
Use forPages where customers can buy from youPages where people can't buy directly (reviews, editorial)
Requiredname, image, offers with price and currencyname, plus a review, rating or offers
PriceMust be greater than zero; use Offer, not AggregateOfferMore flexible
ExtrasShipping, returns, apparel sizing, variants, member pricingPros and cons on editorial reviews

If your product page meets the merchant listing requirements, Google says it's also potentially eligible for product snippets.

What your Shopify theme outputs

Open your theme code and search for structured_data. In Shopify's own themes, you'll find something like this in the product section:

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

Shopify's documentation says the filter outputs a schema.org Product for products without variants and a ProductGroup for products with variants. It also supports article objects for blog posts.

The documented example output includes name, description, image, brand, category, url and an offers block with availability, price and priceCurrency. It doesn't include GTIN, aggregateRating, shippingDetails or hasMerchantReturnPolicy. Your real output may differ depending on the product, so test your own pages rather than assuming either way.

Older or heavily customized themes often have hand-written JSON-LD instead of the filter. Hand-written markup is fine if it's maintained, but it's a common source of stale data, such as a hardcoded currency or availability that never changes.

Google's merchant listing documentation lists these recommended properties. Here's how they map to Shopify data:

PropertyShopify sourceNotes
gtin / mpn / skuVariant barcode, SKU, or metafieldsUse real identifiers only; never make them up
brand.nameProduct vendorMake sure vendor is your brand, not a supplier code
aggregateRating, reviewYour reviews appThe rating must be visible on the page
color, size, materialVariant options or category metafieldsHelps variant understanding
availability, itemConditionInventory; usually "new"Keep availability live, not hardcoded
priceValidUntil, validFrom, validThroughSale datesGoogle added sale duration guidance in July 2026
shippingDetails, hasMerchantReturnPolicyYour policiesBetter defined at the organization level

Sale prices

Google's July 2026 update spells out how to mark up a sale. Mark the original price with priceType set to https://schema.org/StrikethroughPrice, don't put priceType on the active sale price, and use validFrom and validThrough (or priceValidUntil) with full ISO 8601 dates and time zones. Google warns your listing may not display if priceValidUntil is in the past, a common bug when a sale end date is hardcoded and forgotten.

Return and shipping policies at the organization level

Google recommends putting your store-wide return policy under Organization markup, and using offer-level hasMerchantReturnPolicy or shippingDetails only to override it. Since November 2025, Google also supports merchant-level shipping policy markup.

A minimal return policy example, usually placed once in your theme layout or homepage. Replace every value with your actual policy:

{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Store Name",
"url": "https://www.example.com",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}

The values must match your published refund policy and your Merchant Center settings exactly. If your policy says 14 days and your markup says 30, you've created a trust problem, not an SEO win.

Pro tip: You can also set return policies and shipping in Merchant Center. Keep the policy page, Merchant Center and your markup in sync, and check all three whenever the policy changes.

Reviews: what's allowed

On a product page, marking up genuine customer reviews of that product is allowed, but the reviews and rating must be visible on the page. Google's self-serving review restriction applies to LocalBusiness and Organization markup: you can't mark up reviews of your own business on your own site for stars. Remove any app setting that adds an aggregate rating to your homepage or Organization markup.

Step-by-step audit

This is the process I use on a Shopify store:

  1. Pick test URLs. A simple product, a product with many variants, a sold-out product, a product on sale, a collection page and a blog post.
  2. Run each through Google's Rich Results Test. Note which items are detected (Product, ProductGroup, Merchant listing, Review snippet, Breadcrumb, Organization) and any critical errors.
  3. Count the Product blocks. If you see two or three, find the sources. Typical offenders are review apps, SEO apps and old snippets left from uninstalled apps. Keep one complete version.
  4. Compare markup to the page. Price, currency, availability and ratings must match what a shopper sees. Check a sale product and a sold-out product specifically.
  5. Check variants. Each variant should have its own URL (Shopify's ?variant= URLs work) and correct price and availability.
  6. Check Search Console. Review the Merchant listings and Product snippets reports for errors and warnings across the whole site, not just your test URLs.
  7. Compare with Merchant Center. Mismatches between your feed and your page markup cause disapprovals. Fix the source in Shopify, not just the feed.
  8. Add organization-level policies if they're missing, then re-test.
  9. Remove dead markup. FAQ markup no longer produces rich results. Leaving correct markup is harmless, but don't spend time adding it.

Common mistakes

  • Hardcoded availability (InStock on every product, including sold-out items).
  • Wrong currency on multi-currency stores using Shopify Markets. Test with a non-default market.
  • GTINs filled with SKUs or placeholder numbers. Leave the field empty if you don't have a real identifier.
  • Review stars with no visible reviews, or ratings imported from another platform without the review content.
  • Markup left behind by an uninstalled app. Shopify warns that some apps add theme code that isn't removed automatically. See our app stack audit guide.

FAQ

Does Shopify add product schema automatically?

Shopify's free themes output product structured data through the structured_data Liquid filter. Third-party or older themes vary, so check your theme code and test your pages.

Do I need an SEO app for structured data?

Usually not for basic product markup. An app can help add missing properties or organization policies, but make sure it replaces your theme's markup rather than duplicating it.

Google says it's not required for AI Overviews or AI Mode. It still helps with rich results and keeps product data consistent, which helps any system that reads your pages. Our AI search optimization guide covers the rest.

Should I still add FAQ schema?

Not for Google rich results. Google stopped showing FAQ rich results in May 2026. A visible FAQ section can still help shoppers.

Next steps

Run the nine-step audit on six representative URLs this week. Fix duplicates and data mismatches first, then add organization-level return and shipping policies. If your theme is heavily customized or you run multiple markets, book a Shopify consultation.

Sources

Keep reading