Wrivo AIWrivo AI
Back to blog
Technical SEO

How to Fix Product Structured Data Errors on Shopify

Wrivo AI Team··5 min read

Google Search Console flags a structured data error, you open the report, and it says something like "Either 'offers', 'review' or 'aggregateRating' should be specified." Which tells you what is missing, but not why, or what to do about it on Shopify specifically.

Here are the errors Shopify stores actually hit, ordered by how much damage each one does.

First: Find Out What You're Actually Emitting

Before fixing anything, see the real output.

  1. Google Search Console → Enhancements → Products. Site-wide view of affected URLs.
  2. Rich Results Test (search.google.com/test/rich-results). Single-URL detail, showing exactly what was parsed.
  3. View page source and search for application/ld+json — this reveals duplicate blocks, which the tools above sometimes report confusingly.

That third step catches the single most common Shopify-specific problem.

Error 1: Duplicate Product Schema

What you see: conflicting or unexpected values, or two Product entries in the Rich Results Test.

Why it happens on Shopify: your theme outputs Product schema, and an SEO or schema app outputs its own. Now the page makes two different claims about the same product.

Fix: pick one source. If your theme handles schema well, disable the app's product schema feature. If the app is more complete, look for a theme setting to disable built-in structured data — many modern themes have one under theme settings. If neither is configurable, the theme's product-template or a structured-data snippet is usually where the JSON-LD lives.

This is worth checking first because it can make every other error report misleading.

Error 2: Missing offers, review, or aggregateRating

What you see: "Either 'offers', 'review' or 'aggregateRating' should be specified."

What it means: your Product markup has no price and no ratings, so there is nothing to display.

Fix: add a complete offers block:

"offers": {
  "@type": "Offer",
  "price": "89.00",
  "priceCurrency": "USD",
  "availability": "https://schema.org/InStock",
  "url": "https://yourstore.com/products/handle"
}

Note price must be a number without a currency symbol, and priceCurrency is separate. "$89.00" in the price field is invalid.

Error 3: Price Mismatch Between Schema and Page

What you see: a manual action warning, or rich results silently disappearing.

Why it happens: a sale or discount app changes the displayed price without updating the structured data. Common with apps that override price display in the theme rather than through Shopify's native pricing.

Fix: ensure schema pulls from the same Liquid variable the page displays. If a discount app renders its own price markup, its schema output — not your theme's — needs to be the source of truth.

This one matters more than a typical error: mismatched pricing is a policy issue, not just an invalid field.

Error 4: Stale availability

What you see: "In stock" in search results for a sold-out product, or vice versa.

Fix: availability must be driven by live inventory, typically:

"availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}"

Hardcoded InStock is surprisingly common in older or heavily customised themes.

Error 5: Missing image

What you see: "Missing field 'image'."

Fix: include a full absolute URL. A relative path (/products/image.jpg) will not validate — it needs the protocol and domain. Shopify's img_url filter with | prepend: 'https:' handles this.

Error 6: Invalid aggregateRating

What you see: rating errors, or worse, a manual action.

Two distinct problems:

Structural — aggregateRating requires ratingValue and either reviewCount or ratingCount. Missing the count invalidates the block.

Policy — marking up ratings that are not visibly present on the page. Some review apps emit schema even when zero reviews display. That is a violation and can cost rich results site-wide, not just on that page.

If you have no reviews, omit the field entirely. Nothing is better than invented.

Error 7: Variants Handled Wrong

What you see: only one price shown for a product with a range, or confusing variant reporting.

Fix: for products with multiple variants at different prices, use AggregateOffer with lowPrice, highPrice, and priceCurrency, rather than a single Offer reflecting only the default variant.

Priority Order

Error Damage Fix difficulty
Price mismatch High — policy risk Medium
Fake/invalid aggregateRating High — policy risk Easy (remove it)
Duplicate schema High — invalidates everything Easy (disable one)
Missing offers Medium — no rich result Easy
Stale availability Medium — misleads shoppers Medium
Missing image Low — limits format Easy
Variant pricing Low — incomplete display Medium

Fix the two policy risks first, then duplicates, then the rest.

After Fixing

Use Validate Fix in the Search Console report to request a recrawl rather than waiting. Expect one to four weeks for a full catalog to reprocess — the report clearing is the signal, not the deploy.

Scope Note

This is theme and schema-app territory, not something a content tool fixes. Wrivo AI writes the product content that feeds your schema — the description field in your structured data is your product description — and its SEO audit flags pages with content gaps, but the markup itself is fixed in your theme or schema app using the tools above.

Try Wrivo AI free on the Shopify App Store.

Frequently asked questions

Why does Search Console show product schema errors after I fixed them?
Search Console reports on the last crawl, not the current state of your page. After fixing, use Validate Fix in the relevant report to request a recrawl. Full reprocessing across a large catalog commonly takes one to four weeks.
Do structured data errors hurt my rankings?
Errors themselves are not a ranking penalty — invalid markup simply makes the page ineligible for rich results, so you lose the price, rating, and stock display. The exception is deliberately misleading markup, such as fake reviews, which can trigger a manual action.
Should I use a schema app if my theme already adds schema?
Usually not. Running both is the most common cause of duplicate and conflicting markup on Shopify stores. Check what your theme emits first; only add an app if your theme genuinely lacks coverage, and disable the theme's version if the app takes over.

Try Wrivo AI on your Shopify store

Free plan, no credit card required — install directly from the Shopify App Store.

Install on Shopify