Most abandoned carts are a pricing surprise, not a change of mind
People who add to cart have already decided they want the product. Something between that moment and the payment step changed their mind, and it is usually a number they did not expect.
Shipping is the classic one. A shopper adds a 30 dollar item, reaches the cart, and finds 12 dollars of delivery. The item did not get worse. The deal did. The same is true of taxes or duties added late, a handling fee, or a minimum order charge that appears at the end.
The second cause is friction. A forced account signup, a long form, an address field that rejects a valid postcode, a coupon box that sends people away to search for a code they never find.
The third is doubt. No delivery date, no returns information, no sign that anyone else has bought this, no visible way to contact a human. The shopper is not annoyed, just unsure, and unsure people leave to think about it.
A fourth group never intended to buy today. They are using the cart as a wish list or a price comparison tool. You will not win all of them, and chasing that group with discounts costs margin you would have kept.
So the work splits neatly. Fix the surprises and the friction on the site. Recover the doubters and the browsers with messages afterwards.
Put the whole cost on the product page, before the cart
The cart is the wrong place to learn the price. By the time a shopper is there, they have made a decision based on incomplete information, and any addition feels like a bait.
Show the shipping cost on the product page. Where cost depends on location, show the common case and the rule, for example a flat rate under a threshold and free above it. Detecting the country and showing the right figure is better still.
Show the delivery window as a date rather than a duration. Arrives by Thursday is a promise a shopper can plan around. Two to five business days requires arithmetic and leaves doubt.
Show the free shipping line and the distance to it. A shopper who knows they are 8 dollars away from free delivery has a reason to add something, which turns a leak into a larger order.
Show the returns terms in one line near the buy button. Not a link to a policy page, one sentence that answers how long they have and who pays.
And show stock honestly. If an item ships later than the rest of the cart, say so on the product page rather than in the confirmation email. Late news is the expensive kind.
Every one of these moves information earlier. Nothing is hidden that was not going to come out anyway, so the only thing you lose is the shopper who was never going to accept the real total.
Cut the checkout down to what you genuinely need
Every field is a chance to leave. Open your own checkout on a phone, on mobile data, and count the taps between the cart and the confirmation. That number is the target.
Offer guest checkout. Account creation can be offered after the order, when the customer has already got what they came for and creating an account is a convenience rather than a toll.
Remove fields you do not use. Company name, second address line, phone number when you never call, a how did you hear about us question that belongs in a post purchase survey.
Use address autocomplete, and make sure it accepts the formats your customers actually have. A validation rule written for one country rejects perfectly good addresses from another.
Offer the payment methods your buyers use, including the wallets that fill in details automatically. For many stores, that single change removes the most typing from the process.
Make errors specific. This card was declined by your bank is useful. Something went wrong is not.
Keep the cart visible. A shopper who cannot see what they are buying while they type their details starts to wonder whether the price is still right.
Then test the whole thing on a real device, on a slow connection, with a card that fails, and watch how the page behaves. Most checkout leaks are found in five minutes this way and never appear in an analytics report.
Recover what still leaks, without training people to wait
After the site work, a recovery sequence picks up the rest. Three messages is usually enough, and the first one matters most.
Send the first within an hour or two, while the decision is still warm. Keep it simple: the product image, the reason someone chose it, the delivery promise and a link straight back to the filled cart. No discount. Many people simply got interrupted.
Send the second the next day and answer the objection instead of paying to remove it. Delivery timing, returns, sizing help, a note about the warranty period, an answer to the question customer service hears most about that product.
Send the third a couple of days later, and this is the only place a small incentive belongs, if it belongs anywhere. Free shipping is usually cheaper than a percentage off and feels like the removal of the original obstacle.
Be careful with the pattern though. If every abandoned cart gets a code within an hour, your regular customers learn to abandon on purpose. Send the incentive late, not always, and never to people who buy at full price anyway.
Add SMS where you have proper consent, because it reaches people who never open email. Keep it to one message, keep it short, and make the link go to the cart rather than the homepage.
Then measure recovery separately from the site fixes, so you can tell which of the two is doing the work.
Worked example, not a result
Where a hundred carts go
- Carts created
- 100
- Reached checkout
- 60
- Completed payment
- 35
- Left at the cart over shipping cost
- 25
- Left inside checkout on a phone
- 15
- Recovered by the first email
- 5
- Recovered by later messages
- 3
Worked example, not a result