SEO ยท 3 min read ยท 2026-09-03

Product schema on Shopify: what search engines actually read

Most Shopify themes emit product structured data, and most of it is subtly wrong. What the markup needs to contain, the errors that suppress rich results, and why answer engines raise the stakes.

Shopindev Team

Nearly every Shopify theme emits Product structured data out of the box. That is not the same as emitting correct structured data, and the difference decides whether a product is eligible for rich results โ€” price, availability and review stars in the search listing โ€” or quietly ineligible.

The failures are rarely dramatic. A theme rarely omits schema entirely. It emits schema that contradicts the page, or that describes a state the product is not in, and the listing stays plain.

What Product schema has to contain

At minimum: a name, an image, a description, and an offer. The offer carries price, currency and availability, and this is where most of the problems live.

Price has to match the page. On a variant-based product the theme has to decide which variant's price to publish, and cheap implementations publish the first variant while the page displays a "from" price for the cheapest. A visitor sees one number and the search engine reads another.

Availability has to reflect reality. Themes that hardcode InStock keep telling search engines a sold-out product is available. That is the kind of mismatch that gets a whole site's product markup distrusted, not just the one product.

Currency has to be explicit and correct per market. A store selling in three currencies through Shopify Markets that publishes one hardcoded currency is publishing a wrong price to two of its markets.

The errors that actually suppress rich results

Duplicate Product blocks. Themes emit one, an SEO app emits another, a review app emits a third. When three blocks describe the same product with different prices, the search engine picks โ€” and it does not have to pick yours.

Review markup for reviews that are not on the page. This is the one with real consequences. Aggregate rating markup has to correspond to reviews visible to the visitor. Publishing a rating that no reader can see is a policy violation, not an optimisation, and it is the most common reason a store loses rich results across the whole catalogue at once.

Schema that describes a different URL. Filtered and paginated collection URLs that emit the unfiltered page's markup, or variant URLs that emit the parent product's, teach the search engine that your markup cannot be trusted to describe the page it is on.

Why this matters more than it used to

Rich results were the original reason to care. Answer engines are the new one, and they read differently.

A search engine crawls a page and decides how to display it. An answer engine reads a page and decides whether to quote it. Structured data is the most machine-legible thing on a product page โ€” it is the part that says, unambiguously, what this thing is, what it costs and whether it is available. When a model is assembling an answer about a product category, clean structured data is the difference between being a source and being skipped.

This raises the cost of contradictions. A human visitor never notices that the JSON-LD says ยฃ40 while the page says ยฃ35. A model reading the page has to reconcile the two, and the safe resolution is to use a different source.

How to check yours

View the rendered page source and count the Product blocks. One is correct. More than one is a problem to fix before anything else.

Compare each field against what the page displays: price, currency, availability, name. Then check a variant URL, a sold-out product, and โ€” if you sell internationally โ€” the same product in a second market. Those three cases catch most theme-level defects, because they are the cases the theme author did not test.

Google's Rich Results Test will tell you whether markup is valid. It will not tell you whether it is true, and untrue valid markup is the more expensive failure.

Chat on WhatsApp โ†’