- Magento is different: checkout is an uncached JavaScript application, so a large share of abandonment is technical, not cosmetic.
- Errors cost as much as friction: 17% of shoppers abandon because the site errored or crashed - the same share as "checkout too long".
- Work technical-first: console errors, shipping/totals call timings, stale carts, and gateway logs before any layout change.
- Then the experience layer: form fields, guest checkout, cost transparency, and real-device mobile testing.
- Recovery emails come last: fix the wall before asking shoppers to walk into it again.
Most advice on this topic is written for Shopify. It tells you to enable guest checkout, shorten your forms, and show shipping costs earlier. That advice is correct, and it is also not where most Magento stores are losing money.
Magento 2 checkout is a JavaScript application. It is not cached. It makes live API calls on almost every keystroke in the address form. It can be extended by third-party modules that inject themselves into the same page. That combination produces a category of failure that Shopify stores mostly don't have: checkout that is technically broken for some shoppers, silently, without anyone on your team knowing.
Baymard Institute's most recent abandonment survey puts numbers on this. Setting aside people who were just browsing, 17% of shoppers say they abandoned because the website had errors or crashed. That is the same share as "too long / complicated checkout process," the problem every conversion blog writes about. Nobody writes about the errors.
So this article runs in the order we actually work in: measure, then check the technical layer, then the experience layer, then recovery.
What Counts as a Normal Abandonment Rate?
The most defensible benchmark is Baymard's 70.22%, which is a meta-average across 50 separate studies rather than one dataset. Individual studies in it range from the mid-50s to the low 80s. Mobile runs materially higher than desktop in every dataset that splits by device.
Treat that number as context, not a target. It is an average across every industry and every store size, and your own trend over time tells you more than your position against it.
Before you compare anything, check that you are measuring the same thing the benchmark measures. Cart abandonment is one minus (completed orders / carts created). Checkout abandonment is narrower: it only counts people who reached checkout. The two get mixed up constantly, and a "70% abandonment rate" that turns out to be measuring cart-level behaviour against a checkout-level benchmark will send you chasing the wrong problem.
Where in the Funnel Are People Actually Leaving?
Magento's default flow is cart, then Shipping, then Review & Payments, then success. Four points to measure between, and each one has a different cause when it leaks.
Magento's built-in reports won't give you this. They report on orders that exist, not on sessions that failed. You need front-end event tracking. In GA4 that means begin_checkout, add_shipping_info, add_payment_info, and purchase, fired from the checkout components rather than inferred from URL changes - Magento checkout is a single URL, so page-based tracking will show you nothing.
Once you have the four numbers, segment them. Mobile against desktop. New against returning. Guest against logged in. Payment method against payment method. And browser against browser, which most people skip and which is where technical faults show up: a step that converts at 60% in Chrome and 30% in Safari is not a UX problem.
If you can add session recordings and JavaScript error logging on checkout, do it. On Magento specifically, the error log is worth more than the heatmap.
The Technical Checks, Which Come First
Is checkout slow because it can't be cached?
Full Page Cache does not apply to cart or checkout. Every other page on your store can be served from Varnish; these two hit PHP and the database on every request. So checkout speed is a direct read on your backend health, with no caching layer hiding the problem.
That also means checkout is the page most likely to degrade under traffic. A store that feels fine on a normal Tuesday can have a checkout that crawls during a promotion, exactly when it matters most.
Are the shipping and totals calls firing too often?
This is the single most common Magento-specific performance fault we find.
Magento recalculates totals through estimate-shipping-methods and totals-information as the shopper fills in their address. With a clean setup this is barely noticeable.
With many shipping methods, complex tax rules, or a live carrier rate API in the mix, each call can take seconds - and they fire repeatedly. The shopper sees a spinner, then another spinner, then a total that changes.
Open the network tab, fill in a real address, and count the calls and their timings. If you see multiple multi-second requests for a single address entry, you have found real money. Live carrier rate lookups are the usual culprit; caching or restricting them is often a same-week fix.
Is a third-party extension breaking the place-order button?
Extensions modify checkout through checkout_index_index.xml layout updates and Knockout component overrides. Several extensions doing this at once is normal on a mature Magento store, and they do not always coexist.
The failure mode that costs the most is the quiet one. A JavaScript error thrown by one module halts execution, and the place-order button stops responding. No error message. No support ticket, because the shopper assumes their card was declined and leaves. This can run for months.
To check: open the browser console on checkout and complete a full order, on desktop and on mobile, in Chrome, Safari, and Firefox. Any uncaught error during that flow is a candidate. Then do it again with each of your payment methods, because payment components are the most common source.
Is the cart showing the wrong contents?
Magento holds cart state client-side in the customer-data local storage sections, refreshed through private content invalidation. When that invalidation doesn't fire correctly - often after a cache flush, a deployment, or behind an aggressive CDN configuration - shoppers see a stale cart. Sometimes an empty one.
An empty cart is a guaranteed abandonment and it will never appear as a checkout problem in your analytics, because the shopper never reaches checkout. Test it: add to cart, wait, navigate around, come back. Then repeat immediately after a deployment.
Are payment failures actually declines?
Pull your gateway logs and split hard declines from technical errors: timeouts, 3D Secure redirect failures, iframe load failures, session expiry mid-authentication.
Declines are a payments problem. Technical errors are your problem, and they are usually concentrated in one browser or one device class. 3DS redirect handling in embedded browsers - the in-app browser in Instagram or Facebook - is a frequent offender and one nobody tests.
These five checks are the core of the technical pass we run in every Magento checkout optimisation engagement. If you would rather have a second pair of eyes on it, a free checkout audit covers the same ground and tells you which of these faults your store actually has.
Then the Experience Checks
How many form fields are you actually showing?
Baymard's benchmark database puts the average US checkout at 23.48 form elements by default, 14.88 counting only the fields. Their usability testing says an ideal flow can run at 12-14 elements, or 7-8 fields.
Magento's defaults push you toward the high end. Telephone is required out of the box. Company appears for many configurations. Region behaves differently by country. Each of these is configurable in the address attribute settings, and each one you remove is a field 100% of your shoppers no longer fill in.
Go through your live checkout and write down every field. Then justify each one against the order you need to fulfil. Most stores find two or three they cannot justify.
Are you forcing account creation?
Guest checkout lives at Stores > Configuration > Sales > Checkout > Allow Guest Checkout. Confirm it is on, and confirm it is on for every store view, because per-view overrides get set and forgotten.
Baymard's data puts forced account creation at 18% of abandonments. But the fix isn't to abandon accounts. It's to move the decision after the order: let people check out as a guest, then offer to save their details on the confirmation page, when they have already got what they came for.
Also check whether Terms and Conditions is enabled. It adds a required interaction, and it is often switched on for a legal reason nobody can now recall.
Can shoppers see the real total before the final step?
Extra costs are the largest fixable reason for abandonment in Baymard's data at 40%, and "couldn't see or calculate the total order cost up-front" adds another 12%. People don't object to paying for shipping. They object to finding out about it at the end.
Magento gives you a shipping estimator in the cart, which most stores leave switched off or half-configured. Turn it on. The catch is that it needs a postcode to return anything useful, so pair it with a clear free-shipping threshold and a plain statement of your rates on the product page. The goal is that nothing about the total is a surprise at the review step.
Do you have the payment methods your shoppers expect?
Only 9% cite missing payment methods, so this is rarely the biggest lever - but it is unusually easy to check. If you sell into Europe, local methods matter far more than they do in the US: iDEAL in the Netherlands, Blik in Poland, Klarna across the Nordics, Bancontact in Belgium. Segment your conversion rate by country and look for the outliers.
Express options like Apple Pay and Google Pay do something structurally useful here: they skip the address form entirely, which means they route around several of the problems above at once.
Is the mobile experience the real problem?
Mobile abandons materially higher than desktop everywhere. The default Luma theme's checkout is functional but not good - the order summary collapses, the sticky elements fight the mobile keyboard, and tap targets in the address form are tight.
Test on a real device on a real mobile connection, not the browser device emulator. Emulators do not reproduce the keyboard, the network, or the in-app browsers a large share of your mobile traffic actually arrives in.
Do shoppers trust you enough to enter a card?
19% abandon because they didn't trust the site with their card details, and 13% because the returns policy wasn't good enough. Both are usually solved by information rather than badges: visible returns terms, a real delivery estimate, a contact route that looks like it reaches a human, and a checkout that looks like it belongs to the rest of the site.
A checkout that loads slowly or glitches reads as untrustworthy, whatever badges you put on it. Which is why the technical work comes first.
Recovery Emails Come Last
Abandoned cart flows work - they are consistently the highest-yielding automated flow type. But they recover a small share of a big number, and their effectiveness has been declining as inbox privacy changes bite.
More importantly, recovery treats abandonment as inevitable. If 17% of your abandonment is caused by errors, an email is asking someone to come back and hit the same wall again.
Fix the wall. Then send the email.
What to Do in What Order
- Instrument the funnel properly, split by device and browser.
- Complete a full test order with the console open, on every browser and every payment method.
- Split your gateway's technical errors from its genuine declines.
- Profile the shipping and totals calls in the address form.
- Count your form fields and remove the ones you cannot justify.
- Confirm guest checkout is on for every store view.
- Make the total cost visible before the final step.
- Test on a real mobile device on a real connection.
- Then, and only then, start A/B testing layout changes.
Steps 1 through 4 usually take a week and usually find something. Steps 5 through 8 are configuration and content, not development. Step 9 is where most people start, which is why most people spend six months testing button colours on a checkout that is quietly broken in Safari.
How to Know It Worked
Track checkout completion rate as your primary number, because it isolates the part you changed. Watch cart abandonment rate and revenue per visitor alongside it, and keep the device and browser splits - an overall number that stays flat can be hiding a mobile gain and a desktop loss.
Baymard's own conclusion, from ten years of testing large sites, is that the average large e-commerce site can gain 35.26% in conversion rate through checkout design alone. That figure comes from sites like Walmart and ASOS, which have already run optimisation projects. If it holds for them, it holds for you.
Statistics sourced from Baymard Institute's cart abandonment research (2026): the 70.22% meta-average, checkout usability benchmarks, and reasons-for-abandonment survey data. Last reviewed September 2026.