Your schema can be technically valid and still fail commercially.
The Rich Results Test validates structure. Google evaluates trust. That means your Product schema can pass every validator while still losing rich results, triggering Merchant Center disapprovals, suppressing Shopping visibility, and weakening AI retrieval confidence — because the underlying product data is stale, inconsistent, or contradictory across your page HTML, your schema, and your Merchant Center feed.
This article covers the hidden data-layer failures most ecommerce teams never audit: the ones that produce no errors, raise no flags, and quietly cost you. Specifically: price and availability staleness, GTIN and identifier mismatches, AggregateRating data problems, image compliance failures, and thin schema, along with the 3-Layer Product Data Alignment Model that explains why these failures are systematic rather than random, an operational audit checklist, and five concrete failure scenarios from real ecommerce environments.
What the Rich Results Test Actually Validates
The Rich Results Test validates syntax, not truth. It checks that your JSON-LD is parseable, that required properties are present, and that values are the correct type. price is a number. priceCurrency is a string. availability is an ItemAvailability enum — accepted as a short value like InStock or a full schema.org URL. Pass those checks and you get a green tick.
That green tick does not mean Google will use the data. It means the data can be read. Those are different things.
After the crawl, Google runs its own verification layer: comparing the price in your schema against the price on the page, checking availability against what a user would actually encounter, cross-referencing your identifiers against the Merchant Center feed. Those checks happen after the green tick, and they are the ones that determine whether the data gets used.
- Stale or cached price in schema not matching the live page price
- Availability set to
InStockfor out-of-stock products - GTIN field containing an internal SKU or incorrectly formatted identifier
- Schema GTIN and Merchant Center feed GTIN disagreeing
- Schema image URL returning a 404, redirect chain, or undersized image
- AggregateRating values not matching the review count visible on the page
- Price or availability updated on the page but not yet in schema or feed
- Missing recommended properties:
shippingDetails,returnPolicy,AggregateRating,brand
5 Product Data Failures: Suppression, Disapproval, and Silent Underperformance
1. Price and Availability Staleness
Three sources have to agree: page HTML, schema, and Merchant Center feed
When any of them diverge, Google acts. A feed vs. page mismatch triggers a Merchant Center disapproval. A schema vs. page mismatch triggers suppression — the rich result stops appearing. No error in Search Console, and nothing flagged in Merchant Center.
The flash sale failure pattern is the most common version at scale. The sale goes live. The page price updates dynamically. The static JSON-LD was generated at the last build. The Merchant Center feed is on a 24-hour upload cycle. During the sale launch window, the three sources fall out of alignment. Products disapprove. Rich results drop. Reapproval typically happens on the next crawl once alignment is restored, but the damage window during a high-traffic promotion is real.
JavaScript-rendered prices create a quieter version of the same problem. Googlebot reads your pre-render HTML first, then renders the JavaScript. If your schema is generated from the same cached layer as the pre-render HTML, you can have a schema-to-page mismatch even though the displayed price is correct. The fix is ensuring the live price is available in the static HTML response, not only in the JavaScript output.
InStock regardless of actual stock status — because nobody updated it when the product range changed — reduces Google's data confidence across every page using that template. There is no disapproval, no warning, and no per-URL flag in Search Console. You find it in a crawl, or you don't find it.
2. GTIN and Identifier Mismatches
A value that passes format validation but belongs to a different product, or to no product at all
The most common version: an internal SKU in the GTIN field, 12 numeric characters, passing the format check, doing nothing useful for product matching.
sku property of your Product schema, and in the id [id] attribute of your Merchant Center feed. That is exactly what those fields are for. The failure is SKU ending up in the gtin field in either place, which is where Google looks for a globally unique product identifier, not an internal reference.
GTIN is how Google matches your product to a known entity in its knowledge graph. Get it right and your listing gets price comparison features, Shopping knowledge panels, and stronger AI Overview eligibility. Get it wrong and the product appears without being matched — no price comparison, no knowledge panel, weaker signals across the board.
The schema vs. feed drift problem is subtler. GTINs live in two places: your JSON-LD and your Merchant Center feed, maintained by different teams on different update cycles. A GTIN corrected in the feed after a supplier update doesn't automatically update the page template. A product relaunch that changes the identifier gets the feed updated; the schema is generated from a CDN-cached data layer that nobody flushed. Neither produces an error. Google just sees two sources disagreeing and applies a lower confidence score to both.
The practical check: pull 20 high-traffic PDPs and compare the gtin in the schema against the gtin [gtin] in the Merchant Center feed for the same product. They should be identical. For full identifier field definitions and format requirements: Product Identifiers for Ecommerce SEO.
3. AggregateRating Data Problems
AggregateRating is probably the most misrepresented property in product schema
Not maliciously. From stale pipelines, third-party integrations that bleed into the wrong context, and cached counts that stopped updating at some point and nobody noticed.
Three patterns cause suppression:
ReviewCount that doesn't match the page. Schema says 1,247. The page shows 23. The 1,247 comes from a legacy feed that aggregated reviews across all channels — marketplace, email, direct — before the methodology changed. Google crawls the page, sees 23, compares it to 1,247 in the schema, and stops trusting the schema. The annotation disappears.
Store ratings in a product context. A Trustpilot merchant score presented as a product-level AggregateRating in your Product schema. A store rating reflects what customers thought of buying from you. A product rating reflects what customers thought of a specific item. Google knows the difference. For the full distinction: Google Store Ratings vs Product Ratings: How Each Works.
RatingValue that doesn't match the page. Schema says 4.8. The page says 4.2. One was cached. The other wasn't. Google takes the conservative position and suppresses the annotation rather than surfacing data it can't verify independently. The rule: schema values must match what a user can visibly see on the page at the time of crawl.
4. Image Compliance Failures
The schema image property is what Google uses for Product rich results, Discover, and AI retrieval
Not the first image on the page. Not the hero image in your HTML. The URL in the image property of your Product schema. Google Shopping listings use image_link from the Merchant Center feed — but schema image matters for organic rich results, Discover, and increasingly for AI retrieval confidence. When that URL is wrong, too small, or broken, you lose visibility across all three. Quietly.
- 404s from CDN migrations. The product image moved to a new path. The HTML was updated. The schema wasn't. Google can't fetch the image, no thumbnail appears, and nothing flags it in Search Console.
- Dimensions below Google's minimums. The validator doesn't enforce dimensions. For schema
image, Google's stated minimum for rich results is 160×90px, but the practical minimum for Discover and AI retrieval is higher. For Merchant Center'simage_link: 100×100px (non-apparel), 250×250px (apparel). Both Google and Merchant Center recommend 800×800px. An undersized image passes validation and still causes features to be withheld. - Wrong image on variant pages. Where all variants share a single URL, the
imageproperty sometimes points to a generic shot rather than the variant being described. Google may show the wrong product in Shopping, or none at all. - Redirect chains. The image URL resolves — eventually — through multiple redirects. Google follows them, but long chains create uncertainty and images can be skipped during high-volume crawls.
5. Thin Schema: Missing Recommended Properties
Schema that passes validation but omits properties Google uses to serve features
Required properties get you into the system. Recommended properties determine how well you perform once you're in it. Missing them isn't an error — it's an invisible opportunity cost.
The properties most commonly absent, and most commercially relevant:
shippingDetailsandreturnPolicy. These generate the shipping and returns annotations in organic results — "Free delivery over £20 · 30-day returns" appearing beneath your meta description before a click. Optional by spec. In practice, the lowest-effort rich result improvement on most ecommerce sites, because few competitors have implemented it correctly.AggregateRatingwhen reviews exist on the page. If your product page displays star ratings and review counts, and your schema doesn't includeAggregateRating, you're leaving the most visible organic annotation off the table. The validator has no opinion on this. It will pass your schema with no rating data even if the page is full of reviews.description. Not required for rich results. Used by Google as a content signal for AI Overviews, Discover, and Shopping knowledge panels. On large catalogues it's frequently absent or populated with a truncated string from a legacy feed that predates the current product range.priceValidUntil. Required for Merchant Listing schema when a price has an expiry. Without it on a promotional price, Google has no signal the price is time-limited.brandon products without a GTIN. Without a GTIN,brandcombined withmpnis the fallback matching mechanism. Missingbrandon a private-label or own-brand product means Google has no manufacturer context and no GTIN; matching confidence drops significantly. For the full identifier hierarchy: Product Identifiers for Ecommerce SEO.- Variant properties for selectable variants.
color,size,material, andpatternproperties on individual variant nodes are what enable colour swatches and size selectors in Google Shopping product panels. Omitting them produces valid schema that just never generates variant-level Shopping features.
shippingDetails on 80% of pages is a template fix, not a page-by-page fix. The pattern is what matters.
The 3-Layer Product Data Alignment Model
Most product data failures don't happen in one place. They happen because the same data is being maintained in three separate systems, by separate teams, on separate update cycles. When any two layers disagree, you get disapprovals, suppression, or a lower-confidence match that nobody tracks.
Rendered Page State
Structured Data
Merchant Center Feed
The failure mode this creates is systematic, not random. Fixing one layer without checking the other two is the reason the same disapproval keeps reappearing. A Merchant Center price mismatch gets resolved by updating the feed. Three days later it reappears — because a promotion updated the page price without triggering a feed refresh. The fix needs to happen at the process level, not the data level.
This is also why schema audits that only check syntax miss the actual problem. The three layers need to be checked against each other, not just internally. The audit checklist below is structured to do exactly that.
Why This Is Now an AI Trust Problem, Not Just an SEO Problem
Rich results are one consequence of bad product data. They are no longer the biggest one.
AI shopping agents — the systems used in Google's AI Overviews, ChatGPT shopping, Perplexity product recommendations, and the agentic commerce layer being built into most major search interfaces — retrieve product data from structured markup to inform purchase decisions. Based on how these systems behave, they appear to favour product data that is internally consistent across page, schema, and feed. Inconsistency is a low-confidence signal for the same reason it is for Google: it means one of your sources is wrong, and there is no way to know which one.
A product with valid but inaccurate schema isn't just at risk of losing rich results. It's at risk of being skipped by systems that have no obligation to surface data they can't verify. That's a different kind of visibility problem than anything in your Search Console report.
The validator pass is the floor. What's above it — data consistency, feed alignment, identifier accuracy — is increasingly what determines whether your products surface in AI-assisted shopping at all. For the broader context: Agentic Commerce Optimization: What to Fix in Your Schema, Feeds, and Product Data.
Symptoms You'll Actually See
These failures don't announce themselves as schema errors. They show up as operational signals in other systems, usually without an obvious cause.
| What you observe | Likely cause | Where to check |
|---|---|---|
| Rich results were showing and then stopped | Schema vs. page mismatch (price, availability, or rating) | Search Console Rich Results report → compare schema to live page |
| Products intermittently disapprove in Merchant Center | Price or availability out of sync between feed and page | Merchant Center Diagnostics → check price at time of disapproval |
| Shopping CTR or impression share dropped after a sale ended | Feed still showing sale price after promotion ended on page | Compare feed sale_price_effective_date to page |
| Variant swatches or size selectors missing in Shopping panels | Missing color, size, or hasVariant properties on variant schema | Crawl schema on variant pages; check for ProductGroup structure |
| Star rating annotations disappeared from organic results | AggregateRating mismatch or third-party score in wrong schema context | Compare schema reviewCount + ratingValue to visible page values |
| Products approved in Merchant Center but Shopping traffic lower than expected | GTIN mismatch between schema and feed; product not matching to entity | Pull 20 PDPs, compare gtin in schema vs. feed line by line |
| Shipping/returns annotations absent despite implementation | Missing shippingDetails or returnPolicy; or Merchant Center feed not aligned | Rich Results Test on a PDP; check schema for OfferShippingDetails |
The Audit Checklist
Start with 20 high-traffic PDPs, not 200. The goal is to identify systematic failures in your template or pipeline. Individual bad URLs are noise. Patterns are signal.
-
Price spot-check (all three layers) For each URL: compare the
pricein the JSON-LD, the price in the page HTML, and theprice [price]in the Merchant Center feed. All three should be identical. Repeat for sale prices: checkpriceValidUntilin schema andsale_price_effective_datein the feed, and confirm the promotion is actually live on the page. Any mismatch is a disapproval or suppression candidate. -
Availability check Compare
schema:availabilityto actual stock status for each URL. FlagInStockon out-of-stock products andOutOfStockon purchasable ones. Check which products had a stock status change in the last 30 days — these carry the highest schema lag risk. -
GTIN format and cross-layer comparison Extract the
gtinfrom schema and compare againstgtin [gtin]in the Merchant Center feed. They should be identical. Check format: GTINs are numeric only, 8, 12, 13, or 14 digits. Values containing letters, or starting with02,04, or2are GS1-reserved for internal/restricted use and are not usable for Google product matching even if they pass format validation. Use the GMC Feed Analyzer for bulk checks across your full feed. -
Image URL audit Extract the
imageURL from each Product schema block and check: HTTP response code (looking for 404s and redirect chains), dimensions (800×800px recommended; anything below 160×90px will be rejected for rich results), and whether the image matches the primary product described on the page. Screaming Frog can extract schema image URLs and check response codes in a single crawl. -
Rating consistency check For any URL with
AggregateRating: compareratingValueandreviewCountin schema against the values visibly displayed on the page. Identify the data source for each: live review system, daily snapshot, or static template. Flag anything where the two can fall out of sync. -
Cross-layer failure pattern analysis After steps 1–5: categorise failures by layer. Schema-only failures indicate static templates or stale build-time data. Feed-only failures indicate upload frequency or transform issues. Failures in both layers simultaneously usually mean the wrong data is being fed into multiple systems from a single upstream source. That's the one worth escalating.
Common Failure Scenarios
The five failures above aren't theoretical. These are the patterns that appear most frequently in real ecommerce audits.
OutOfStock. Product is restocked two days later. Page HTML updates immediately. Schema is generated from a CDN-cached data layer with a 12-hour TTL. Schema continues to say OutOfStock for 12 hours after the restock. No disapproval — the mismatch direction is availability correct on page, wrong in schema. The availability annotation in organic results disappears or is suppressed for those 12 hours. No flag anywhere. Fix: stock status changes should trigger a schema cache invalidation, not wait for the TTL.image URLs return 404s. Product rich result images disappear. Shopping thumbnail annotations drop. Nothing in Search Console flags image 404s as a structured data issue — it appears in a crawl, not in the Rich Results report. Takes weeks to identify without proactive monitoring. Fix: include schema image URLs in post-migration crawl checks.AggregateRating is still generated from the old provider's API, which stopped syncing at the point of migration. Schema says 1,104 reviews, 4.7 rating. Page now displays 38 reviews from the new provider, 4.4 rating. Google crawls the page, sees 38 and 4.4, compares to the 1,104 and 4.7 in schema, and suppresses the rating annotation. No error in Merchant Center, no warning in Search Console. Fix: review provider migrations require a schema data source audit, not just a front-end integration check.Conclusion
The validator checks whether the markup is technically valid. What actually determines whether products surface consistently across organic search, Shopping, and AI-driven experiences is whether the underlying data stays accurate, current, and aligned across the page, schema, and Merchant Center feed.
Getting the implementation live is step one. Keeping those three layers aligned over time is the operational discipline most ecommerce teams never fully solve. That is where the real gap is.
Sources and further reading
- Related on MagsTags: Product Identifiers for Ecommerce SEO: GTIN, MPN, SKU & Brand — identifier field definitions, format requirements, and the schema vs. feed alignment gap
- Related on MagsTags: Google Store Ratings vs Product Ratings: How Each Works — the difference between product-level AggregateRating and merchant-level seller ratings
- Related on MagsTags: E-commerce Structured Data: Rich Results, Google Shopping and What Actually Moves the Needle at Scale — the broader three-layer alignment framework
- Related on MagsTags: Agentic Commerce Optimization: What to Fix in Your Schema, Feeds, and Product Data — AI agent trust signals and product data requirements
- Tool: GMC Feed Analyzer — bulk identifier and attribute checks across your Merchant Center feed
- Tool: Merchant Listing Schema Generator — generate correct JSON-LD for price, availability, shipping, and returns
- Google: Price mismatch — Merchant Center Help
- Google: Product structured data — Google Search Central