Blog

Checkouts but no sales: 7 reasons Shopify checkouts don't convert

If your Shopify reports show sessions reaching checkout and then a much smaller number completing it, the cause is usually one of seven things. In rough order of how often they turn out to be the culprit:

  1. Shipping cost appears for the first time at checkout. The shopper had a total in mind and you just changed it.
  2. A discount code does not apply to what is in the cart. Minimums, collection exclusions and expiry dates all fail at the last step.
  3. A variant sold out between add-to-cart and payment. Shopify does not reserve inventory until payment begins.
  4. The payment method the shopper wanted is not offered. Local wallets and buy-now-pay-later are regional habits, not preferences.
  5. Address validation is rejecting them and the error is easy to miss. Postcode and state format mismatches are the classic case.
  6. Duties and taxes land at the end for international shoppers. A 20% surprise reads as a bait and switch even when it is legally required.
  7. They opened checkout to see the shipping price. This is not a leak. It is price discovery, and some of it is normal.

Six of those seven are things you configured, which means six of them started on a date. That matters more than the list itself, and it is what the last section of this post is about.

1. Shipping cost appears for the first time at checkout

This is the most common one, and the most fixable. A shopper builds a mental total from your product prices, gets to checkout, and finds £6.95 added. The absolute amount matters much less than the surprise: the same £6.95, stated on the product page, converts far better than £6.95 revealed at step three.

What to look for: a drop concentrated in the step between reached checkout and completed checkout, rather than earlier in the funnel, and worse on low-value carts where shipping is a large fraction of the total.

What people do about it: state shipping on the product page and in the cart, set a free-shipping threshold and show progress toward it, or fold shipping into the product price. Each of those is a change with a date, which is the point.

2. A discount code does not apply to what is in the cart

A shopper arrives from an email with SUMMER20, fills a cart, reaches checkout, types the code, and gets told it is not valid. They do not email you. They leave, and they are annoyed, because from their side you advertised a discount and then refused it.

The usual causes are a minimum order value they have not met, a collection or product exclusion they cannot see, a code that expired earlier than the campaign it was attached to, or a one-per-customer limit they already used.

What to look for: checkout abandonment clustered in the hours after a marketing send, and a code whose redemption count is far below the click count on the campaign that promoted it.

3. A variant sold out between add-to-cart and payment

Shopify does not reserve inventory when an item goes into a cart. It reserves at checkout, and only for a limited window. On a product moving quickly, or during a launch, a shopper can hold something in their cart for twenty minutes, reach checkout, and be told it is unavailable.

This one is worth isolating by variant rather than by product. A product selling well overall can have one size that is constantly hitting zero, and the aggregate conversion rate hides it completely.

What to look for: checkout failures concentrated on specific variants, and a correlation with restock and sell-out timestamps rather than with anything you did on purpose.

4. The payment method the shopper wanted is not offered

Payment preference is regional and habitual. A German shopper looking for a bank transfer option, a Dutch shopper looking for iDEAL, a Swedish shopper looking for Klarna, or a US shopper looking for one of the wallets they already have set up will often simply stop rather than type a card number.

What to look for: checkout completion rates that vary sharply by country in a way your traffic mix does not explain, and abandonment on the payment step specifically rather than earlier.

5. Address validation is rejecting them quietly

Address errors are the least glamorous item on this list and one of the most common. A postcode format that does not match the selected country, a state field required for a country where the shopper does not think in states, an apartment number in a field that rejects it: each produces an inline error that a shopper on a phone may not even see above the fold.

What to look for: shoppers who reach the payment step, do not complete, and never return. Unlike price objections, address failures produce no second visit, because the shopper believes the problem is them.

6. Duties and taxes land at the end for international shoppers

If you sell across borders and collect duties at checkout, an international shopper can watch their total rise by a fifth on the final screen. This is often legally correct and still reads as a bait and switch, because nothing earlier in the journey prepared them for it.

What to look for: international conversion far below domestic, concentrated at the final step, and worst in the markets with the highest duty rates.

7. They opened checkout to see the shipping price

Some proportion of reached checkout is not intent to buy. It is a shopper using your checkout as a shipping calculator, because you did not give them one anywhere else. This is worth naming because it sets a ceiling: no store converts 100% of checkouts, and chasing that number will make you do something stupid to your pricing.

The honest response is to make the information available earlier, which reduces both the abandonment and the reason for it, and then to stop worrying about the residue.

The question underneath all seven

Notice what six of these have in common. A shipping rate was edited. A discount was created with a minimum attached. A variant went out of stock. A payment method was switched off. A market was enabled with duties collection. Every one of them started on a specific day.

So the fastest diagnostic is not a list of possible causes. It is a date. If your checkout completion rate fell, the useful question is: what did I change in the week before it fell?

Most merchants cannot answer that question, and it is not their fault. Shopify’s store activity log holds only your last 250 admin actions, is view-only, cannot be exported, and is not connected to any chart. Shopify’s automatic chart annotations cover product publishes, theme publishes and app installs, not prices, discounts, inventory or variants. So the change log and the conversion chart live in different places and never meet.

That gap is the entire reason Clearstep exists. It records the changes you make (price, discount, stock, variant) and measures conversion in the 14 days after each one against the 14 days before, per product and per variant. And when a change did not get enough traffic to judge, it says “too few to compare” rather than handing you a percentage built on forty sessions.

It will not tell you why your checkouts stopped converting. Nothing honestly can. It will tell you what you changed and when, which is the part you cannot reconstruct from memory and the part that narrows seven possibilities down to one.

Know what you changed, and when.

Clearstep is pre-launch. One email on the day it lists on the Shopify App Store.

One email on launch day, with early-bird pricing. No drip sequence, no newsletter.