Introduction
If you’re a Shopify store owner, you’ve probably noticed that shoppers leave at the last possible moment, which creates panic among sellers who wonder what went wrong, so they immediately start making changes.
First, they start by changing the button color, shortening the copy line, or adding a trust badge, and then they wait to see which changes worked. At Olifant Digital, we have run many checkout audits, and in most of them the cause wasn’t on that page at all.
The real issue is the logic surrounding the checkout process. The shipping rules, discount math, scripts on the product page and tracking tags all feed into the order before the customer even sees the payment form, and none of this shows an error message when something goes wrong.
The page can look clean and load cleanly, the button can work perfectly fine, and even your report might look normal enough so no one goes looking. Don’t get us wrong, it’s expected to experience some drop-off; according to the Baymard Institute, the average abandonment rate is 70.22%.
This drop-off is challenging to change, but it’s not impossible. You can win it back; just place real orders and check your report to see what happened.
Why does checkout drop-off happen when the page tests fine?
Before the order gets finally paid, it goes through many different systems, so at one point, your theme code, apps, discount rules, subscription logic, shipping settings and analytics all touch the same order, so one wrong setting in any of these can cause the order to fail without anyone knowing why.
If you test only a checkout page, it will measure only that. So, if there is an issue in the cart, let’s say a wrong number in it or the shipping charge was changed two steps ago, this test is actually reading a broken input, and in the end, it will report back to you a clean result.
This represents one of the main reasons why changing the color on the button or other details at the checkout page barely makes up for the lost sales. The problem actually starts at an earlier stage in the order, so making changes to the checkout page will not solve it at all.
How we audit the order path
Before we trust any conversion numbers on a new account, our Shopify team, which is trained in conversion rate optimization, always follows the same four steps, which go in the exact order.
- First we test every system that gets in touch with the order. The process goes between the product page and thank you page. What this entails is every app, script, discount code, shipping rule and tracking tag, including the ones that no one on the team remembered to install.
- We run test orders through every variant. While this process is a bit time-consuming because it requires going through every variant, quantity, discount and destination, it’s still the only step that shows what the customer actually sees.
- We compare the tracking against the real orders. For example, we compare the GA4 event count and session data to the orders in Shopify, so in case they don’t line up, this is a sign that either the logic or the tracking is broken, and both of these need to be fixed.
- First we fix the logic, and then we start measuring. If you measure the conversion rate on a broken order path, you will not be able to notice anything useful about your customers, so there is no point in running the tests on top of it.
How does shipping threshold logic silently break free shipping?
The first thing that Shopify shoppers, and shoppers everywhere else, respond to is the shipping cost. Baymard’s research found that 40% of shoppers who abandoned their cart did so because of high extra costs, such as shipping, taxes and fees.
From our experience, if free shipping disappears at the moment the customer is about to pay for the order, this does more harm than good, because they have already planned around the offer.
One particular pet brand that we work with offered its customers free shipping on orders of $54 or more.
There was one issue with this. They did the threshold check after removing a 10% subscription discount, so if a cart was worth $54 to $59.99 prior to the discount, it fell below the line after the discount was applied.
The result was that the customer lost their free shipping at checkout, and the store showed no error at all.
At Olifant Digital, we built a Shopify Function that fixed this issue by having the threshold read the cart price before we applied discounts. Discounts still reduce the final cost to the customer; however, they no longer decide if the shipping is free.
How to check your threshold math
You need to make a list of discounts that can be combined with free shipping in your store. Subscription discounts, discount codes, automatic discounts and bundle pricing will all change the number your shipping rule is reading, and it is very easy to forget one.
Then, the next step involves creating test carts that are just above and just below your threshold and applying each discount type one at a time. Based on our experience, these failure windows are almost always within a few dollars of the line, so if the cart is $30 over the threshold, it will not show you anything.
You need to make sure that the shipping charge for each cart matches what you already advertise for that size. First, be sure to verify it in the cart, then at checkout, and again on the order confirmation, as the number can change between those steps.
Run the whole check again. You need to double-check when you insert a new discount or install a subscription app. Even if the threshold is not changed, the new discount logic can still create the same risk again.
Why is the Shopify quantity selector not working after an A/B test?
A/B tests modify the product page code, so there can be two different Buy Box versions appearing on the same page, both controlling the “Add to Cart” button.
For the same pet brand we previously mentioned, a shopper selected 4 units of a dog product, and the cart showed only one. The reason was that the two Buy Box forms were conflicting with each other because of the A/B test change that was left in place, and this particular conflict stopped the selected quantity from reaching the cart.
At Olifant Digital, we fixed the issue the next day. The page looked fine the whole time; it took a real “Add to Cart” to see the problem.
How to QA every Buy Box variant
First you need to list every Buy Box version live on the page including the control and each test arm, the subscription and one-time options, and bundles.
Next, be sure to add each version to the cart at several quantities. You can use 1, 2 and your most common multi-unit quantity and make sure that the cart matches.
Count the add-to-cart forms on the page using your browser’s developer tools. Two forms competing for the cart caused the bug above.
Repeat all of these steps for every test launch, theme update and app install.
How can shipping zones hide your real fulfillment coverage?
In Shopify, every country that you sell in has to be in a shipping zone and this zone must have at least one rate. If your zones are behind what your fulfillment partner can do, customers in the missing countries cannot pick their country at checkout.
Another DTC brand that we work with ships the orders to the US, Canada and the UK; however, they only had the US shipping zone configured in Shopify. Canadian and UK shoppers were unable to complete checkout.
Once they started working with us, we added the zones that were missing along with the correct rates, and then a day later, the brand discovered another issue.
The expedited rate in Shopify was not connected to the expedited shipping at the fulfillment center, which meant that customers who paid for expedited shipping were receiving regular shipping instead. The cause was a single setting.
A conversion test on US traffic would not show you this problem, because US shoppers keep buying as usual, so the numbers look normal. But shoppers that are based in Canada and the UK leave before they can start a checkout, so your reports never show a failed order. You lose the sales, but nothing tells you this.
Shopify shipping zone setup for international orders
First you need to start with the list of countries that you ship to, and if you don’t trust your memory (which is completely normal), you can pull it from your fulfillment partner or settings.
Then, be sure that each of the countries has a zone and a rate that the customer can choose. A country that has a zone but doesn’t have a rate is just as blocked as a country without a zone.
Test checkout with an address from each country. You need to verify that the country appears in the drop-down and that the rate and total displayed are correct.
Finally, order each of the paid shipping options to verify that the fulfillment center ships at the correct speed, as this process would have caught the expedited problem before a customer did.
How do you tell if your analytics are lying about checkout?
If your checkout numbers don’t add up, this discrepancy doesn’t necessarily mean that your checkout is broken. Occasionally, the store can work fine, but the reports can be wrong. If you make decisions based on reports that are wrong, for example, by undoing a change that was working fine, this can cost you as much as a real problem on the store.
When GA4 begin_checkout is not firing
GA4 doesn’t automatically send recommended events like begin_checkout. These can come from your tag setup or from an app, which means a theme change, a new app or an update to checkout can break them without any warning.
As we were setting up a product page test for a nutrition brand, GA4 showed 273 checkouts vs 294 purchases for the same time period, which couldn’t be right. Purchases will always be lower than checkouts because every purchase should go through checkout first.
The begin_checkout event was firing less than it should have, and until that was fixed, any add-to-cart-to-checkout rate for that store was useless. On Shopify, a common reason is express checkout.
Shoppers that are using payment buttons such as Shop Pay, Apple Pay and PayPal on the product page or in the cart skip the step where begin_checkout would normally run, so those shoppers show up as purchases without ever showing up as checkouts.
To audit your store, you need to pull the same dates for begin_checkout and purchase counts and make sure that checkouts are well above purchases. You should compare GA4 purchases to your Shopify orders, because if a gap occurs in either event, it means that you need to fix tracking before you can trust any conversion number.
Finally, you need to manually place an express checkout order and check GA4 DebugView to see if begin_checkout will fire on that path as well.
When a conversion rate drop is really bot traffic
On the same nutrition store, the conversion rate in GA4 fell from 2.44% to 0.38% overnight. Sessions went from 328 to 1,564; however, the purchases remained at 6, 11, and 7 a day, which is right inside the store’s normal range of 5 to 9 orders.
The extra traffic had no source and came almost entirely from desktop Chrome on Mac and landed on blog articles instead of product pages. It was a crawler, not a broken checkout.
When your conversion rate falls off a cliff like this, you need to look at orders and sessions separately before you do anything else. If your orders are steady but the sessions continue to spike, the checkout is not the issue, but the traffic is. You need to break down the spike by source, device and landing page because the bots tend to cluster on one source, one browser and the pages that don’t sell anything.
Until this traffic is filtered out, you need to judge each day on orders. Rolling back a release because of a conversion rate that is really measuring bots only adds a new problem on top of the old one.
Is the problem Shopify's native checkout or third-party apps?
None of the five failures that we looked at occurred inside Shopify’s checkout, and they all sat in the layers around it: the discount logic, the product page forms and shipping settings, and the link to fulfillment and tracking.
This is why we treat every app install, theme change, new discount and new fulfillment partner as a change to checkout, even when it doesn’t look like one. It takes a few minutes to place one real test order after each change, and it is a lot cheaper than finding out from a week of lost sales.
If you are selling on Amazon too, make sure you repeat these checks whenever you move inventory or fulfillment between the two channels. We have guides on launching a Shopify brand on Amazon and on channel conflict between Amazon and Shopify, which cover these topics in more detail.
Frequently asked questions about checkout drop-off
Why is my Shopify checkout abandonment high when the store looks fine?
The page logic can fail without error. Shipping thresholds, quantity scripts, shipping zones and tracking events can all break silently while the page looks fine.
The best way to find the problem is to place real test orders for every variant, discount and destination and then compare your tracking with your real orders.
Why is GA4 begin_checkout not firing on Shopify?
The answer truly depends on your tag setup or the app that is sending it, and express checkout buttons may skip the event entirely. If you notice that your checkouts are lower than your purchases for the same dates, fix the event first before trusting any checkout rate in your reports.
How do I fix a free-shipping threshold that breaks with discounts?
Make the threshold read the cart price before any discounts. One way to do this is with a Shopify Function. After you set it up, test carts just above and just below the line with each type of discount to make sure free shipping is honored.
Why is my Shopify quantity selector adding the wrong quantity?
Most of the time, there are two add-to-cart forms on the same page, left over from an A/B test or an app. Add each of the buy box versions to the cart at a couple of different quantities and make sure the cart matches what you selected.
Why did my Shopify conversion rate suddenly drop?
Check your orders before assuming the checkout is broken. If your orders are staying the same but your sessions are spiking, then you have bot traffic adding visits that never convert, and that drags your conversion rate down.
Final thoughts
Most of the checkout drop-off that you can actually fix occurs before the checkout page even appears.
All those things are decided earlier in the order path: the free-shipping promise, the quantity in the cart, the countries a customer can pick from, and the events your reports count. They fail without telling anyone.
If you do nothing else this week, compare your GA4 begin_checkout count against your purchases and then make one express checkout order yourself. Then you can work your way through your free shipping threshold with every discount type. Add each Buy Box version to the cart in a few quantities.
Match your shipping zones to what your fulfillment partner really covers. And when your conversion rate drops again, check orders and session sources before you roll anything back.
If your checkout numbers still don’t match up, our team will review the entire order path as part of our Shopify conversion rate optimization work. You can start by requesting your free marketing plan and see where your store is losing orders.
.webp)
Alex is the founder and CEO of Olifant Digital, where his team manages over $100M in annual client revenue across 50+ brands on Amazon and ecommerce. He sets the agency's strategy and methodology, audits client accounts, and reviews the team's work to make sure every brand is on track to hit its growth and profitability goals. He also leads team training, so the performance data and lessons from across all accounts shape how every account manager runs their clients.



