When abandonment isn't abandonment
The default explanation for a high cart-abandonment rate is some combination of: shipping cost too high, copy too weak, checkout too long, prices not competitive. All of those are real. None of them cause sudden spikes.
A sudden jump in abandonment, from 68% to 78% over a weekend, is almost never a marketing problem. It's a bug. A step in your checkout that worked yesterday silently broke for a slice of your traffic, and your analytics aren't built to tell the difference between "customer changed their mind" and "customer couldn't complete the step."
Here are the five most common silent bugs that show up as abandonment in your dashboards. If your rate spiked recently, one of these is likely the cause.
1. The payment form fails on iOS Safari
Stripe.js, Shop Pay, Apple Pay, and most other payment SDKs are sensitive to Safari's stricter cross-origin and cookie policies. After a Shopify theme update, a new app install, or a minor Stripe SDK version bump, the payment iframe can silently fail to load on iOS Safari.
What the customer sees: a blank space where the payment form should be, or a never-loading spinner. What you see: a normal-looking checkout-started event in analytics with no corresponding completion. iPhone Safari is 40-60% of mobile traffic for most DTC brands. Half of mobile silently broken looks identical to "abandonment is up."
How to spot it: open your store on an actual iPhone (not just Chrome's mobile emulator, they behave differently) and walk through checkout. If the payment form doesn't render, you've found it.
How to fix permanently: schedule a real iOS-viewport checkout test that runs hourly, so the next time this breaks you know within an hour instead of from Monday's revenue dashboard.
2. A promo code stops applying for some segments
You launch a campaign with code SUMMER25. It works for the first week. On a Tuesday morning, a discount app updates and the code's eligibility rule, usually "minimum subtotal $X" or "first-time customers only" or "specific collection", silently changes.
Now the code applies for some customers but not others. The ones who don't qualify see "invalid code" or full price, and the worst part is they assume you're misleading them. They abandon, and they also don't come back.
The signal: refund tickets two days later asking why their code didn't work. By then you've lost a week of conversion on your headline promo.
How to spot it: test each of your top 3 active promo codes weekly. Confirm the discounted total is correct, not just that the code "applies."
3. Shipping calculator errors on certain regions
Most stores never test international shipping flows because they assume they work. A third-party shipping-rate app starts returning an HTTP 500 for one country or zone, and orders to that region quietly stop.
Your blended conversion looks normal because 85-90% of your orders ship to the same 2-3 regions. You're losing 100% of one segment, but it's small enough that the overall number barely moves. Until you look at country-level conversion data, which you probably don't.
How to spot it: add a test address from each region you ship to and confirm shipping rates load. If you ship to 10 countries, test all 10 quarterly.
4. Address validation rejects valid inputs
A new address-validation app. Loqate, Smarty, Postal Code Validator, rolls out a tighter ruleset. Apartment numbers, PO boxes, military addresses (APO/FPO), or international postal-code formats start getting rejected.
The customer sees "please enter a valid address" with no clear hint of what's wrong. They retype, fail again, retype, abandon. Your analytics show "lots of starts without completes." Address-step is rarely tracked granularly enough to spot the loop.
How to spot it: test checkout with an APO address, a PO box, a postal code from a country you don't ship to often (UK, Australia, Germany), and an apartment number with a suite letter. If any one of those fails, your validator is too aggressive.
5. 3D Secure / SCA flow times out
EU and UK customers hit the 3D Secure verification step, which redirects to their issuing bank for verification. If the redirect URL is wrong, the popup is blocked, or the callback fails, the customer is either left on a stalled page or bounced back to checkout with no order.
From Stripe's side: a payment_intent.requires_action event that never confirms. From the customer's side: a feeling that their bank declined them, when actually the flow just broke. They leave thinking the problem is on their end.
This bug disproportionately hits European traffic under PSD2, but is increasingly relevant for US stores using SCA-required cards.
How to spot it: test with Stripe's test card 4000 0027 6000 3184 (always triggers SCA). Complete the flow end-to-end. If the redirect, popup, or final confirmation fails, your 3D Secure handling is broken.
How to diagnose your own abandonment in 5 minutes
If you skimmed this whole post nodding along, your next move is concrete:
- Test on iOS Safari first. Real device, not the desktop simulator.
- Apply your top 3 promo codes and confirm the discounted total is right.
- Add an address from each of your top 3 shipping zones.
- Use Stripe's SCA test card to verify the 3D Secure flow completes.
- Compare your screenshots to a known-good run if you have one.
If any step fails, you have a real bug, not an abandonment problem. Fix the bug, and your abandonment rate will drop on its own without you touching a single piece of marketing copy.
Don't want to run this checklist manually every week? Tracefox automates it, scheduled checkout tests across every viewport, with alerts the moment a step fails.
What "high abandonment" actually means
A 70% abandonment rate is the industry baseline (Baymard Institute tracks it across 49 studies). Mobile is closer to 85%, desktop closer to 60%. If your store is within those ranges, you have a normal funnel and your levers are marketing ones: better product images, clearer shipping cost upfront, fewer required form fields, trust signals.
If your store is suddenly 5+ points worse than it was last month, you have a bug. Test the checkout flow before you A/B test the copy.
Tracefox runs scheduled checkout tests on real headless Chrome, desktop, mobile, tablet, and alerts you the moment a step breaks. Start your free trial and have your first test running in under 5 minutes.