You set up a discount, tested it, and the order total was correct. But the product page still shows the full price, with no struck-through original. Nothing is broken. Shopify has two separate ways to make something cheaper, and they show up in different places.
The two mechanisms
| Discounts (codes and automatic) | Changing the price | |
|---|---|---|
| Where it applies | At checkout, on the cart total | On the product itself |
| What the shopper sees browsing | Full price | The sale price |
| Struck-through original | No | Yes, if compare-at is set |
| Shows in collection and search results | No | Yes |
| Needs to be undone afterwards | No — it expires | Yes — prices stay where you put them |
When a discount is the right tool
- A code you send to a specific list, where the offer is not meant to be public.
- A cart-level rule, such as spend over an amount or buy one get one.
- A short campaign where you do not want the price history of the product to move at all.
When you need an actual price change
- Shoppers have to see the sale price while browsing, before they reach checkout.
- You want the struck-through compare-at price that makes a discount legible.
- The promotion is the reason people are visiting — a seasonal sale, a clearance, Black Friday.
The tradeoff
A discount expires by itself. A price change does not. Whatever puts the price down has to put it back, and that step is the one that gets forgotten.
Why the compare-at price matters
Lowering a price on its own reads as a cheaper product, not as a sale. The compare-at field is what renders the struck-through original next to it. Skip it and shoppers see a lower number with nothing to compare against — the discount is invisible even though it is real.
The part that costs money
Because a price change is permanent until something changes it back, the end of the promotion carries the risk. Restoring by hand means finding the original price of every variant, including the compare-at value, and typing it back correctly. A spreadsheet export taken before the change is the minimum insurance; a recorded snapshot per variant is better, because it does not depend on anyone remembering to export.
How to decide
- Ask whether the shopper needs to see the discount before checkout. If no, use a discount code or automatic discount and stop here.
- If yes, plan a price change — and decide how it comes back before you decide how it goes down.
- Record the original price and compare-at price of every affected variant, somewhere outside the tool making the change.
- Set the compare-at price so the sale reads as a sale.
- Write down the exact end time in the store timezone, and who is responsible for confirming prices returned.