Free Shopify store auditSpeed, SEO and conversion leaks — no cost, no obligation.
Claim it
Thriftizer Solutions LLPShopify Select Partner
Book a Growth Audit
Shopify Aug 12, 2026 6 min read

Keeping Review Rich Snippets After Moving to Shopify

Star ratings in search results are a click-through asset you can lose in a single afternoon. What actually has to move with your reviews, and the order to do it in so the snippets never drop.

Reviews are usually treated as a content migration — export the rows, import them into whichever app the new store uses, tick it off. Then a few weeks after launch somebody notices the stars have gone from the search results, and organic click-through has quietly dropped across every product page at once.

The reviews did move. What did not move was the thing Google was actually reading.

Stars in search come from markup, not from the app

A rich snippet is generated when Google finds valid AggregateRating structured data on the page, attached to a Product, backed by reviews that are visible to a visitor on that same page. All three parts matter.

Your review app renders the reviews. Whether it also emits the structured data — and whether your theme emits a competing copy — is a separate question, and it is where most losses happen. Two Product blocks on one page, one with a rating and one without, is a common outcome after a theme change, and Google's response to an ambiguous page is usually to show no stars at all.

Export more than the star and the sentence

Most exports give you rating, title, body and date. That is not enough. Before you touch anything, get out:

  • The product identifier the review was attached to — and the mapping from that identifier to whatever the product's ID will be on Shopify. This is the single most common reason reviews arrive orphaned.
  • Reviewer name and, where you have it, the verified-buyer flag. Verified badges are worth more than the raw count, and they cannot be reconstructed later.
  • The original date. If every review imports with today's date, your product pages announce that a six-year-old catalogue was reviewed 400 times this morning. It looks exactly like what it looks like.
  • Media. Photo reviews convert better than text and are almost always stored as URLs pointing at the old platform's CDN, which stops serving them when the old store goes away.
  • Replies. Merchant responses are part of the record and are frequently dropped by exporters.

Pull the media files down and rehost them as part of the migration. A review photo that 404s after cutover is worse than no photo.

Match on SKU, never on title

Reviews attach to whatever ID the old platform used. Shopify will mint new IDs. Something has to join them, and product title is the wrong key — titles get tidied during a migration, and "Cotton Kurti - Maroon (XL)" becomes "Maroon Cotton Kurti" somewhere in the process.

Join on SKU where you have one. Where you do not, build an explicit mapping file of old ID to new handle and keep it under version control with the redirect map. Any review that fails to match should end up in a rejects file with a reason, not silently dropped — and the rejects file should be small enough to fix by hand.

Reviews left on variants deserve a decision too. Most platforms attach reviews to the parent product; some attach to variants. If yours does, decide whether they roll up to the product on Shopify. They almost always should, because the aggregate rating that earns the snippet is a product-level number.

Check for double structured data before launch, not after

This is the check that saves the snippets, and it takes about ten minutes.

Open a product page on the staging store, view source, and search for application/ld+json. Count the blocks that contain "@type": "Product". If there is more than one, you have a conflict — typically the theme emitting a bare product block and the review app emitting another with the rating attached.

Fix it by having exactly one source of truth. Either the theme emits the full Product block including aggregateRating, or the theme's block is removed and the app owns it entirely. Which one depends on the app; what matters is that only one survives.

Then run the page through Google's Rich Results Test. It will tell you what it can actually parse, which is not always what you think you wrote.

The rating has to be visible on the page

Structured data describing reviews that a visitor cannot see is a policy violation, and it is an easy one to commit by accident. If your new theme puts reviews behind a tab that loads on click, or lazy-loads them below the fold via JavaScript that runs only on interaction, the markup may be present while the content is not.

Render at least the aggregate rating and a handful of reviews in the initial HTML. Test it the way a crawler sees it — fetch the page with JavaScript disabled and confirm the reviews are in the source.

Keep the URLs stable, or the reviews move to a page that no longer exists

Rich snippets are attached to a URL. Change the URL without a redirect and the rating history attached to it goes with it.

Product handles change during migration more often than anyone plans for — a tidy-up of the catalogue, a category restructure, a change in how variants are named. Every product URL that has ever been indexed needs a 301 to its new home, and the reviews need to land on the page the 301 points to. Doing the review import and the redirect map as two unconnected workstreams is how they end up disagreeing.

Expect a dip, and know what a normal one looks like

Even a clean migration causes a re-crawl. Stars can disappear from some results for a week or two while Google re-processes the pages, and that is not a failure.

What separates normal from broken is the shape. A normal dip recovers progressively as pages are re-crawled, starting with your highest-traffic products. A broken one does not recover, or recovers everywhere except one template — which points at a structured data problem on that template rather than at the migration.

Watch it in Search Console under the product snippets report rather than by spot-checking searches, because what you see in a personalised search result is not what the index holds. If the numbers are still falling three weeks after cutover, something is wrong and it is worth reading our diagnostic on what to check after a migration.

A short pre-launch checklist

  • Every review has a product it belongs to, and the rejects file is empty or explained.
  • Original dates preserved; no wall of reviews dated launch day.
  • Verified-buyer flags carried across.
  • Review photos rehosted, not hotlinked to the old CDN.
  • Exactly one Product structured-data block per product page.
  • Aggregate rating visible in the initial HTML, not only after interaction.
  • Rich Results Test passes on a product with reviews and one without.
  • Redirects in place for every indexed product URL.

Reviews are one of the few assets on a store you cannot buy back. They accumulate slowly, they carry disproportionate weight in a buying decision, and the aggregate is the difference between a search result with stars and one without. Treat the migration as a data project with an SEO deliverable attached, rather than as an app swap.

If you are planning a move and want the review and structured-data side handled properly, that work sits inside our migration engagements, and it is also something our SEO team audits on stores that have already moved and lost their snippets without knowing why.

Previous postNext post

Ready to scale your D2C brand profitably?

Let's build a growth engine that drives more traffic, more conversions and more profit.

Book a Growth Audit
📅 Free Audit💬 WhatsApp