Does your markup match what the page shows?
Google compares your structured data to the page. When the Offer price disagrees with the price element, it can be treated as misleading and the product disapproved, and nothing on the page looks wrong.
Compares the Offer price in your JSON-LD with the price element on a set of product pages. Saved to your account if you are signed in to a paid plan.
How this check works
Shipwork reads a set of your product pages, extracts the price from the Product or ProductGroup JSON-LD, and compares it with the machine-readable price element on the page. It reports a mismatch, a price that is only in the markup, or a price element with no matching Offer.
What the schema vs page check compares
For each product page in the sample, the check reads two machine-readable prices. The first is the price in the page's structured data, taken from the Offer, including the low price when a single price is absent. The second is the price in the page's price element, the value marked with the itemprop price attribute. It compares only those two numbers, never a loose text scan.
When both are present and differ by more than a small rounding tolerance, the check reports a mismatch. It also notes when a price exists in one place but not the other. The free run reads up to 20 pages. It does not compare a price to a merchant feed, and it does not judge whether a price is correct.
How to read a price-match result
An error means the structured-data price and the visible price element disagree. Because a search engine compares markup with the page, a disagreement is a documented misrepresentation and can lead to disapproval, not just a warning. An info finding is softer: the price lives only in the markup or only in the price element, so one side lacks a value to check against.
A clean result means the two machine-readable values matched on every product page checked. It does not prove that a shopper sees the same number in the layout, that a variant price is handled, or that the price is current. It compares the two values a machine can read, which is exactly what is verified.
Why markup and page must agree
A page states a price in its structured data so a search engine can show it, and states a price in its visible content for the shopper. If the two differ, the page is saying two things at once. A cached markup value, a hardcoded schema price or a theme that rounds differently will drift from the product record and produce exactly this mismatch.
The failure is common on stores that update prices often or run promotions. A sale price in the layout with an old price in the markup is the classic case. It matters because the check is automated and runs before a person reads the page, so a mismatch can trigger a rejection with no warning.
Make both prices come from one field
The reliable fix is to render the visible price and the structured-data price from the same product field, so they cannot disagree. In the Offer, set "price" and "priceCurrency" from that field, and make sure the visible element carries the same number. Do not hardcode a promotional value in the markup.
If a sale price changes often, render it dynamically rather than editing the JSON-LD by hand. On Shopify and WooCommerce, edit the theme or app that emits the markup so both values update together. The guide price mismatch covers the fix, and misrepresentation in a merchant account explains the consequence.
When to use related checks
Use price check when the question is whether a price exists at all, and schema coverage when a page may have no product markup. Use structured data check to inspect one page's full product markup and its required fields.
If a rich product result is not appearing, rich results check shows which required properties are missing, and product page check reviews the page's catalogue signals together. This check is the price comparison; the others cover presence and completeness.
Questions
Why does a price mismatch matter?
What does the check compare?
I update prices often: how do I keep them in sync?
How do I check if my structured-data price matches the page?
What exactly does the check compare?
Does it compare my merchant feed price?
I update prices often, how do I keep them in sync?
Keep reading
What this reads
- Reads public pages from outside your network, the way a crawler does.
- No signup, and nothing is stored on the free checks.
- One of 83 checks across discovery, content, markup, trust and catalogue data.
Cool, just ran an audit and got some insights! Let’s see if I can fix them :)
Whoah! this site is crazy, nothing to roast at all
cool as heck, tried it on my blog and the insights it gave are helpful and not bluff.