Short answer. Merchant Center reports “Mismatched strikethrough price (page crawl)” when the crossed-out price on your product page differs from the price attribute you send with sale_price. Google then discards the original price and shows the sale without a strikethrough. Make the page’s crossed-out price, its structured data and your feed’s price the same number, with the sale price in sale_price.
| Shown in Merchant Center as | Mismatched strikethrough price (page crawl) |
|---|---|
| Attribute | price |
| Effect | Warning — Not a disapproval: Google drops the original price, so the sale shows without a strikethrough |
| Where to find it | Products → Needs attention, then filter by this issue |
| Free check | Not something a feed file shows; see below for what the check can tell you instead |
What Merchant Center means by “Mismatched strikethrough price (page crawl)”
When a product is on sale, Google can show the sale price as the current price with the original one crossed out beside it — a sale price annotation. To do that it compares your product page with your data. Its help page for this issue says the issue appears when the pricing on your website differs from the price or sale_price you submitted, and that the original price is then discarded and not shown as a strikethrough price.
It is not listed as a disapproval: the product keeps showing, without the crossed-out price. With automatic item updates on, Google may instead correct the pricing itself and tell you so under “Automatic item updates active for strikethrough price”.
Why it happens
- A different crossed-out price. The page crosses out one amount, and the feed’s
pricesays another — Google asks that the strikethrough price on your site matchespricewheneversale_priceis provided. - A crossed-out price with no sale in the feed. The page shows a strikethrough, and the product data carries no
sale_priceat all. - Added by JavaScript. Google’s help page names a strikethrough price added dynamically after the page has loaded as a cause.
- Timing. The price changed on the site and the feed has not caught up, or the other way round.
How to fix it
In Shopify
In Shopify the crossed-out price is the compare-at price. FeedRobin sends the compare-at price as price and the current price as sale_price whenever the compare-at price is the higher of the two, so the feed and a standard theme cross out the same number, and product changes reach your feeds within minutes. If the issue still shows, look for an app or theme section that prints its own “was” price, from somewhere other than the compare-at price.
In WooCommerce
During a sale, WooCommerce shows the regular price crossed out next to the sale price. Our free plugin sends the regular price in price and the sale price in sale_price, only while the sale is inside its scheduled dates, so the two agree. A plugin or script that adds its own “was” price after the page loads is the usual exception: remove it, or make it print the regular price.
In a CSV or XML feed
Whenever the page crosses out a price, send that price in price and the current one in sale_price, and regenerate the file when prices change. In the page’s structured data, the original price goes in a priceSpecification with priceType set to https://schema.org/StrikethroughPrice, per Google’s merchant listing documentation — make it the same number as price.
How long until Merchant Center clears it
The strikethrough can return once Google next crawls the page and finds it agreeing with your data. Google suggests turning on automatic item updates for prices and raising your crawl budget in Search Console, so it reaches more products sooner. The annotation also has to meet Google’s sale price annotation rules — a discount of more than 5% and less than 90%, and a base price that has been charged for long enough.
What FeedRobin does about it
The free check opens a sample of your product pages and compares the price in their structured data with the one in your feed; it does not read the crossed-out price yet. For connected stores, price and sale_price come from the store’s own regular and sale prices on every sync, and rules can never rewrite a price, so a rule cannot cause this mismatch.
Questions merchants ask
Why does Google show my sale without the old price, even when the prices match?
Sale price annotations have rules of their own. Google’s help page says the discount must be more than 5% and less than 90%, and in most countries the base price must have been valid for 30 days within the past 200; for Shopping ads in the US, 5 days within the past 30 or 15 within the past 200.
Which price has to be crossed out on the page?
The one you send in price. Google asks that any strikethrough price on your website matches the price attribute whenever sale_price is also provided; the sale price should be the most prominent price on the page.
How do I mark the old price in structured data?
Google’s merchant listing documentation uses a priceSpecification of type UnitPriceSpecification with priceType set to https://schema.org/StrikethroughPrice for the original price; ListPrice is also allowed for a transition period.
What is “Automatic item updates active for strikethrough price”?
A notice that Google found the same mismatch and, with automatic item updates on, corrected the pricing from your page itself. Your data still disagrees with the page, so fix it at the source.
Sources
- googleFixStrikethrough — Google Merchant Center Help
- googleFixAutoStrikethrough — Google Merchant Center Help
- googleSaleAnnotations — Google Merchant Center Help
- googleSalePrice — Google Merchant Center Help
- Price [price] — Google Merchant Center Help
- googleMerchantListingSd — Google Merchant Center Help
- googleAutoItemUpdates — Google Merchant Center Help