First: what “rich results” means on a product page in 2026
Under a product result Google can show price, availability, review stars, shipping cost and return window. Google calls the whole set merchant listing when the page sells the product, and product snippet when it only describes it. The stars alone are a review snippet. All of them come from JSON-LD on the page; your theme outputs the basics, an app or theme code adds the rest.
Two things to stop waiting for: FAQ rich results, which Google stopped showing for all sites on 7 May 2026, and HowTo, gone since 2023 (Google’s update log). If that’s what’s “not showing”, nothing is wrong with your store.
Google hasn’t recrawled the page yet
The most common cause and the most boring. You added the markup yesterday; Google last fetched the page a month ago.
Search Console › URL inspection › paste the product URL. “Last crawl” tells you when Google saw the page. If it’s before your change, that’s the answer.
Click Request indexing for a handful of your most important products. Don’t do it for 500; the quota is small and Google recrawls on its own within days to weeks. Rich results then take another few days to appear after the crawl.
The markup is there but incomplete
Google needs specific fields before it shows anything. For price and availability: offers with price, priceCurrency and availability. For stars: aggregateRating with ratingValue and reviewCount. A Product block without an image or with an empty description is valid and still won’t earn a rich result.
Paste the product URL into the Rich Results Test. Green with “Merchant listings” or “Product snippets” means Google can read it. Warnings (yellow) are missing recommended fields; errors (red) block the result. Also open the Merchant listings and Product snippets reports in Search Console: both list every product page with errors and warnings, which beats testing one URL at a time.
Fill the missing fields. On Shopify that usually means a product with no image, no description, or a price of zero. Fix the product, not the markup.
Two Product blocks that disagree
Dawn and most current themes output Product JSON-LD through Shopify’s structured_data filter. Install a schema app or paste a snippet on top and the page has two Product blocks. Google doesn’t pick the better one; when they disagree on price or availability, it tends to show nothing.
View the page source (or the Rich Results Test’s code view) and search for "@type": "Product". Two hits is the problem.
Keep one. Either switch the app’s Product output off and let the theme do it (you lose stars and shipping fields), or remove the theme’s: in the theme editor’s product template, look for a structured data or SEO setting; if there’s none, comment out the script around {{ product | structured_data }} in the product section or snippets/structured-data.liquid.
{%- comment -%}
<script type="application/ld+json">
{{ product | structured_data }}
</script>
{%- endcomment -%}That last step means editing theme code, and no app we know of, ours included, can do it for you safely; every theme puts the line somewhere else.
Stars from a review app the schema doesn’t read
Review stars need aggregateRating in the Product block. Your theme’s structured_data doesn’t know your review app exists. Either the review app injects its own rating markup (Judge.me, Loox, Stamped, Yotpo and REVIEWS.io all can), or a schema app reads the rating from the review app and adds it. If neither is switched on, or the schema app doesn’t support your review app, there are no stars to show.
Rich Results Test › Product › look for aggregateRating. Missing means nobody is adding it.
Switch on rich snippets in your review app’s settings, or pick a schema app that lists your review app. Don’t switch on both: that’s cause 3 again, with two aggregateRatings.
You’re looking at the wrong page
Stars show on the product page. Not on the home page, not on collection pages, not on the blog post about the product. Google’s structured data guidelines say the markup has to describe the main content of that page, and Google doesn’t show self-serving review stars for an Organization or LocalBusiness at all. A store that marks up its own Google rating on the home page gets nothing, and risks a manual action.
Search for the exact product name, not the brand. The product result is the one that can carry stars.
None needed on the product page. Remove aggregateRating from Organization markup if an app or snippet added it.
Price or availability doesn’t match what Google sees
Google compares the markup with the page. A product whose first variant is sold out while the markup says InStock, a sale price in the markup and the regular price on the page, or a currency that changes by visitor location (Shopify Markets) all count as mismatches, and Google drops the result rather than show a wrong price.
The Merchant listings report in Search Console and its issue list; and look at the product in an incognito window from your main market.
Make the markup follow the variant Google indexes (the default one) and the market the page is served in. Shopify’s own structured_data handles the default variant; apps vary, and Markets with different currencies per domain is the hard case, ours included. It’s on our list.
The page is blocked or not indexed
No index, no rich result. Products set to noindex (by an SEO app, by a theme setting, or by Shopify’s password page), products in draft, or pages Google hasn’t indexed at all.
URL inspection › “URL is on Google” or not. If not, the reason is in the same panel.
Remove the noindex, publish the product, make sure it’s in a collection that’s linked from the navigation (Shopify’s sitemap has it; a link helps more).
Shipping and returns don’t show, but stars and price do
That’s not broken; it’s the newest part. The shipping-cost and return-window lines need shippingDetails and hasMerchantReturnPolicy inside the Offer (or a return policy on the Organization). The theme doesn’t output them. Some apps do, some don’t; check the app’s listing or documentation.
Rich Results Test › Merchant listings › look for shippingDetails and hasMerchantReturnPolicy.
An app that outputs them, or a snippet in the product template. Google also reads shipping and returns from Merchant Center if your store is connected; for a store with Shopping ads that’s the easier route.
Everything is right and Google still doesn’t show it
It happens. Google’s docs say rich results are not guaranteed, and in our experience a store with low traffic, few reviews or a brand-new domain can have perfect markup for months without stars. Google shows them when it trusts the page enough.
The Merchant listings report in Search Console: “Valid” count going up with no errors. That’s all you can do on your side.
More reviews, more links, more time. Not another app.
Checklist
- URL inspection: crawled since the change? If not, request indexing and wait a week.
- Rich Results Test: green, with Merchant listings or Product snippets?
- Page source: one
"@type": "Product", not two. aggregateRatingpresent, from one source only.- You searched for the product, and looked at a product page.
- Price and availability in the markup match the page in your main market.
- The page is indexed and not noindex.
- Shipping and returns missing? That’s the two Offer fields, not a bug.
- All green and still nothing: give it time, collect reviews.