Shopify 8 min read

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”.

Diagram of a product search listing with each visible element joined by a line to the schema property that produces it: breadcrumb from BreadcrumbList, star rating from aggregateRating ratingValue, review count from reviewCount, price from offers price and priceCurrency, and stock status from offers availability
Every element of a product listing traces back to one named property. Missing element, missing field.
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.

Diagram showing one Shopify product URL emitting two separate Product JSON-LD blocks, one from the theme with price and availability and one from a review app with a rating, the two disagreeing on price and stock status, feeding into an uncertain search result
Theme and review app each describe the same product independently. Where they disagree, the rich result is the casualty.

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

  1. 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.
  2. Complete the offer. price, priceCurrency and availability, read from the selected variant, matching the price on screen — including when a currency selector changes it.
  3. Attach the rating to the same node. Not a second product described separately.
  4. Make the reviews visible. Render them server-side where you can, and never claim a count the page does not show.
  5. Suppress empty ratings. No reviews should mean no aggregateRating property.
  6. Add the merchant-listing extras. brand, sku or gtin, itemCondition, shippingDetails and hasMerchantReturnPolicy are 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.

Share X in wa
Mohamed ElQadi
Mohamed ElQadi Tech Lead @ Qode Bites

I help business owners untangle the mess between their website and their revenue — performance, conversion, and the unglamorous fixes that move numbers. Egypt + US.

Follow QodeBites on LinkedIn →
• FREE PLAYBOOK

The E-Commerce
Growth Playbook

17 moves that turn a store into a revenue machine — the exact levers our team pulls for the brands we build and grow.

  • Convert more of the traffic you already pay for
  • Speed wins that lift revenue on every visit
  • Retention flows that make the second sale cheaper
  • Ad math so you scale in profit, not blind

Get the free PDF

Enter your details and we’ll send it straight to your screen.

No spam — the guide now, and the occasional useful email. Unsubscribe anytime.

More Insights

Discover more articles, expert perspectives, and practical insights on software development, product design, emerging technologies, and digital innovation.

Ready to light it up?

Start a Project

Your Trusted Growth Partner
For Startups And Enterprises

From first concept to final deployment, Qode Bites delivers everything needed to take your idea live — with seamless setup, performance-ready infrastructure, and expert support every step of the way. Book a free 30-minute strategy call.

What We'll Cover

  • Current store performance
  • UX and conversion bottlenecks
  • Growth opportunities
  • Recommended action plan
Book a Strategy Call

June

FriSatSunMonTueWedThu

Sat, June 2