Availability for 2 new clients. Book a call →

· 14 min read

How I Fixed a Shopify Checkout and Lifted Conversion 23% in 8 Weeks

A Dutch Shopify store had a 74% checkout abandonment rate. Here's the UX audit that found the problem, the fixes I made, and the conversion data 60 days later.

Ecommerce Case Study Checkout
How I Fixed a Shopify Checkout and Lifted Conversion 23% in 8 Weeks

A 1.1% checkout conversion rate. That’s what Rooted was running when they first sent me their analytics.

Rooted is a Dutch sustainable home goods brand. Candles, linen, ceramics, the kind of stuff that photographs beautifully and sells well on Instagram. Around 38,000 monthly sessions, roughly €1.8M in annual revenue, running on Shopify for three years. Their traffic had grown 40% over 18 months through paid social and organic search. Their revenue had not.

When traffic climbs and revenue stays flat, that’s a checkout problem. Not always. But usually.

The European average checkout conversion rate for home & lifestyle is 2.2 to 2.8%. Rooted was sitting at 1.1%. That gap, 1.1% actual versus 2.2% category floor, represented roughly €28,000 in monthly revenue their marketing was generating traffic for but the checkout was losing.

This is the full case study. Every issue we found, every fix we made, and every number that changed.


What the Data Showed Before I Touched Anything

Before I run a heuristic audit or look at a single session recording, I read the numbers. Numbers tell you where to look. Session recordings tell you why.

Here’s what Rooted’s analytics showed at the start:

Conversion rates

  • Overall checkout conversion rate: 1.1% (session-based)
  • Desktop conversion rate: 2.4%
  • Mobile conversion rate: 0.6%
  • Traffic split: 71% mobile, 29% desktop

Abandonment rates

  • Cart abandonment rate: 68% (category average: 62%)
  • Checkout initiation abandonment: 74% (those who started checkout but didn’t complete)

Checkout funnel drop-offs

  • Step 1 (contact info): 18% exit rate
  • Step 2 (shipping info): 34% exit rate
  • Step 3 (payment): 21% exit rate
  • Order review: 11% exit rate

The 34% exit on the shipping step was the loudest signal. Baymard benchmarks that step at 15 to 20% for well-optimised checkouts. Rooted was running nearly double that. Something on the shipping step was killing the flow, and it was doing it consistently enough to show up clearly in the data.

The mobile conversion gap was the second signal. A 4:1 ratio between desktop and mobile (2.4% vs 0.6%) means mobile users are hitting friction that desktop users aren’t. That’s almost never a content problem. It’s a UX problem, usually forms, layout, or trust signals that don’t render well on small screens.

Those two signals told me where to start.


How I Ran the Audit

Two weeks. Here’s exactly what I reviewed:

Analytics review (3 days)

Full funnel analysis in Google Analytics 4. Enhanced ecommerce events for add-to-cart, checkout initiation, shipping step completion, payment step completion, and purchase. Segment by device. Export the drop-off rates at each step. Build the waterfall chart. This is where you see which steps are bleeding and whether mobile bleeds differently than desktop.

Rooted’s data confirmed the pattern the headline numbers suggested. Mobile users were abandoning at step 2 at a 41% rate. Desktop users, 22%. Same step, same shipping cost, same form. Different abandonment rate by 19 percentage points. That told me the step 2 problem was either a mobile rendering issue or a friction point that bothered mobile users more (smaller screens make unexpected costs feel more jarring).

Session recordings (4 days)

120 recordings in Hotjar, filtered to mobile checkout sessions. I watched every one of them. Not at 1x speed. At 1.5x, pausing when I saw hesitation. Hesitation is the tell. A user who pauses on a field, scrolls up, scrolls back down, and then closes the browser, that’s not a “not ready to buy” user. That’s a user who hit something that confused or surprised them.

I made a running note of every hesitation point. By recording 60 I had a clear pattern. By recording 120 I had a ranked list.

Heuristic review (3 days)

I went through the full purchase path myself, on both mobile and desktop, multiple times. Mobile on three devices: an iPhone SE (small screen), an iPhone 14 Pro, and a Samsung Galaxy A34. The SE is important. A surprising number of users are still on small-screen phones and most checkout forms are designed for large screens.

I documented every friction point, every missing trust signal, every unclear label, every form field that behaved unexpectedly.

Competitor analysis (2 days)

Four direct competitors in the Dutch sustainable home goods space. I went through their complete checkout flows. I paid particular attention to how they handled shipping cost display, payment method ordering, and guest vs account checkout. Two of the four were running substantially cleaner checkouts than Rooted. I documented the differences.

Payment provider data (1 day)

Rooted’s payment provider gave me payment method selection rates. This data is often overlooked. It tells you which payment methods customers are actually choosing, which tells you whether your payment UI is surfacing the right options at the right time.


The 5 Problems That Were Actually Killing the Checkout

I found 23 issues across the full purchase path. These 5 were responsible for the majority of abandonment.

Problem 1: Shipping costs appeared for the first time on checkout step 2

This was the root cause of the 34% exit rate at the shipping step.

Here’s how it played out: A customer found a candle set they liked. The product page said “Shipping calculated at checkout.” The cart said the same thing. Step 1 of checkout (email and phone number) said nothing about shipping. Step 2, the shipping information step, was where the cost appeared for the first time.

For orders under €75: €4.95 shipping. For orders over €75: free.

Not an unreasonable shipping cost. Not a bad free shipping threshold. But revealing that cost at step 2, after the customer had already committed their email address and started filling in their delivery address, that’s a bait-and-switch in the customer’s mind even if it wasn’t intended as one.

The session recordings made this concrete. I watched users fill in their name and address on the shipping form, then pause visibly when the €4.95 shipping cost rendered on screen. Some scrolled back up to look at their cart total. Some spent 15 to 20 seconds apparently calculating whether the order still felt worth it. Some abandoned. The 34% exit rate was this moment, repeated across thousands of sessions.

The fix had nothing to do with the shipping cost itself. The fix was moving the information earlier.

Problem 2: iDEAL was not immediately visible on the payment step

Rooted’s payment provider rendered credit card fields first, by default. iDEAL appeared below the fold on mobile and under a “More payment options” disclosure on desktop.

Payment method selection data told the story clearly. iDEAL selection rate at Rooted: 41%. Expected rate for a Dutch ecommerce store: 55 to 65%. That’s a 14 to 24 percentage point gap.

Why does this matter? iDEAL has higher payment completion rates than credit card for Dutch consumers. When a Dutch customer can’t immediately see iDEAL, three things happen. Some of them select credit card and complete the purchase (lower conversion rate than if they’d used iDEAL). Some of them scroll around looking for it, get frustrated, and abandon. Some of them find it but had to work for it, which adds friction to an already-stressful moment.

The gap between Rooted’s 41% iDEAL selection and the 55 to 65% baseline was leaving money on the table in payment completion rates alone, before accounting for the users who abandoned because they couldn’t find their preferred payment method.

Problem 3: Mobile checkout had three form UX failures

Three specific failures, none of them obvious unless you’re testing on actual devices:

Failure 1: Wrong keyboard type on the phone number field. The field was coded as type="text" instead of type="tel". On mobile, this triggers the full QWERTY keyboard instead of the numeric keypad. A customer trying to type their Dutch mobile number (10 digits) on a QWERTY keyboard is switching mentally and physically between numeric and letter modes. It’s a small friction. But small friction on 71% mobile traffic compounds.

Failure 2: No Dutch postal code validation. Dutch postal codes are formatted as four digits, a space, and two capital letters (e.g., 1234 AB). The field had no format validation and no format hint. Users typed their postal code in various formats, the field accepted all of them, and then the form error appeared later at submission. Wrong field, wrong moment, confusing feedback.

Failure 3: Scroll-to-top on validation error. When a form validation error occurred anywhere in the checkout form, the page scrolled to the top. Not to the error. To the top. The customer had to manually scroll down through the entire form to find which field was highlighted in red. On mobile, that’s often 400 to 600px of scrolling. On a small screen, it’s a full separate cognitive task.

These three issues compounded on mobile, which explains why mobile conversion (0.6%) was so far below desktop (2.4%).

Problem 4: No guest checkout option

Account creation was required before purchase. This was the standard Shopify setup that Rooted had never changed.

The account creation step appeared at checkout initiation, before a customer could enter any shipping or payment information. Baymard’s research across 4,500 ecommerce sites puts forced account creation as the cause of 28% of checkout abandonment. That’s not a niche finding. It’s one of the most replicated results in ecommerce UX research.

Rooted’s analytics showed a 21% exit rate at the account creation/login step. In the context of a 74% overall checkout abandonment rate, that’s a significant contributor, and it was entirely self-inflicted.

The argument for forcing account creation is “we capture the customer for re-marketing.” The counter-argument is “we never get the sale in the first place.” For most stores at Rooted’s stage, the sale is worth more than the re-marketing potential of a customer record. Guest checkout is the right call.

Problem 5: Trust signals were hard to find

Rooted had good social proof. A 4.7 out of 5 average rating across 890 reviews. A clear return policy (30-day free returns). They just weren’t putting this information where customers needed it.

The product pages showed the 4.7 star rating as a number. Clicking it took you to a separate reviews page. No individual reviews were visible on the product page itself without that click.

The return policy lived in the footer. Not in the product page layout. Not near the add-to-cart button. In the footer, three scroll-lengths down.

The session recordings showed 35% of users, before adding to cart, navigating to the footer, clicking the returns policy link, reading it, and navigating back to the product page. This took 45 to 90 seconds per instance. That’s 35% of potential buyers adding an extra 45 to 90 seconds to their decision-making process because the trust information they needed wasn’t visible in the right place.

That’s not a conversion problem. That’s an information architecture problem. But it shows up as abandoned sessions.


The Prioritization Logic

I found 23 issues. You can’t fix 23 things simultaneously if you want clean data on what’s working.

I ranked everything on three axes: frequency (how many users hit this?), severity (does it cause abandonment or just delay?), and implementation effort (hours, not weeks). High frequency, high severity, low effort: fix first.

The top 5 by that matrix:

#IssueImpactEffort
1Show shipping costs before checkoutHighLow
2Make iDEAL immediately visibleHighVery Low
3Add guest checkoutHighMedium
4Fix mobile form keyboards and validationMediumLow
5Move trust signals onto product pageMediumLow

The beauty of this list is that items 1, 2, 4, and 5 could all be done in under a week combined. Item 3 (guest checkout) needed Shopify Plus customization but Rooted was already on Plus, so “medium effort” meant 2 to 3 days of developer time, not a platform migration.

Total implementation window: 6 weeks, including testing.


Exactly What Changed

Fix 1: Shipping cost transparency at every stage

Three changes here, not one.

On the product page: Added a line near the add-to-cart button. For products under €75: “€4.95 shipping. Free on orders over €75.” For products over €75: “Free shipping on this order.” Simple text. No design overhaul.

On the cart page: Added a dynamic shipping cost line in the order summary. If the cart total was under €75, it showed the exact shipping cost. It also added a progress bar: “Add €[X] more for free shipping.” This is a standard conversion pattern and it works because it reframes the customer’s decision from “should I buy this?” to “how do I get free shipping?”

In the checkout: The shipping cost was now visible at step 1, not introduced for the first time at step 2.

Implementation time: 2 days.

Fix 2: iDEAL first on payment method list, express checkout added above the fold

Worked with Rooted’s payment provider to reorder the payment method display. iDEAL moved to first position. On mobile, it now appears without scrolling.

Added Apple Pay and Google Pay as express checkout options above the fold on the cart page. Express checkout UX compresses the entire checkout flow to a single tap for customers already authenticated on their device. For mobile users — 71% of Rooted’s traffic — this reduced the checkout path from six steps to one for a meaningful percentage of returning visitors.

Added payment method logos to the cart page footer: iDEAL, Visa, Mastercard, PayPal, Klarna. This does two things. It reassures customers their payment method is accepted before they reach checkout. And it primes Dutch customers to expect iDEAL, so they’re not surprised to see it front and center on the payment step.

Implementation time: half a day.

Fix 3: Guest checkout as the primary path

“Continue as guest” became the most visually prominent option on the checkout entry screen. Account creation was offered on the post-purchase order confirmation page, where it could be framed positively (“Save your details for next time”) rather than as a gate.

This required Shopify Plus checkout extensibility. Rooted’s developer handled the implementation. I wrote the UX spec.

Implementation time: 3 days.

Fix 4: Mobile form repair

Changed the phone number field from type="text" to type="tel". This triggers the numeric keypad on iOS and Android automatically. One attribute change, zero design changes.

Added Dutch postal code format validation with inline error messaging. The error appears in real-time as the customer types, not after form submission. The message is specific: “Dutch postcodes use the format 1234 AB.”

Fixed the scroll-to-error behavior. On validation failure, the page now scrolls to the first error field, not to the top.

Implementation time: 4 hours with the developer.

Fix 5: Trust signals where customers are making decisions

Added a review block to the product page showing the three most recent reviews inline. No click required to see real customer opinions.

Added a returns policy block near the add-to-cart button: “Free returns within 30 days” with a one-click expand for the full policy text. Customers can now read the returns policy without leaving the product page.

Implementation time: 2 days.


What Changed in 60 Days

Here are the before and after numbers, measured over matched 30-day windows:

MetricBeforeAfterChange
Checkout conversion rate1.1%1.35%+23%
Cart abandonment rate68%59%-13%
Checkout abandonment rate74%62%-16%
Mobile conversion rate0.6%0.82%+37%
Exit rate at shipping step34%17%-50%
iDEAL selection rate41%61%+49%
Account creation (checkout)RequiredOptionaln/a

The revenue math

On Rooted’s traffic volume, the 0.25 percentage point improvement in conversion rate produced approximately €27,000 in additional monthly revenue.

Total cost of the audit, design work, and implementation: €14,500.

Time to break-even on the investment: 16 days.

At 6 months post-audit, Rooted’s conversion rate was sitting at 1.7%. That additional lift came from ongoing monthly optimisation experiments run after the initial sprint.


What Actually Drove the Results

The shipping transparency fix was responsible for the majority of the overall conversion lift. Moving that information earlier cut the step 2 exit rate from 34% to 17%, which is a 50% improvement on the single most important drop-off point in the checkout.

Here’s why that number matters so much: every customer who abandons at step 2 has already expressed enough purchase intent to start filling in checkout forms. These aren’t casual browsers. They’re buyers who hit a surprise and left. Removing the surprise returned them to the flow.

The iDEAL fix was the highest ROI change relative to effort. Half a day of configuration work. iDEAL selection rate up 49%. That translates directly to payment completion rates, because iDEAL completions run higher than credit card completions for Dutch consumers.

The mobile fixes had a disproportionate impact because they affected 71% of the traffic. A 37% improvement in mobile conversion sounds significant. It is. But it was mostly the removal of small frictions that had been compounding across every mobile session.

The guest checkout fix is harder to isolate in the data because it interacts with every other change. What I can say: exit rate at checkout initiation dropped from 21% to 9%. That’s the clearest signal that forced account creation was genuinely costing sales.


Checkout Redesign vs. Targeted Fixes: Which Approach Is Right?

Rooted’s checkout did not need a full redesign. It needed 5 targeted fixes, implemented in 6 weeks, with no design overhaul and no platform migration. This matters because “checkout redesign” is often the first recommendation thrown at a low-conversion rate, when in reality most checkout conversion problems are structural and fixable without rebuilding from scratch.

The case for targeted fixes first: you get faster time-to-revenue, cleaner data on what each change produces, and lower implementation risk. A full checkout redesign takes 3-6 months and makes it impossible to isolate what drove any conversion change.

The case for a full checkout redesign: when the checkout process UX is fundamentally broken across multiple layers — outdated platform, non-responsive layout, hard-coded flows that can’t be modified without a rebuild — targeted fixes hit a ceiling quickly. At that point, the cost of redesign is lower than the compounding revenue loss from delayed fixes.

Rooted was on Shopify Plus with a responsive theme. The checkout process UX was fixable at the configuration and code level. Full redesign would have cost 5-10x more and delivered results 4 months later. The right answer was targeted fixes. Know which situation you’re in before choosing an approach.

The Pattern I See Across Every EU Checkout I Audit

Rooted’s problems are not unusual. They’re the norm.

I’ve run checkout audits on Dutch, Belgian, and German ecommerce stores across home goods, fashion, supplements, and electronics. The same four problems appear in some combination in 80% of them:

1. Shipping cost revealed too late. Every store knows this is bad UX. Almost every store still does it because the default Shopify flow doesn’t show shipping until the shipping step, and nobody changed the default. The fix takes 2 days.

2. Local payment methods buried. iDEAL for Dutch stores. Bancontact for Belgian. SOFORT for German. The payment provider’s default ordering is usually credit card first. That’s wrong for EU stores. The fix takes half a day.

3. Forced account creation. This one has survived in ecommerce for 20 years despite being one of the most researched causes of checkout abandonment in the industry. It survives because store owners conflate “customer account” (useful for re-marketing) with “required before purchase” (useful for nobody). Guest checkout should be the default. It takes 3 days to implement on Shopify Plus.

4. Mobile form friction. Wrong keyboard types, no inline validation, scroll-to-top on error. These are developer-level details that rarely get audited because most audits are done on desktop. On mobile, they add up to a conversion rate that’s 3 to 4x lower than desktop. The fixes take hours.

If your checkout conversion rate is under 2.5% and you’re running significant traffic, there’s a high probability at least two of these four problems are present. Not maybe. Probably.


Ecommerce Checkout Flow Best Practices: 6 Checks to Run Right Now

You don’t need to book an audit to find your biggest problem. You need 30 minutes and these checks:

Check 1: When does the customer first see shipping costs?

Go to your store as a new visitor. Add something to cart. Start checkout. Note the exact step where shipping cost appears for the first time. If it’s not visible on the product page or cart, you have a transparency problem.

Check 2: What’s your step-by-step checkout drop-off rate?

Open Google Analytics 4. Go to Funnels. Build a funnel from checkout initiation through each checkout step to purchase. Look at the drop-off percentage at each step. Any step above 25% drop-off is a problem worth investigating.

Check 3: What’s your mobile vs desktop conversion rate split?

Segment your conversion data by device in GA4. If mobile is more than 2x lower than desktop, you have mobile-specific friction, not a general conversion problem.

Check 4: Is your local payment method visible without scrolling on mobile?

Open your checkout on a phone. Get to the payment step. Can you see iDEAL (or Bancontact, or SOFORT, depending on your market) without scrolling? If not, that’s a configuration change that takes half a day.

Check 5: Tap every form field on mobile.

On your phone, go through checkout and tap into each form field. Does the phone number field trigger a numeric keypad? Does the postal code field? If not, you have keyboard type errors.

Check 6: Trigger a form validation error deliberately.

Fill in a form field incorrectly and try to proceed. Where does the page scroll? If it scrolls to the top, your scroll-to-error behavior is broken.

Six checks. 30 minutes. You’ll find your biggest problem without analytics expertise or specialist software.


What This Type of Audit Costs vs What It Returns

The question I get most often after sharing results like Rooted’s is: what does this cost?

A conversion audit at BTNG runs €3,500 to €8,500 depending on scope. For Rooted, the full audit plus design specs plus implementation oversight came to €14,500.

The break-even on that was 16 days. At 12 months, the cumulative additional revenue from the improved conversion rate was approximately €324,000.

That’s not a marketing claim. That’s the math from a single store’s actual numbers.

The more relevant question is: what does not doing an audit cost? If your checkout is running at 1.1% and the category floor is 2.2%, you’re leaving roughly half your potential revenue on the table every single month. The audit doesn’t cost money. The abandonment does.

If you want to know what a conversion audit would find on your specific store, I offer a free 30-minute audit preview. I’ll look at your checkout live, identify your top three friction points, and give you a clear picture of what’s fixable and how long it would take. No obligation.

Book a free checkout audit preview

For a deeper dive into the specific optimisations that work across EU ecommerce stores, including the full checklist I use before every audit, read the companion piece: EU ecommerce checkout optimisation guide.


The One Thing That Changes Everything

Here’s what I’ve learned from running these audits: the checkout isn’t broken because nobody cares. It’s broken because nobody looked.

Rooted’s team cared deeply about their product, their photography, their brand. They’d invested in a full visual redesign 18 months before I got involved. Nobody had sat down with session recordings and watched real mobile users try to complete a purchase.

28 hours of structured looking, across analytics, recordings, and device testing, found 23 problems. Fixing 5 of them produced €27,000 per month in additional revenue.

Your checkout has problems. Every checkout does. The question is whether you know what they are.

Go run those six checks. Right now. Not tomorrow.

Newsletter

Get articles in your inbox

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

Weekly UX tips
No spam
Unsubscribe anytime