Availability for 2 new clients. Book a call →

· 16 min read

Why Customers Abandon Checkout: The Data, The Causes, and the Exact Fixes

69.99% average checkout abandonment rate — here is why it happens and how to fix it. Data from Baymard Institute. All 10 reasons with Shopify and WooCommerce fixes. Includes FAQ.

Ecommerce
Why Customers Abandon Checkout: The Data, The Causes, and the Exact Fixes

70% of shoppers who start your checkout never finish it. That’s the Baymard Institute’s number, tracked across billions of ecommerce sessions. The checkout abandonment rate — the percentage of initiated checkouts that don’t result in a completed purchase — averages 69.99% across ecommerce categories. The cart abandonment rate (which includes shoppers who never even begin checkout) runs slightly higher. Both numbers point to the same underlying problem: friction. The more important statistic is why that friction exists.

Because once you know the specific reasons, you can fix them. And the fixes are often simpler than you think — not redesigns, not new platforms, not an agency retainer. Most of them are configuration changes and copy improvements.

This article covers every major checkout abandonment reason with real data, the underlying cause, and the exact fix for Shopify and WooCommerce. I’ve also added EU-specific factors that are absent from most US-centric guides.


The Data: Why Customers Actually Abandon Checkout

Baymard Institute surveys thousands of shoppers annually and asks them why they abandoned a recent checkout. When you exclude the people who were “just browsing” (43% of abandoners who were never going to buy that session), the real reasons are:

Reason% of Checkout Abandoners
Extra costs too high (shipping, tax, fees)48%
Forced to create an account26%
Checkout process too long or complicated22%
Couldn’t see total cost upfront21%
Delivery was too slow19%
Didn’t trust the site with credit card info18%
Website had errors or crashed17%
Returns policy wasn’t satisfactory13%
Payment options not sufficient11%
Credit card was declined4%

Notice something about this list: most of these problems are self-inflicted. You designed the checkout. You chose whether to show costs upfront. You decided whether to require account creation. These aren’t market forces — they’re fixable decisions.

What is the main cause of cart abandonment? Unexpected costs — cited by 48% of abandoners. This is the single most impactful fix: show shipping, tax, and fees before the checkout page, ideally on the product page itself.

Why am I getting high abandoned checkout numbers specifically? If your analytics show abandonment concentrated at the account creation or payment step (rather than at cart stage), your problem is Reason 2 or Reason 6 below. Enable guest checkout and add local payment methods before any other fix.


Reason 1: Extra Costs Too High (48%)

Why It Happens

The shopper sees a €49 product. They click through to checkout. The order summary shows €49 + €7.95 shipping + €3.50 handling fee = €60.45. That’s a 23% price increase from what they expected. The mental accounting has already processed €49 as the price. €60.45 feels like paying twice.

This is the anchoring effect. The first price seen becomes the reference point. Every addition after that is a loss, not an expected cost.

The Fix

Option 1 — Build shipping into the price. Raise your product price by the average shipping cost and offer “free shipping.” Psychologically, €54 with free shipping converts better than €49 with €5.95 shipping — even though the total is the same. Shoppers anchor to the product price, not the total. This is well-documented in pricing psychology research.

Option 2 — Show the total before checkout begins. Display estimated shipping at the product page level (“Ships to Netherlands: €5.95”) or at cart stage before clicking to checkout. Kill the surprise.

Option 3 — Free shipping threshold. “Free shipping on orders over €75” creates an upsell mechanism and converts 65% of eligible shoppers into adding one more item rather than paying shipping (Shopify internal data). Set the threshold 20-30% above your current average order value.

Shopify Implementation

In Shopify Settings > Shipping and Delivery, configure shipping zones with transparent rates. For shipping estimation on product and cart pages, install an app like “Estimated Shipping” or “Ship-o-matic.” For the free shipping threshold, use Shopify’s native shipping settings or the theme’s cart drawer which shows progress toward the threshold.

WooCommerce Implementation

Use WooCommerce’s built-in “Shipping Calculator” on cart pages (enable in Shipping settings). The “WooCommerce Free Shipping Bar” plugin handles the threshold display. For transparent early cost display, configure shipping in Zones and Methods to ensure rates are accessible to the shipping calculator before checkout.

EU-Specific Note

Under the EU Consumer Rights Directive, you must display the total price including all taxes and charges before the customer confirms their order. Hidden or late-disclosed fees are not just a conversion problem — they’re a legal liability. Displaying VAT-inclusive prices from the start (required in most EU member states for B2C sales) eliminates the tax surprise.


Reason 2: Forced to Create an Account (26%)

Why It Happens

Account creation asks the shopper to do five things they didn’t plan to do: think of a username, enter an email, create and remember a password, potentially verify that email, and trust you with their data. For someone who just wants to buy one thing, this is an enormous friction-to-value imbalance.

There are also privacy concerns. In post-GDPR Europe, consumers are increasingly reluctant to hand over their email address for any interaction that isn’t necessary. Mandatory account creation reads as data harvesting, not service.

The Fix

Implement guest checkout. Full stop. This is the single highest-impact checkout change for most stores. Baymard data shows guest checkout implementation reduces forced-account abandonment from 26% to approximately 8%.

On Shopify: Settings > Checkout > Customer accounts. Set to “Accounts are optional.” This gives shoppers the choice without forcing it.

On WooCommerce: WooCommerce > Settings > Accounts & Privacy. Enable “Allow customers to place orders without an account.”

Post-purchase account creation: After the order is complete, ask the guest to create an account. At this point, they’ve already bought. The value proposition is clear: “Save your details for next time.” Conversion rate for post-purchase account creation is 30-45% — far higher than forcing it before purchase.

Social login: Offering “Continue with Google” or “Continue with Apple” reduces the friction of account creation by eliminating password management. Both Shopify (via third-party apps) and WooCommerce (via plugins like WooCommerce Social Login) support this.

EU-Specific Note

GDPR’s data minimisation principle means you should only collect information necessary for the transaction. Mandatory account creation to complete a purchase is difficult to justify under this principle — you don’t need a persistent account to process a one-time payment. Several EU regulators have flagged this as a design pattern worth scrutinising.


Reason 3: Checkout Process Too Long or Complicated (22%)

Why It Happens

The average checkout on the top 100 US ecommerce sites has 5.1 steps and requires 14.88 form fields. Baymard’s usability testing shows the optimal number is 7-8 form fields. That’s roughly half the current industry average. Every unnecessary field is a decision point where the shopper can abandon.

The complexity problem compounds on mobile: a form that takes 30 seconds to complete on desktop can take 3-4 minutes on a phone with a small keyboard and no autofill. 75% of ecommerce traffic is now mobile.

The Fix

Audit your form fields. Remove anything that isn’t strictly necessary for shipping and payment. Common unnecessary fields: title (Mr/Mrs), phone number for non-carrier-notification purposes, second address line when not needed, company name for B2C stores, date of birth.

Required fields only:

  • Shipping: First name, last name, address line 1, city, postcode, country
  • Payment: Card number, expiry, CVC, billing postcode (often same as shipping)

That’s 9 fields. Anything beyond this needs a justification.

Autofill support: Ensure your form field names use the correct HTML autocomplete attributes (autocomplete="given-name", autocomplete="postal-code", etc.). This lets browsers and password managers pre-fill forms instantly. A majority of mobile users have at least one address stored in their browser. A single tap should complete most fields.

Progress indicators: For multi-step checkouts, show a clear progress bar (“Step 2 of 3”). Shoppers who can see the end of the checkout are less likely to abandon than those who don’t know how many steps remain.

One-page checkout: Single-page checkouts reduce abandonment for low-complexity orders (few items, standard shipping). For high-AOV orders with customisation, multi-step is actually preferable because each step gives the shopper time to confirm their choices.

Shopify Implementation

Shopify’s native checkout is highly optimised and has been A/B tested against millions of transactions. Don’t rebuild it. Do configure it: remove unnecessary fields in Settings > Checkout. Shopify Plus stores can customise checkout extensively with checkout.liquid.

WooCommerce Implementation

The default WooCommerce checkout is notoriously long. Install “Checkout Field Editor for WooCommerce” to remove unnecessary fields. For one-page checkout, use “WooFunnels” or “CartFlows.” Ensure autocomplete attributes are set (most modern WooCommerce themes handle this, but custom themes often don’t).


Reason 4: Couldn’t See Total Cost Upfront (21%)

Why It Happens

This is related to Reason 1 but distinct. Reason 1 is about the costs being too high. Reason 4 is about the costs being invisible until late in the flow. Even if your shipping cost is reasonable, revealing it on Page 3 of a 3-page checkout creates uncertainty that drives abandonment at every prior step.

Shoppers make micro-decisions throughout checkout: “Is this worth continuing?” If they can’t see the total, they’re deciding blind. Some will abandon preemptively rather than risk a surprise.

The Fix

Show the total at every step. The order summary sidebar (or top section on mobile) should always show: subtotal, shipping, tax, and total. Update it dynamically as the shopper enters their shipping address and shipping method is calculated.

Show tax early. In EU B2C, prices should be VAT-inclusive from the start. If you’re showing ex-VAT prices on your product pages (which is acceptable for B2B-facing stores), include a prominent notice: “VAT added at checkout.” Don’t hide it.

Shipping calculator on cart page. Let the shopper calculate shipping before they start the checkout. A country-selector dropdown on the cart page with real-time shipping rate display reduces the discovery-at-checkout shock.

Shopify Implementation

Shopify’s checkout shows a persistent order summary sidebar on desktop. On mobile, it collapses — ensure the “Expand” interaction is visible and obvious (many themes hide this too well). For a cart-page shipping estimator, use the “Estimated Shipping” app or build it into your theme with Shopify’s Shipping Rates API.

WooCommerce Implementation

The WooCommerce cart includes a built-in shipping calculator — enable it in WooCommerce > Settings > Shipping > Shipping Options > “Enable the shipping calculator on the cart page.” For tax transparency, configure WooCommerce > Settings > Tax > “Display prices in the shop” and “During cart and checkout” appropriately for your market.


Reason 5: Delivery Was Too Slow (19%)

Why It Happens

Amazon has permanently altered delivery expectations. 60% of EU consumers now expect delivery within 2-3 days for standard orders (Statista 2023). Stores that show “7-10 business days” at checkout are competing against a benchmark they didn’t set and can’t easily change.

This isn’t about being Amazon. It’s about not surprising shoppers with delivery times they find unacceptable after they’ve already committed mentally to the purchase.

The Fix

Show delivery estimates before checkout. On product pages, show “Ships in X days, arrives [Date Range].” This sets expectations before the shopper begins checkout, rather than surfacing a disappointment at the end.

Offer multiple shipping speeds. Standard (5-7 days, free over threshold) + Express (2-3 days, €X). A significant portion of abandoners caused by delivery speed will convert if they can pay for faster delivery. You’re not losing the sale — you’re letting them choose.

Be accurate. Estimate ranges you can actually hit. A “2-3 day” promise that regularly delivers in 5 days is worse than a “3-5 day” promise that delivers in 3. Delivery disappointment is the leading cause of negative reviews and returns.

EU-specific: Cross-border delivery to EU markets from non-EU fulfilment adds complexity. Post-Brexit UK-to-EU shipments regularly face customs delays. If you ship from the UK to EU customers, display accurate cross-border estimates and duty disclosure.

Shopify Implementation

Apps like “Estimated Delivery Date” (Hulk Apps) display dynamic delivery estimates on product pages based on the shopper’s location. For multiple shipping methods, configure them in Settings > Shipping and Delivery > Shipping Profiles.

WooCommerce Implementation

WooCommerce’s shipping zones support multiple rates per zone. For estimated delivery display, use the “Estimated Delivery Date” plugin. For international shipping complexity, consider EasyPost or ShipStation integration for accurate cross-border estimates.


Reason 6: Didn’t Trust the Site With Credit Card Info (18%)

Why It Happens

Credit card fraud is rising. There were 65% more reported cases in 2024 than in 2019 (Federal Trade Commission). Shoppers are increasingly vigilant. A site that looks untrustworthy — outdated design, no security indicators, unknown brand — will lose sales to this hesitation even if your checkout is technically secure.

Trust is a perception problem as much as a technical one. You can have SSL, PCI compliance, and tokenised payments — but if your checkout page looks like it was designed in 2009, shoppers will still hesitate.

The Fix

SSL and HTTPS. This is table stakes, but check it. Your entire checkout flow must be HTTPS. A single mixed-content warning (one HTTP element on an HTTPS page) triggers a browser warning that kills conversions.

Trust badges at checkout. Display security certifications (Norton Secured, McAfee, Trustpilot) near the payment form. Studies by Baymard show that McAfee SECURE and Norton Secured badges increase checkout conversion by 4-11% for less-known brands.

Familiar payment logos. Displaying Visa, Mastercard, PayPal, iDEAL (Netherlands), Klarna, and other logos your customers recognise signals that legitimate payment infrastructure is in place. These logos are trust signals even if the shopper doesn’t use those specific methods.

Readable privacy and security policies. A link to your privacy policy near the payment form — not buried in the footer — reduces hesitation. Better: a one-sentence summary. “We never store your full card details. Payments are processed by [Provider].”

Modern, clean design. This is the uncomfortable one. An outdated checkout design communicates untrustworthiness regardless of your actual security. This is a perception problem. A professional, clean checkout layout is itself a trust signal.

Shopify Implementation

Shopify’s native checkout carries built-in trust signals (Shopify’s own brand recognition, SSL by default, PCI DSS Level 1 compliance). Display these: “Powered by Shopify” and the lock icon in the browser bar are visible reassurance. Add trust badges via checkout customisation (Shopify Plus) or via checkout apps.

WooCommerce Implementation

WooCommerce requires more active trust signal work. Install an SSL certificate (Let’s Encrypt is free via your host). Display payment gateway logos at checkout (most gateways provide badge assets). Use a reputable payment gateway (Stripe, PayPal, Mollie for EU) rather than an unknown processor.


Reason 7: Website Had Errors or Crashed (17%)

Why It Happens

Technical errors at checkout are disproportionately damaging. A product page error might lose a casual browser. A checkout error loses a committed buyer at the moment of highest purchase intent. And shoppers who experience checkout errors rarely retry — they go to a competitor.

Common culprits: payment gateway timeouts, form validation errors with unhelpful messages, session timeouts mid-checkout, JavaScript errors on address validation, and mobile keyboard obscuring form fields.

The Fix

Error message quality. When something goes wrong, tell the shopper what happened and what to do. “An error occurred” is not helpful. “Your card was declined — please check the card number and try again, or try a different payment method” is helpful.

Payment retry flow. Make it easy to retry with a different payment method after a decline. Don’t reset the entire form. Preserve the shipping address and other fields — only clear the payment fields.

Session persistence. If a shopper has been in checkout for 15 minutes and their session expires, they lose their cart. Set session timeouts to minimum 30 minutes for active checkout sessions.

Regular checkout testing. Run a real transaction through your checkout weekly. Test on mobile (both iOS and Android). Test on slow connections. Treat your checkout as production infrastructure that requires monitoring, not a web page that you deploy and forget.

Performance monitoring: Use Shopify’s Analytics or Google Search Console’s Core Web Vitals to monitor checkout page performance. Checkout pages loading over 3 seconds lose 57% of visitors.

Shopify vs WooCommerce reliability

Shopify’s hosted checkout is managed infrastructure with 99.99% uptime SLA. Checkout errors are almost always caused by apps, custom scripts, or misconfigured settings — not Shopify itself. Review installed apps and remove any that add scripts to checkout unnecessarily.

WooCommerce checkout reliability is entirely your responsibility. Your host, plugin compatibility, and update discipline determine reliability. WooCommerce checkouts on cheap shared hosting fail regularly under load. Use managed WooCommerce hosting (Kinsta, WP Engine, Nexcess) and monitor uptime actively.


Reason 8: Returns Policy Wasn’t Satisfactory (13%)

Why It Happens

Online shopping requires a leap of faith. The shopper can’t touch, try on, or inspect the product before buying. The returns policy is the safety net that makes that leap possible.

A restrictive returns policy — short windows, restocking fees, buyer-pays-return-shipping — signals to the shopper that you don’t stand behind your product. A generous returns policy signals confidence.

13% abandonment rate from returns policy is almost certainly understated. Most shoppers who distrust your returns policy won’t articulate it as “returns policy” in a survey — they’ll just feel vague unease and leave.

The Fix

Display your returns policy at checkout. Not just a link — a summary. “Free returns within 30 days. No questions asked.” One sentence, near the buy button.

Extend your returns window. The EU Consumer Rights Directive mandates a 14-day return right for online purchases as a legal minimum. But 14 days is not a competitive advantage — it’s the legal floor. 30 days, 60 days, or 365 days (for non-perishable goods) are differentiation points.

Offer free return shipping. Buyer-pays-return-shipping is the single biggest deterrent in returns policies. For EU customers especially, this is table stakes in competitive categories (fashion, electronics, home goods). Build the cost into your pricing model.

EU-specific: The Consumer Rights Directive gives EU consumers 14 calendar days to withdraw from a distance purchase without giving a reason. You cannot contractually override this right. Whatever your stated returns policy, EU customers have at minimum this right. Display it clearly — hiding it doesn’t eliminate the obligation, and EU consumers increasingly know their rights.


Reason 9: Insufficient Payment Options (11%)

Why It Happens

Payment method preference is more fragmented than most US-designed platforms assume. The Netherlands: iDEAL accounts for 55% of online payments. Germany: bank transfer (Lastschrift) and invoice (Kauf auf Rechnung) are heavily used. Sweden, Finland, Norway: Klarna’s pay-later products are expected. Belgium: Bancontact. All of these have significant adoption that generic Visa/Mastercard-only checkouts miss.

In the EU, offering only international card payments isn’t “universal” — it’s actively excluding the preferred payment method of a significant percentage of your audience.

The Fix

Audit payment methods by your top 3 customer countries. Then add the #1 local payment method for each. For Netherlands: add iDEAL (via Mollie, Stripe, or Adyen). For Germany: add SEPA Direct Debit and/or Klarna. For Belgium: add Bancontact.

Add buy-now-pay-later. Klarna, Afterpay (Clearpay), and Scalapay all offer split-payment options that increase average order value and conversion rate, particularly for orders over €100. These integrate easily with both Shopify (via app) and WooCommerce (via plugin).

Digital wallets. Apple Pay and Google Pay reduce checkout to a single biometric confirmation. Conversion rates for Apple Pay users who start the checkout are 60% higher than card-entry users (Stripe data). Enable these wherever possible.

Shopify Implementation

In Settings > Payments, enable Shopify Payments (includes major cards + digital wallets in one integration). For local EU payment methods, add Mollie or Adyen as a payment provider — both support iDEAL, Bancontact, Klarna, and other local methods.

WooCommerce Implementation

WooCommerce doesn’t include payment processing natively. Install the Mollie Payments for WooCommerce plugin — it’s the fastest way to add iDEAL, Bancontact, Klarna, SEPA, and other EU methods in one integration.


EU-Specific Checkout Abandonment Factors

Beyond the Baymard data, EU stores face additional abandonment drivers that are less prominent in US research:

Aggressive cookie banners that block the checkout page, require multi-step consent management, or create confusion about what data is being collected reduce conversions. Specifically: cookie banners that appear on checkout pages (after the shopper has already given navigation consent) are disruptive and unnecessary. Set your CMP to suppress the cookie banner on the checkout domain.

Cross-Border Trust Gap

EU shoppers buying from stores in other EU countries (e.g., a Dutch shopper buying from a German store) have higher trust hesitation than domestic purchases. Clear signals that help: local-language checkout, local currency pricing, local phone number or contact address, and EU-based shipping origin.

VAT Display Confusion

B2C stores operating across EU markets face the EU VAT One-Stop-Shop (OSS) rules, which require charging local VAT rates based on the customer’s country. If your checkout shows a Dutch shopper a German VAT rate, they notice. Correct VAT display by customer location, handled automatically by Shopify Markets or WooCommerce’s EU VAT compliance plugins.

Right of Withdrawal Notice

EU Consumer Rights Directive requires that you inform consumers of their right to withdraw (return without reason) during the order process. Not just in your terms — actively during checkout. This isn’t just a legal requirement; it’s also a trust signal. Display it.


Abandoned Cart vs Abandoned Checkout: The Recovery Difference

These terms are often used interchangeably, but they describe different points in the funnel — and different recovery strategies.

Abandoned cart: The shopper added products but never began the checkout flow. They may have browsed without payment intent. Recovery is harder because you often don’t have their email address.

Abandoned checkout: The shopper entered the checkout — typically providing their email address on step 1 — but left before payment. These shoppers have explicit purchase intent. Recovery is more effective because you have their contact details and they’ve shown real commitment.

Your checkout abandonment rate and cart abandonment rate will differ. Most platforms (Shopify, WooCommerce) report both separately. Prioritise abandoned checkout recovery — it converts at 2-3x the rate of full cart abandonment recovery because the shopper was actively buying, not browsing.

Priority Order for Implementation

You have limited time and budget. Fix these in order of impact:

  1. Guest checkout — single highest-impact change for most stores. Takes 5 minutes in Shopify settings.
  2. Show total costs early — shipping calculator on cart page, or build shipping into prices.
  3. Optimise checkout form fields — remove everything not required.
  4. Add local payment methods — for your top EU markets specifically.
  5. Trust signals at checkout — security badge, payment logos, returns policy summary.
  6. Delivery estimates on product pages — set expectations before checkout begins.
  7. Returns policy — extend the window, offer free returns if your margins allow.
  8. Mobile checkout audit — test the entire flow on an actual phone, on 4G, not WiFi.

The Honest Summary

Most checkout abandonment is preventable. The data is clear. The fixes are known. The implementation is straightforward.

The gap between knowing and doing is why most stores have 70% abandonment rates. The stores in the top quartile — 50-55% abandonment — haven’t found a magic formula. They’ve just implemented the basics correctly.

Fix your checkout before you invest in recovery tools. Every euro spent on abandoned cart emails is a cost you pay because your checkout didn’t convert. Reduce the abandonment first, then recover the rest.

Start with guest checkout. Do that today.


Ready to fix this? My design subscription covers checkout optimisation as ongoing UX work.

Newsletter

Get articles in your inbox

Weekly e-commerce UX tips. No spam. Unsubscribe anytime.

Weekly UX tips
No spam
Unsubscribe anytime