Playbook · Shopify compare-at / strikethrough price missing
Shopify compare-at price missing on PDP or collection.
Written for a Shopify DTC owner whose compare-at / strikethrough / was-now price or sale badge never appears on a product page or collection card — variant Compare at price empty, theme price blocks unpublished or toggled off, CSS hiding .price--on-sale / .badge--sale, Markets price lists overriding the domestic compare-at, or a sale-badge app fighting native Liquid. DIY-first: prove admin compare-at vs theme price blocks vs CSS vs apps; repair the live product and collection templates; retest on the live storefront. Distinct from quantity breaks / volume discount / Buy X Get Y missing, countdown / sale timer not showing, announcement / promo bar missing, typed discount codes not applying, and free shipping progress bar missing. No earnings claims, no invented case studies.
Nico at Latch AI Ops · Sep 8, 2026 · ~12 minute read
Buy the 72-hour install — $997Quantity breaksDiscount codesMerchant FAQ
01
Compare-at / strikethrough / sale badge missing — not quantity breaks, not countdown, not announcement bar, not discounts, not free shipping bar.
Several “sale UI” controls can look like “the strikethrough price is missing.” They do not share a settings panel. This page is only when a compare-at / strikethrough / was-now price or sale badge never appears on a PDP or collection card that should be on sale (theme price blocks, variant.compare_at_price, CSS, apps). Quantity break / volume discount / Buy X Get Y tier tables are shopify-quantity-breaks-not-showing. Countdown / sale timers are shopify-countdown-timer-not-showing. Announcement / promo bars are shopify-announcement-bar-not-showing. Typed discount codes not applying at checkout are discount-code-not-applying. Functions automatic discount math with no sale-badge goal is shopify-functions-discount-not-applying. Free shipping progress bars are shopify-free-shipping-bar-missing. Markets currency / wrong country price is shopify-markets-currency-wrong.
02
Prove admin compare-at vs theme price blocks vs CSS vs sale-badge apps on a live PDP and collection.
Open one product that should be on sale on the live storefront (not only Theme editor preview) and also open a collection that lists that product. Capture four proofs before you edit themes or install another badge app:
- Admin → Products → the variant: Price and Compare at price. Compare at must be filled and greater than Price. If Compare at is blank, equal, or lower, native Liquid will not render a strikethrough — no theme toggle can invent one.
- Theme Customize → Current theme → product template this SKU uses: Product information / Price block — Show compare-at price / Show sale badge / Show unit price as your theme labels them. Collection card / product card section: same price snippet settings.
- View-source or DevTools: does .price--on-sale, .price__compare, s.compare-at-price, or .badge--sale exist in the DOM but with display:none / opacity:0 / color matching background? That is CSS, not empty compare_at.
- Theme settings → App embeds: any Sale badge / Discount badge / Compare price app on Current? Two badge apps, or a badge app plus a custom Liquid price block, often blank each other.
If you only tested a discount code at checkout, a countdown widget, or a free-shipping bar, you are on the wrong playbook. If Markets / country switcher shows a different currency with no strikethrough, prove domestic first, then chase shopify-markets-currency-wrong only when the domestic PDP already shows compare-at correctly.
03
Variant Compare at price empty, Markets price list override, or compare_at ≤ price.
Native Shopify strikethrough price is driven by variant.compare_at_price (and product-level compare-at when variants inherit). Bulk CSV imports that leave Compare at blank, Shopify Flow / scripts that clear it after a sale ends, B2B / Markets price lists that publish a market price without a market compare-at, or a “sale” that only lives as an automatic discount with no Compare at field — all produce a clean Price with no strikethrough, even when marketing copy says “50% off.”
Fix path: Products → open each on-sale variant → set Compare at price higher than Price → Save. For Markets, open the market’s price list / catalog and set compare-at for that market, not only the primary market. Retest the live PDP and a collection card. If the checkout total is discounted but storefront never had a compare-at, that discount path is discount-code-not-applying or shopify-functions-discount-not-applying — different from a missing strikethrough UI. B2B catalog blank prices are b2b-catalog-not-showing.
04
Product / collection theme price blocks hide compare-at or sale badge on Current.
Dawn / OS 2.0 themes and most paid themes expose Price block settings: Show compare-at price, Show sale badge, Show unit price, Sale badge text. Those can be toggled off on the live product template, enabled only on a draft theme, present on the default product.json but missing on an alternate template this SKU uses, or stripped from the collection card / featured collection section so PDP looks correct while grid cards show only the sale price with no strikethrough.
Fix path: Customize Current theme → open the product template this SKU uses → Product information → Price (or equivalent) → enable Show compare-at / Show sale badge → Save. Then open the collection template / product card section and enable the same price snippet. Publish Current. Retest live PDP + collection URL — not only the editor. Theme editor publish / save failures are theme-editor-publish-failing. Variant picker that updates image/ATC but not price is variant-picker-not-updating — chase that only when compare-at exists for the selected variant but the price block does not refresh.
05
CSS hides .price--on-sale / .badge, or a sale-badge app fights native Liquid.
Custom CSS, page builders, and “clean price” snippets often hide compare-at with rules like .price__compare { display: none}, .badge--sale { visibility: hidden }, or color matching the background. Sale badge / discount badge / “% off” apps inject their own badge while suppressing the theme’s native strikethrough — or two apps fight until neither renders. An App embed that only loads on draft, or a consent manager that holds marketing embeds, can also leave the badge blank while compare-at Liquid is present in the DOM.
Fix path: DevTools → Inspect the price node. If compare-at / badge markup exists, remove or override the CSS that hides it (theme Custom CSS, app CSS, or page-builder layer). Theme settings → App embeds: keep one sale-badge path — either native theme badge OR one badge app, not both. Disable the duplicate. Retest live PDP + collection. Generic App embeds failing across many apps is app-embed-not-loading. Trust / payment badges missing on cart (not sale %) are shopify-trust-badges-not-showing.
06
You tested quantity breaks, countdown, announcement bar, typed discounts, or free shipping bar instead.
Quantity breaks / volume discount / Buy X Get Y tiers missing is shopify-quantity-breaks-not-showing. Countdown / sale timer not showing is shopify-countdown-timer-not-showing. Announcement / promo bar missing is shopify-announcement-bar-not-showing. Typed discount codes not applying is discount-code-not-applying. Functions automatic discount not applying is shopify-functions-discount-not-applying. Free shipping progress bar missing is shopify-free-shipping-bar-missing. Bundle builder / FBT missing is shopify-bundle-builder-not-showing. Markets currency wrong is shopify-markets-currency-wrong.
The only honest test for this page: compare-at / strikethrough / was-now price or sale badge is missing on a PDP or collection card that should be on sale — fixable with filled variant.compare_at_price (and Markets compare-at), theme price / sale-badge blocks on Current product + collection templates, CSS that does not hide sale classes, and one non-fighting badge path — not quantity breaks alone, not countdown alone, not announcement bar alone, not typed discounts alone, not free shipping bar alone. Capture admin compare-at + theme blocks + CSS + apps, fix the path. Anything else is a different product.
07
When to stay DIY vs pay $997.
Stay DIY if Compare at is filled correctly, theme price / sale-badge blocks are on Current for product + collection, CSS is not hiding sale classes, and one badge path is live — and the strikethrough / sale badge now shows on a live PDP and collection card. That is ordinary Shopify admin + theme work.
Pay $997 when the gap is wiring: lead capture, ops alerts, and a checkout-ready workflow on the stack you already pay for, installed in 72 hours after collaborator access lands. Latch does not sell an earnings, AOV, or conversion-lift number. Latch does not rebuild your theme’s price Liquid as a design agency. One live store. Clock starts when collaborator access is in.