Common symptoms (and why this is so frequent)
“Price mismatch” and “availability mismatch” are often reported as a single error, but the cause varies. The core pattern is the same: Merchant Center sees one value while users (or structured data) show another. Because validation happens over time and from different contexts (bots, caches, locations), it can look “random”.
- Price mismatch: feed price differs from the product page price, or from
Offer.price. - Availability mismatch: feed says in stock while the page (or
Offer.availability) says otherwise. - Variant-only mismatch: base product is correct, but certain sizes/colors/memory options are wrong.
- Geo/currency mismatch: pricing differs by country/currency while feed/markup stays fixed.
- Intermittent mismatch: appears after promos start/end, inventory syncs, or cache warm-ups.
Where Google gets the “truth” (page vs schema vs feed)
Merchant Center doesn’t trust a single source. Your feed is the primary input, but Google still verifies what users see on the landing page and what structured data declares. When these diverge, mismatches happen.
Product + Offer. Duplicate JSON-LD or stale values are a top mismatch driver.
Root causes (9 patterns that create mismatches)
Treat this like debugging: identify the pattern, confirm it on a small sample, then apply a controlled fix.
Shopify: where consistency breaks
On Shopify, mismatches often come from theme scripts, apps that alter prices, multi-currency configurations, and multiple apps injecting structured data.
- Open a product with variants; select 3 variants.
- View page source and search for
application/ld+json. - If you see multiple Product objects or an Offer that never changes, you have a mismatch risk.
WooCommerce: plugins and caching that cause trouble
WooCommerce often stacks multiple layers affecting price/stock/markup: caching, SEO, schema plugins, multi-currency, discount rules and builders.
schema.org Product/Offer: duplication and dynamic JS
The most dangerous pattern is simple: the UI shows Price A while JSON-LD declares Price B. Merchant Center reads structured data and compares it to your feed — even if customers see different values.
Fix workflow (step-by-step, one variable at a time)
Avoid broad changes. Use a small set of products, isolate variables and confirm with repeatable tests.
application/ld+json. Confirm a single coherent Product/Offer and matching values.Verification tests (before requesting a review)
Don’t request a review until you’ve tested from different contexts. Mismatches often come back because they were fixed only in one cache layer or one location.
- Two browsers: Chrome + another browser (fresh session).
- Two networks: home + mobile hotspot to reveal CDN/geo differences.
- Variant test: at least 3 variants must match both visible UI and Offer values.
- Hard refresh: verify no stale price remains after forced reload.
Final checklist (fast pass)
Use this before requesting a review or after major catalog changes.
- Visible price matches
Offer.priceand feedprice. sale_pricelogic is consistent with promo timing and cache.- Currency strategy is coherent (or multi-currency is fully aligned).
- Cache/CDN does not serve stale prices.
- Visible stock matches
Offer.availabilityand feedavailability. - Variants update both UI and markup (or you use stable per-variant URLs).
- Inventory sync windows don’t create mismatch gaps.
Want to detect these inconsistencies automatically before requesting a review?
Generate a report: landing page checks, schema duplication, cache risk, and price/stock alignment — your “pre-review” fast pass.