Shopify Product Schema: Help Google Show Prices and Reviews

What structured data your Shopify theme already outputs, how to test it in Google’s tools, and how to fill the gaps without creating duplicate markup.
Laptop showing the Google search page beside a coffee mug, illustrating Shopify product schema

Shopify product schema is the structured data that tells Google, in a format it can read without guessing, what a product page sells: the name, price, currency, stock status, brand and, if you collect them, ratings. Done well, it makes your products eligible for richer search results with prices, availability and review stars. This guide covers what your theme probably outputs already, how to check it in Google’s own tools, the gaps I find most often, and how to fix them without duplicate markup.

What product structured data does, and what it does not

Structured data is a block of code, usually JSON-LD, that describes the page in the schema.org vocabulary. Shoppers never see it, but Google reads it.

Google documents two kinds of product results. Merchant listings are for pages where people can buy from you, which means every product page on your store. Product snippets are for pages about products that people cannot buy directly, such as review articles. Google says a product page with the required merchant listing properties can also be eligible for product snippets, so a store mainly needs to get merchant listings right.

Two limits matter. First, valid markup makes a page eligible, nothing more. Google states that it does not guarantee rich results, even when the markup passes its own test. Second, the markup has to match what shoppers can see. A price, rating or stock status in the code that is not on the page breaks Google’s guidelines, and a structured data manual action removes the page’s eligibility for rich results.

What your Shopify theme already outputs

Most current Shopify themes generate product markup for you. Shopify’s Liquid language has a structured_data filter that turns a product into JSON-LD: a Product when it has no variants, and a ProductGroup when it has variants. Shopify’s free Dawn and Horizon themes both call it in their product sections.

When I checked Dawn’s output at the time of writing (October 2026), a product with variants included:

  • the product name, description and URL, with the brand taken from the Vendor field;
  • each variant as its own item with a name, image, SKU, price, currency and stock status;
  • a GTIN only where the variant has a barcode.

It did not include ratings, reviews, shipping details or a return policy. Ratings come from your review app, if it adds markup at all. Other themes vary, and older ones sometimes still carry hand-written markup that no longer matches the page. If your store runs on a theme that old, it is usually missing more than schema, and a redesign may be the better investment.

How to check your Shopify product schema

  1. Rich Results Test. Paste a product URL into Google’s Rich Results Test. It lists the product features it detects, with errors and warnings. Errors make an item ineligible. Warnings point to missing recommended properties, and a product without reviews may show a warning about ratings, which is expected.
  2. Schema Markup Validator. The validator at validator.schema.org shows every schema.org item on the page, including ones Google does not use for rich results. It is the quickest way to spot two or three separate product items on one page.
  3. Search Console. The Merchant listings report covers product pages across your whole catalog. The separate Product snippets report is for other product-related pages, such as reviews. After a fix, inspect a live URL, then use the report’s validation button so Google rechecks the affected pages.
  4. Test more than your best seller. Check a product with variants, a sold-out product and a product on sale. That is where markup and page tend to drift apart.

Common gaps and how to fill them

Missing GTIN, brand or SKU

Google recommends including all applicable global identifiers, such as GTINs, along with the brand. If you resell branded products, add the manufacturer’s GTIN (the UPC or EAN from the packaging) to each variant. Since September 2026, a variant can hold several typed barcodes, and Shopify uses the first one wherever a single barcode is expected, so put the GTIN first and keep internal codes further down the list. Make sure the Vendor field holds the brand rather than a supplier’s name, and keep SKUs free of spaces, because Google asks for SKUs without whitespace. If you make your own products and have no GTINs, never invent one.

Prices and stock that drift from the page

The price, currency and availability in the markup must match what a shopper sees. Watch for apps that change prices in the browser with scripts, such as some discount and currency apps: the markup can still carry the original price. If you show sale prices, Google supports marking the original price as a strikethrough price next to the active one.

Shipping and return details

Merchant listings can show shipping costs and return windows, but Dawn’s default output does not include them. Google’s current advice is to describe your shipping and return policies once, in Organization markup, rather than on every product, and to use product-level markup only for exceptions. If you use Google Merchant Center, you can set shipping and returns there instead, and Google also accepts account-level policies set in Search Console. Settings in Merchant Center or Search Console take priority over markup, so pick one place to maintain and keep the others consistent.

Reviews and ratings that break the rules

Your review app is usually what adds the stars, and Google’s review snippet guidelines set the rules:

  • the rating must be about that specific product, not a collection or a list of products;
  • shoppers must be able to see the reviews and the rating on the page;
  • no ratings aggregated from other websites, which matters if your app imports reviews from marketplaces;
  • no fake reviews, and no reviews given in exchange for a discount or free product unless that is clearly disclosed.

Duplicate markup from apps

This is a common problem on stores that have been through a few apps. The theme outputs one product item, a review app adds a second carrying the rating, and an SEO app adds a third. The rating can end up in a block that is not connected to the product’s offer. Google can read several items on one page, but its guidelines say related items should be nested or linked with a shared @id. Otherwise, it may not know they belong together. The goal is one complete product item per page:

  • Pick one source of product markup: the theme or a single app, not both.
  • If your review app can feed its rating into the theme’s product markup, or switch off its own separate block, use that setting.
  • Remove leftover hand-written JSON-LD from old theme edits.
  • Recheck after every app install, because some apps add markup without asking.

How to fix it safely

  1. Duplicate your live theme and make every change on the copy.
  2. Fix the product data first: barcodes, vendors, SKUs and prices. Clean data fixes more than clever code.
  3. Change the markup in one place, either the theme’s product section or the app’s settings.
  4. Test the copy by pasting a preview page’s source code into the Rich Results Test, which accepts code as well as URLs.
  5. Publish, retest a few live product URLs, then validate the fix in Search Console and watch the Merchant listings report for the next few weeks.

Theme edits like these are routine in my Shopify development work, and the same checks apply to WooCommerce stores, where plugins can stack markup the same way (see my WooCommerce development service).

Quick checklist

  • Rich Results Test run on a simple product, a product with variants, a sold-out product and a sale item.
  • One product item per page in the Schema Markup Validator.
  • The first barcode on each variant is a real GTIN, or there is none.
  • Vendor field holds the brand name.
  • Shipping and return policies maintained in one place: Organization markup, Merchant Center or Search Console.
  • Review markup only for real, visible reviews of that product.

Related reading: Shopify Conversion Tracking: GA4, Google Ads and Meta Pixel Done Right and Shopify Product Page Optimization: What Makes People Buy.

FAQ

Does Shopify add product schema automatically?

Most current themes do, often through the structured_data filter. Test a product page to see exactly what yours outputs, because themes differ.

Will fixing my schema get me review stars?

It makes you eligible, nothing more. Google decides when to show stars and prices, and it can show them for some searches and not others.

Do I need an SEO app for structured data?

Usually not. Clean product data and one well-configured review app cover most stores. An app is worth it only if it fills a specific gap, and only if you switch off whatever it duplicates.

What if my products have no GTIN?

That is normal for handmade and own-brand goods. Leave the GTIN out rather than inventing one, and make sure the brand and SKU are right.

Not sure what Google sees on your product pages? Request a free website review and I will test a few of them and tell you what to fix first.

Share this article

Shehzad Akram

About the author

Shehzad Akram

Senior WordPress and Shopify developer in Lahore, Pakistan, Top Rated on Upwork with 100% Job Success. I write these notes from real client work: what broke, what fixed it, and what I check every time.

Keep reading

More notes from real client work