Shopify product structured data error "Either 'offers', 'review', or 'aggregateRating' should be specified" โ how to fix it
This Rich Results / Search Console error fires when your Product structured data contains none of the three blocks Google needs for a product result โ offers, review, or aggregateRating โ so the item is flagged invalid and loses its price and rating snippets. On Shopify it typically appears after a reviews app is uninstalled (it takes the aggregateRating markup it injected with it), after an SEO app rewrites the theme's JSON-LD and drops the Offers block, or after a theme edit breaks the Product schema. Shopify keeps no version history of the theme's structured-data code or your SEO fields, so there's no native way to see what the markup contained before the change.
If you didn't already have a backup, those old values are gone โ Shopify keeps no history.
The steps below recover what you can. To make the next time a 1-click undo instead of hours of CSV work: a daily snapshot of every SEO field. Free to monitor, no card โ and SEO Vault only reads your store unless you click restore.
Stop and identify the change: in Settings > Apps and sales channels, note any SEO or product-reviews app installed, updated, or uninstalled around the date GSC flagged the error โ an uninstalled reviews app is the classic cause. Pause an SEO app that edits schema before you fix the markup, or it will overwrite your correction.
Pinpoint which block is missing: run the affected product URL through Google's Rich Results Test and URL Inspection > View crawled page to read the rendered JSON-LD, and confirm whether offers, review, and aggregateRating are all absent. View the page source and search for "@type":"Product" to also catch a second, conflicting Product block injected by another app.
Restore a valid Product block: make sure your theme outputs an Offers block with a numeric price, priceCurrency, and availability (Shopify's product object provides all three) โ re-add it in the product template or roll back to a theme backup; if you want star ratings, reconnect the reviews app so aggregateRating is repopulated. Validate again in the Rich Results Test, then use URL Inspection > Request indexing.
Snapshot your fields so the next schema break is caught fast: a theme update, a new app, or an uninstall can strip the Offers or rating block overnight, and Shopify logs none of it. Keep a daily snapshot of your product and collection SEO fields and get alerted the moment a bulk change hits, with the likely app named, so you can correlate the GSC error to the exact change and restore in one click. SEO Vault records these fields daily for products and collections.
Source: Google Search Central โ "Product (structured data)" documentation, required properties (offers, review, aggregateRating): https://developers.google.com/search/docs/appearance/structured-data/product
SEO Vault keeps a daily snapshot of every SEO field on your store โ meta titles, descriptions, alt-text, tags, handles (products AND collections) โ and emails you the moment something changes in bulk, with the likely app responsible. One click restores yesterday's state, just the SEO fields. Free to monitor and get alerted; $14/mo for 1-click restore.