Why isn't my discount showing on the product page?

Shopify discount codes and automatic discounts apply at checkout, not on the product page — here's how to actually show a sale price where shoppers can see it.

discountspricingproduct-pagethemelegal-compliance

What's going on

A merchant launches a discount code or an automatic discount expecting customers to see a lower, crossed-out price on the product page — and nothing changes. The product still shows its regular price, the sale looks invisible until checkout, and customers who don't know a code exists never get the psychological nudge of seeing "was $40, now $32." It's a genuinely common source of frustration because Shopify's discount tools and its product-pricing display are two separate systems that don't talk to each other automatically.

Shopify's Discounts feature (codes and automatic discounts, found under Settings > Discounts in the Admin) recalculates the cart and checkout subtotal. It was built for promotional math at checkout, not for rewriting the price shown on a storefront page. Meanwhile, the visual "sale" treatment shoppers expect on the product page — a strikethrough original price next to a lower current price — comes from a completely different field: the variant's compare-at price.

Merchants who only set up a discount code, without also touching compare-at pricing, end up with a sale that's real at checkout but invisible everywhere else. Conversely, merchants who set a compare-at price get the visual sale treatment on the product page but need to double check they haven't also stacked an unrelated discount code on top, which can undercut the price further than intended or confuse the customer about what they're really paying.

Why it happens

Discount codes and automatic discounts are calculated as a checkout-time adjustment to the order subtotal. Shopify intentionally keeps this separate from the static price displayed on a product page, partly because a single product can be affected by multiple stacked or conditional discounts (cart-level, customer-specific, code-based) that only make sense to resolve once you know the full cart contents.

The feature that actually drives visible "sale" styling on the storefront — a strikethrough original price — is the compare-at price field on each product variant. Most current Online Store 2.0 themes (Dawn-based themes especially) render this automatically, but it has to be filled in deliberately; it isn't populated by creating a discount in the Discounts section.

Merchants often reasonably expect these two features to be linked because in everyday retail language a "discount" and a "sale price" mean the same thing. In Shopify's data model they don't: one is a checkout rule, the other is a product-level price attribute, and getting the visible result you want usually means setting both up correctly for your specific use case.

5 ways to fix it

1

Set (or bulk-set) the Compare-at price field

For each variant, enter the old price in "Compare at price" and keep your real selling price in "Price." Most Online Store 2.0 themes (Dawn and its derivatives) pick this up automatically and render a strikethrough original price plus a "Sale" badge on both the product page and collection grids — no app or code required. For a handful of products, do this from the product editor; for a whole catalog, use the bulk editor (select products in Admin > Products, click "Edit products") or export/re-import a CSV with an updated Compare At Price column.

2

Confirm your theme actually displays compare-at pricing

Not every theme shows the compare-at price by default, and some older or heavily customized themes strip it out of the price snippet. Open a discounted product in a private/incognito window and check the price markup. If the strikethrough isn't there, a theme developer needs to edit the price snippet (usually price.liquid or a price-related block) to reference the variant's compare_at_price and render it conditionally — this is a straightforward Liquid fix, not a rebuild.

3

Understand that discount codes and automatic discounts do not touch the product page price

Discounts created under Settings > Discounts (percentage, fixed amount, buy X get Y, or free shipping) are calculated at the cart and checkout subtotal — Shopify does not rewrite the price shown on the product page to reflect them. This trips up a lot of merchants: they launch a 20%-off code expecting it to show on the PDP, and it simply doesn't, because codes/automatic discounts and compare-at pricing are two separate systems. If you want the PDP itself to look discounted, the compare-at price is the only native way to do it; the code/automatic discount is a separate, checkout-time mechanism.

4

Add on-page messaging for active discounts if you truly need it

If you're running an automatic discount or a sitewide code and want shoppers to know about it before they reach checkout, use a theme announcement bar, a product-page text block, or a lightweight discount-messaging app to display something like "20% off applied at checkout." Keep this separate from the compare-at price so you don't double-discount or confuse customers about what the final price will be. Treat any popup or banner as informational messaging, not a substitute for accurate pricing — and only add one if the discount is genuinely sitewide or hard to notice otherwise; for a single product-level sale, the compare-at price alone is usually enough.

5

Audit your "was" price for accuracy before you publish it

Regulators in several markets (including the EU's Omnibus Directive rules on reference pricing and the FTC's stance on deceptive discounts in the US) require that a displayed "was" price reflect a genuine prior selling price, not an inflated number invented for the sale. Before bulk-setting compare-at prices, check your own sales history so the strikethrough price is defensible, and review your storefront's legal/policy pages to make sure sale terminology matches what you can actually prove if challenged.

Bottom line

There's no single Shopify setting that "turns on" discount visibility — compare-at price is the free, native tool for showing a strikethrough sale price on the product page, while discount codes and automatic discounts remain a checkout-time calculation unless you deliberately add messaging for them. Get the compare-at price and theme display right first; only reach for a discount-messaging popup app if your discount is sitewide, automatic, and genuinely easy for shoppers to miss otherwise — and always make sure the "was" price you show is one you can actually stand behind.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.