Conversion
How to reduce cart abandonment in WooCommerce
Almost every guide on this subject opens with the same 70% statistic and then lists twenty fixes in no particular order. Here are the actual ranked reasons people abandon, what each one is worth, and the two highest value fixes, neither of which needs a plugin.
What this article covers
- The 70% figure is real but misleading. Baymard's documented average is 70.22% across 50 studies, and 42% of shoppers abandon because they were only browsing. That part is not yours to fix.
- Cost is the whole ballgame. Extra costs account for 40% of abandonments. Everything else on the list is smaller, and most of it is downstream of the same problem.
- Fix them in cost order, not effort order. The cheapest change to make is rarely the one costing you the most orders.
- Recovery emails are the last step, not the first. They work on carts you failed to convert. Fewer failures beats better follow-up.
What the 70% number actually means
Every article on this subject opens with a scary percentage, so here is the accurate version. The Baymard Institute's documented average is a 70.22% cart abandonment rate, drawn from 50 separate studies. If your store is somewhere near that, you are normal.
The part almost nobody quotes is the next line. 42% of shoppers say they abandoned because they were just browsing and not ready to buy. Adding an item to a cart is how people bookmark things, compare prices and check delivery cost. Those carts were never orders. No template, no email sequence and no discount code converts a browsing session into an unplanned purchase at any rate worth chasing.
So what is actually addressable? Baymard's own estimate is that better checkout design alone would give the average large ecommerce site a 35.26% increase in conversion rate. That is a big number, and it is a fraction of the 70%, not the whole of it. The useful mental model: your abandonment rate is mostly window shopping, and underneath it sits a smaller, very fixable layer of self inflicted losses.
Chasing the headline number will make you miserable and will not tell you what to do on Monday. Chasing the ranked reasons will.
The reasons, ranked, with the WooCommerce fix for each
These are Baymard's figures for shoppers who were genuinely ready to buy, with the browsing segment excluded. Shoppers give more than one reason, so the column does not add to 100.
| Why they left | Share | Where you fix it |
|---|---|---|
| Extra costs too high (shipping, tax, fees) | 40% | Cart page and product page, not checkout |
| Delivery was too slow | 20% | Fulfilment, and stating dates earlier |
| Did not trust the site with card details | 19% | Checkout design and payment methods |
| The site wanted an account | 18% | One WooCommerce setting |
| Checkout too long or complicated | 17% | Fields and layout |
| Site had errors or crashed | 17% | Testing, especially on phones |
| Returns policy was not satisfactory | 13% | Policy, and showing it at checkout |
| Could not see or calculate the total up front | 12% | Order summary layout |
| Card was declined | 10% | Gateway settings and error copy |
| Not enough payment methods | 9% | Gateway list |
Source: Baymard Institute's list of abandonment reasons, US shoppers. The browsing segment is excluded from these figures.
Read that table once more and notice something uncomfortable. Four of the top five are not design problems at all. They are pricing, logistics, trust and account policy. A prettier checkout does not move any of them, which is the honest reason most checkout redesigns underwhelm.
Fix the cost surprise first, because it is 40%
A shopper adds a $40 item, reaches checkout, and finds $12 of shipping and a handling fee. They do not feel overcharged. They feel misled, which is a stronger emotion and a faster exit.
The fix is not to make shipping cheaper. It is to make it not a surprise. In order of how much they typically move the number:
- Put the shipping cost before the checkout. WooCommerce has a shipping calculator on the cart page under WooCommerce, Settings, Shipping, Shipping options. Turn it on, and turn on "enable the shipping calculator on the cart page". Shoppers who learn the cost at the cart do not abandon at payment.
- State delivery cost on the product page. Even a single line saying "Free UK delivery over 50, otherwise 3.95" does the job. It is the cheapest change on this list and one of the most effective.
- Set a free shipping threshold and say it out loud. Then tell the shopper how close they are: "spend 8 more for free delivery" converts better than a silent threshold, because it turns a cost into a goal.
- Kill the surprise fees. Handling fees, card surcharges and "processing" lines are the single most resented item at checkout. If you must charge them, put them in the product price.
- Show tax the way your market expects it. European shoppers expect prices to include VAT. Showing a price and then adding 20% at checkout is a cost surprise even though nothing was hidden.
Do not fix this at checkout. The instinct is to make the checkout summary clearer. The 40% do not need a clearer summary, they need the information earlier. By the time a shopper is on the checkout page, the surprise has already happened and a well designed total is just a well designed piece of bad news.
Stop making people create an account
18% of ready to buy shoppers abandon because a site wanted them to register. This is the highest ratio of damage to effort on the entire list, because in WooCommerce it is a checkbox.
Go to WooCommerce, Settings, Accounts & Privacy. Tick "allow customers to place orders without an account". That is guest checkout enabled.
Two follow ups that matter almost as much:
- Offer the account after the order, not before it. "Create a password to track this order" on the confirmation page converts far better than a wall in front of the payment button, because by then the buyer has a reason to want one. WooCommerce can create the account at checkout with a single optional tick.
- Do not confuse guests with a login form. A prominent "returning customer? Log in" prompt at the top of checkout makes first time buyers feel they are in the wrong place. Keep it present but quiet, on the same row as the section heading rather than as a banner across the form.
If you already turned automatic account creation on and never checked what it does to the buyer's journey afterwards, test it end to end. A forced account can also change where the shopper lands after paying, which is a quiet way to lose the confirmation page entirely.
Make the total visible, and make it calculable
12% abandon because they could not see or work out the total cost up front. This is a layout problem, and on mobile it is nearly universal.
On a desktop checkout the order summary sits in a sidebar and stays on screen. On a phone it collapses behind a "show order summary" bar, and the total goes with it. The shopper now has to tap something to find out what they are about to pay.
- Keep the total on the collapsed bar. Hide the line items if you must, never the number.
- Put the amount on the button. "Pay 84.50" beats "Place order" because it answers the question at the exact moment it is being asked.
- Show the total on every step if you use a multi step checkout. See our guide to multi step checkouts for the rest of that argument.
- Never let the total change after the last screen. A total that moves at the payment step is a cost surprise wearing a different hat.
Trust, cards and the 19% who did not believe you
19% did not trust the site with their card details. That is a larger number than "checkout too long", and it is rarely what store owners work on. The research on what actually moves it, including the uncomfortable finding about trust badges, is in why shoppers do not trust your store with their card.
Trust at checkout is built from small, boring, specific things:
- Card fields that look like the rest of the page. A default, unstyled payment iframe dropped into a designed checkout reads as a third party bolt on, which is exactly the feeling you are trying to avoid.
- Recognisable payment marks. The card logos and the wallet buttons your buyer already uses do more for trust than any badge you can buy.
- Your returns policy, linked at the payment step. 13% abandon over returns. Most of them never found the policy; they assumed the worst.
- A real business identity. A contact page with a human address, and a support route that is not a form into the void.
- No mystery at the last moment. Unexpected redirects to a differently branded payment page cost more orders than they save in integration work.
On declined cards and missing methods. 10% hit a decline and 9% wanted a method you did not offer. Both are gateway decisions rather than design ones, but the copy is yours: a decline message that says "your card was declined, try another card or use PayPal" recovers orders that "an error occurred" throws away. Read your gateway's failure text once. It is usually terrible, and it is usually filterable.
The 17% you cannot see: errors and phones
17% abandoned because the site errored or crashed. Store owners consistently rate this the least likely reason on the list, because their own checkout works fine when they test it, on their own laptop, with their own saved address, on a fast connection.
Mobile checkout defects are silent. A button that has collapsed to zero width in a flex row is present, visible, and untappable. A sticky pay bar sitting under the keyboard looks fine until you focus a field. Neither throws an error, neither appears in a log, and neither shows up on a desktop browser dragged narrow.
The ten minute audit that finds most of them is in why your WooCommerce checkout breaks on mobile. The short version: use a realistic cart with long product names, walk all the way to the payment step on a real phone, and place one real order with a real card before you believe any of it.
Only then, shorten the form
A long or complicated checkout is 17%. It is worth fixing. It is also the thing every guide tells you to do first, which is why so many stores strip fields, see nothing happen, and conclude that checkout optimisation is a myth.
When you do get here, the useful moves are narrow:
- Remove the fields that earn nothing. Phone, company and address line 2 are the usual three. The working snippet, and the four fields that will break your shipping and tax if you touch them, are in how to remove or edit WooCommerce checkout fields.
- Make errors appear next to the field that caused them. One error summary at the top of a phone screen means scrolling to find out what is wrong, and scrolling is where people leave.
- Set the autocomplete and inputmode attributes so the browser can autofill and the right keyboard appears. It is the cheapest measurable win in mobile checkout.
- Consider address autocomplete if you sell physical goods. It collapses five typed fields into one interaction.
How to measure any of this without fooling yourself
Ecommerce conversion moves for a dozen reasons in any fortnight. If you change your checkout on Tuesday and the number rises on Friday, you have learned nothing. It is also worth knowing what a normal rate looks like before judging your own, and the published benchmarks are less helpful than they appear: what is a good conversion rate for a WooCommerce store?
- Measure where people leave, not just that they left. A single abandonment rate is a symptom. Drop off per step is a diagnosis. A big fall at the shipping step is almost always cost, not design.
- A/B test it if you can. Running both versions against live traffic at the same time is the only method that controls for seasonality and traffic mix.
- Segment by device. A change that helps mobile can hurt desktop, and a blended number hides both.
- Give it enough orders. A week of data on a small store is noise wearing a suit. If you get 40 orders a month, a 10% lift is four orders and you will never see it in a fortnight.
- Watch session recordings before you theorise. Twenty recordings of real checkouts will tell you more than any article, this one included.
The order to actually do this in
Ranked by expected orders recovered per hour of work, which is a different ranking from the one most guides give you.
- Turn on guest checkout. One setting, 18% of abandonments in scope.
- Show delivery cost before checkout. Product page line, cart calculator, or both. Largest single reason on the list.
- Walk your own checkout on a real phone, to the payment step, with a realistic cart. Fix whatever you find. You will find something.
- Put the total where it cannot be missed, including on the collapsed mobile summary and on the button.
- Remove the two or three fields that earn nothing, and put errors next to their fields.
- Add the payment methods your market expects, and fix your decline copy.
- Link your returns policy at the payment step.
- Only now, consider abandoned cart emails. They recover a share of the carts you still lose. Everything above reduces how many there are to recover, which is strictly better.
The one to be sceptical about. Exit intent discount popups appear on most lists like this one. They do recover some carts, and they also teach your repeat buyers to abandon deliberately, because that is how you get the code. If you run one, cap it to first time visitors and watch your margin, not just your conversion rate.
See where your shoppers actually stop
OptiCheckout's analytics name the step people leave at rather than giving you one abandonment number, and every template is rendered from the real plugin so you can walk it on your own phone first.
Read next
MobileWhy your WooCommerce checkout breaks on mobile
Five measurable failures: the untappable button, the trapped sticky bar, horizontal overflow, the hidden total and the wrong keyboard. With a 10 minute audit.
12 min read Checkout fieldsHow to remove or edit WooCommerce checkout fields
The working snippet, the four fields that are safe to remove, the four that will break your shipping and tax, and why the same code does nothing on blocks.
11 min read Checkout designHow to customise the WooCommerce checkout page
The four routes, what each one can and cannot change, and the version drift trap that silently breaks template overrides.
12 min read