Shopify Rich Results: Why Yours Are Missing
Shopify rich results — the star rating, the price, the “In stock” line that appear under some listings in Google — are not a setting you switch on. Google builds them when a page carries structured data that is valid, complete for the specific result it wants to show, and consistent with what the page visibly says. Even then it decides case by case. On Shopify the markup almost always exists already; it is the complete and consistent part that fails.
That distinction matters, because it changes what you go and fix. Below: what each element of a product rich result is actually made of, the four things that usually break it on a Shopify store, and how to see what Google sees rather than what your theme claims to output.
What a Shopify rich result is made of
A rich result is assembled from named properties. Each visible element traces back to a specific field in the structured data on the page — so when an element is missing, there is a precise field to go and look at rather than a vague “SEO problem”.

| What you see in Google | Property that produces it | Where it comes from on Shopify |
|---|---|---|
| Star rating | aggregateRating.ratingValue |
Your review app, not the theme |
| Number of reviews | aggregateRating.reviewCount or ratingCount |
Your review app |
| Price | offers.price + offers.priceCurrency |
Theme’s product JSON-LD |
| In stock / Out of stock | offers.availability |
Theme’s product JSON-LD |
| Breadcrumb trail above the title | BreadcrumbList |
Theme, if the collection template emits it |
Google splits these into two experiences with different bars. A product snippet needs only name plus at least one of review, aggregateRating or offers. A merchant listing — the richer treatment with price, availability and shipping — additionally requires image and an offers block with a price greater than zero, and is only eligible on pages where a shopper can actually buy the product. A collection page will never qualify, however good its markup.
Shopify already emits product schema — and that is the problem
Dawn and most Online Store 2.0 themes output Product JSON-LD on every product page as standard. So does almost every review app, because it needs to inject aggregateRating to get you stars. Neither knows about the other.
The result on a great many stores is two Product blocks on one URL that disagree — different prices because one was rendered before a currency conversion, different availability because one reads the variant and one reads the product, or a rating attached to a product node that has no offer on it. Google’s guidance is to describe one product once per page. When it finds two descriptions that conflict, which one wins is not something you control, and “neither” is a common outcome.

The fix is consolidation, not addition: one Product node per product page, emitted once, carrying every property — identity, offer and rating together. That is theme-level work rather than an app setting, and it is the single highest-value change on most stores we look at.
Why review stars are the piece that usually fails
Stars are the element merchants most want and least often get, and there are three separate rules behind them.
The rating needs a count
aggregateRating requires ratingValue and at least one of ratingCount or reviewCount. A rating value on its own is incomplete and will not produce stars. Products with genuinely zero reviews should emit no aggregateRating at all — an empty or zero-valued one is an error, not a neutral placeholder, and on a large catalogue it can put every product page into the invalid bucket at once.
The reviews have to be visible on the page
Google is explicit that marked-up review content must be readily available to users from the page, and that it must be immediately obvious the page has review content. This is where JavaScript-injected review widgets quietly fail: the markup asserts 240 reviews, the widget renders below the fold after a delay, or fails on a slow connection, and the crawled version of the page contains a claim it cannot support. If the count in your markup and the count a visitor can see are not the same number, fix the page before touching the schema.
Self-serving reviews are a real restriction — but not the one most people think
The rule is that when the entity being reviewed controls the reviews about itself, its pages using LocalBusiness or any other Organization type are ineligible for the star feature. That is about reviews of your business marked up on your own site — a testimonials page will not earn stars.
It does not apply to customer reviews of a product on that product’s page. Those remain eligible, which is exactly why collecting product reviews properly is worth doing. Our Judge.me integration guide covers the setup we use most often, and the wider comparison of Shopify review apps covers the alternatives and where each one puts its markup.
How to see what Google actually sees
Almost every wasted afternoon on this comes from checking the wrong artefact — reading the theme file, or viewing source, when the thing that matters is the rendered page as Googlebot receives it.
- Rich Results Test — renders the live URL the way Google does, runs the JavaScript, and reports which experiences the page qualifies for. This is the one that tells you whether an app’s injected markup survives. Test a product with reviews and one without; they often behave differently.
- URL Inspection in Search Console — use View crawled page to read the HTML Google actually holds, and the enhancement reports to see errors at catalogue scale rather than one URL at a time. A single template bug shows up here as thousands of identical errors, which is how you tell a template problem from a data problem.
- The visible snippet — the title and description are still the two elements that appear on every listing, rich result or not. Our free SERP snippet preview tool shows how yours truncate before you commit to them.
One caveat worth internalising: passing validation means you are eligible. Google states that these enhancements are shown at its discretion and may change over time. Valid markup is a prerequisite, never a guarantee.
The order to fix things in
- Count your Product blocks. Run the Rich Results Test on three product pages. More than one Product node per page is the first thing to resolve.
- Complete the offer.
price,priceCurrencyandavailability, read from the selected variant, matching the price on screen — including when a currency selector changes it. - Attach the rating to the same node. Not a second product described separately.
- Make the reviews visible. Render them server-side where you can, and never claim a count the page does not show.
- Suppress empty ratings. No reviews should mean no
aggregateRatingproperty. - Add the merchant-listing extras.
brand,skuorgtin,itemCondition,shippingDetailsandhasMerchantReturnPolicyare recommended rather than required, but they are what separates a bare snippet from the full treatment.
Steps 1 to 3 are where nearly all the movement is, and all three live in the theme. If you would rather have someone check the current state first, a free Shopify audit includes exactly this — what your product pages currently emit and where the conflicts are. Fixing it properly is custom development work on the theme rather than another app install, which is usually the cheaper answer anyway.
Frequently asked questions
Will rich results increase my traffic?
They change the shape of your listing, not your position. A listing carrying stars, a price and stock status occupies more space and gives a shopper more reason to choose it — but Google shows these at its own discretion, so treat it as making your existing rankings work harder rather than as a ranking tactic.
How long after fixing before stars appear?
Google has to recrawl the page and then decide. You can request indexing for individual URLs through URL Inspection, but at catalogue scale you are waiting on the normal crawl cycle. Watch the enhancement reports in Search Console for the error count falling rather than checking one product page repeatedly.
Does FAQ schema still earn rich results?
Largely no. Google restricted FAQ rich results in 2023 to well-known authoritative government and health sites, so on a store the markup is now worth having for machine comprehension rather than for anything visible in the results. Product markup is where the return is.
Do I need an SEO app for this?
An app can add markup, but adding markup is rarely the problem — most stores have too much of it, from too many sources. Apps are genuinely useful for the parts around it, and we cover which ones in our roundup of Shopify SEO apps. Reconciling the schema itself is a theme job.
The takeaway
Rich results reward stores that describe their products once, completely, and honestly. The commonest failure on Shopify is not missing markup but competing markup — a theme and an app each describing the same product, disagreeing on the details, leaving Google to pick between two accounts of one thing. Consolidate to a single Product node, make sure every claim in it is visible on the page, and you have done the part that is actually within your control.