Best Practices for Reducing Cart Abandonment

PrestaInsights Team

A home-goods merchant we worked with last spring was convinced their 74% cart abandonment rate was just how eCommerce works — a number they'd seen quoted in a blog post somewhere and accepted as the ceiling. It's not. Reported industry abandonment rates vary widely by sector (illustrative range: 65-80% across most reports), but the real question isn't the average — it's why your customers are leaving, because the fix for "shipping cost surprise" looks nothing like the fix for "payment failed silently."

We went through six weeks of session recordings and found three causes accounting for most of the lost carts: an unexpected shipping fee shown only at the final step, a card payment that failed without explanation, and a delivery estimate that didn't appear until after the customer had already entered their address.

The abandonment number nobody wants to admit

Cart abandonment isn't one problem — it's a bucket for several different failures:

  • Browsing abandonment — customers who never intended to buy today (window shopping, comparing prices)
  • Friction abandonment — customers who wanted to buy but hit a broken or confusing step
  • Cost-surprise abandonment — customers who bailed once they saw the real total
  • Trust abandonment — customers who got nervous about payment security or data handling

Only the last three are genuinely fixable through checkout and store changes. Treating all abandoned carts as one metric hides which lever actually moves the number.

Why shoppers actually leave (and it's rarely "just browsing")

Baymard Institute's long-running checkout usability research consistently points to a short list of recurring culprits: extra costs revealed too late, forced account creation, a checkout process that feels too long, and not trusting the site with card details. We see the same pattern in PrestaShop stores, with one addition specific to the platform: default themes that don't clearly display estimated delivery dates on the product page, which pushes the "when will this arrive" question all the way to checkout instead of resolving it earlier.

Fixing the technical friction first

Before running a single discount-code recovery campaign, fix what's actually breaking:

Friction pointFix on PrestaShopTypical impact (illustrative)
Shipping cost hidden until last stepShow estimated shipping on the cart page via a carrier moduleReduces late-stage drop-off
Slow cart/checkout page loadEnable caching, optimize images — see Core Web Vitals for PrestaShopFewer timeouts and abandoned sessions
Card declined with no explanationConfigure the payment module to surface the decline reasonReduces repeat failed attempts
No delivery estimate on product pageAdd a carrier delay display moduleFewer exits mid-checkout to check delivery
Forced account creationEnable guest checkout under Preferences > CustomersFewer exits at the account step

Recovery tactics that still work in 2026

Once the structural issues are fixed, recovery campaigns become worth running instead of papering over a broken flow:

  1. Abandoned cart emails, sent in a short sequence — a reminder within an hour, a follow-up at 24 hours, and a final nudge (with or without a small incentive) at 48-72 hours.
  2. On-site exit-intent prompts for desktop visitors who show cursor movement toward closing the tab.
  3. SMS or WhatsApp reminders, where opt-in consent has already been captured — a channel that's gained traction across EU merchants but requires explicit consent under GDPR.
  4. Retargeting ads scoped to actual cart contents rather than generic store ads, which tend to perform better on cost-per-recovered-order.

Discount codes in recovery emails work, but they train customers to abandon carts on purpose to trigger a discount. We generally recommend testing free-shipping recovery offers before percentage-off codes — they resolve the actual cost-surprise objection instead of just cutting margin.

Segmenting abandonment by cause, not just by cart value

Most merchants segment recovery campaigns by cart value alone (high-value carts get a bigger incentive). That's a reasonable starting point, but pairing it with cause segmentation performs better: a customer who abandoned after a failed payment needs a "try again, here's a different payment option" message, not a discount. A customer who abandoned at the shipping-cost step needs to see a free-shipping threshold, not a generic reminder.

A 30-day cart-recovery action plan

  • [ ] Week 1: Pull session recordings or funnel analytics to identify your top 3 abandonment causes
  • [ ] Week 1: Fix the highest-impact technical friction point (usually shipping cost visibility)
  • [ ] Week 2: Set up a 3-email abandoned cart sequence with clear, honest subject lines
  • [ ] Week 2: Add delivery estimates to product pages, not just checkout
  • [ ] Week 3: Test a free-shipping threshold banner against a percentage-discount recovery email
  • [ ] Week 4: Review results, keep the winner, and revisit checkout speed alongside checkout optimization more broadly

If your store also sees abandonment spike specifically on mobile, that's often a payment-method gap — see our notes on the shifting payment landscape in Europe for what to add. And if speed is the underlying issue across the board, a headless or hybrid frontend is sometimes the longer-term answer, covered in headless commerce: should you consider it?

The next concrete step: export your last 60 days of abandoned carts, filter for orders that reached the payment step but didn't complete, and check whether a specific payment method is failing more than others. That single data pull usually points straight at your highest-impact fix.

Frequently asked questions

What's a normal cart abandonment rate for an online store? Reported industry averages typically fall somewhere between 65-80%, though this varies a lot by sector and traffic source (treat any single number as illustrative). Rather than chasing an industry average, focus on identifying and fixing your store's specific top three abandonment causes — that moves the needle more than benchmarking against a generic figure.

Do discount codes actually recover abandoned carts? They can, but they also train some customers to abandon carts deliberately in order to trigger a discount, which erodes margin over time. Testing a free-shipping offer before jumping to a percentage-off code often performs comparably while addressing the actual objection — an unexpected shipping cost — rather than just cutting price.

How many abandoned cart emails should I send? A short sequence of three tends to work well: a reminder within an hour of abandonment, a follow-up around 24 hours later, and a final message at 48-72 hours, optionally with a modest incentive. Sending more than that usually produces diminishing returns and a higher unsubscribe rate.

Is cart abandonment always a bad sign? Not entirely. Some abandonment is simply browsing behavior from people comparing prices or saving items for later, and it isn't fixable through checkout changes. The abandonment worth chasing is the kind caused by friction, unexpected costs, or trust issues — segmenting by cause rather than treating every abandoned cart the same is the key.

Does slow page speed really cause cart abandonment? Yes — slow-loading cart and checkout pages contribute directly to abandoned sessions, particularly on mobile where connection quality varies more. Customers rarely wait through a stalled payment page; they close the tab and either try a competitor or forget to return. Fixing page speed is often cheaper than most recovery campaigns.

Related reading

Written by

PrestaInsights Team

At PrestaInsights, we specialize in everything PrestaShop, from hosting and performance optimization to module development and in-depth tutorials. Our goal is to help merchants, developers, and agencies succeed with up-to-date guides, practical insights, and proven best practices. Whether you're just getting started or scaling a high-traffic store, we're here to guide you.

Leave a comment

Your email address will not be published. Required fields are marked *