Shopify Checkout Problems: Detect the Drop-Off Shopify Won't Show You
Bottom line
Shopify checkout runs on Shopify's servers. Your theme, your apps, and your analytics stop at the checkout door, so when checkout breaks or degrades, Shopify's admin often shows nothing wrong. askbowtie does not fix your checkout. It detects the leak you can't see: exit rate spiking on your cart and checkout-entry pages (get_top_pages sorted by exit_rate), conversions dropping while traffic holds (get_conversions vs get_traffic), and JavaScript errors on the storefront pages that feed checkout (get_incidents). Once you can see WHERE buyers vanish and WHEN it started, the fix is usually a config change, an app, or your theme. This page covers both halves: detection first, then the diagnosis checklist.
The problem
Every failed checkout is a lost sale from someone who wanted to buy. But Shopify's managed checkout is a black box: no server logs, no error console, and third-party scripts largely can't run inside it. Your store can bleed orders for a week while status.shopify.com stays green and your admin shows no error.
The usual discovery path is the worst one: you notice revenue is down, days late, with no idea when it started or what changed. By then you can't connect the drop to the app you installed or the theme update you published.
The idea: watch the doorway and the outcome
You can't instrument inside Shopify's checkout, so instrument the two things you CAN see and let the black box reveal itself by contrast:
| Signal | What it tells you | Tool |
|---|---|---|
Exit rate on /cart and checkout entry |
Buyers reach the door but don't come back with an order | get_top_pages sorted by exit_rate |
| Conversion count and rate over time | The outcome moved, and exactly when | get_conversions |
| Traffic over the same window | Rules out "sales are down because visits are down" | get_traffic |
| JS errors on storefront pages | A broken theme or app is blocking buyers BEFORE checkout | get_incidents, drill in with get_incident_detail |
| What changed and when | App installs, theme updates, deploys, logged as notes | get_notes |
A healthy store has a stable cart exit rate. When checkout breaks, sessions still END on /cart or the checkout-entry URL because the next page never completes. Exits show where sessions end, so a sudden exit-rate spike on the doorway page is the checkout failure signature, even when no error is visible anywhere.
One honest caveat: the askbowtie tracker runs on your storefront (your theme), not inside Shopify's checkout pages. Conversions come from the order-confirmation page or, more robustly, server-side events from an order webhook, which no ad blocker or checkout sandbox can hide.
A real week (demo data)
All numbers below are demo data, shown to make the shape of the detection concrete.
A store does 1,900 sessions and 86 orders a week. Tuesday, an app auto-updates. Nobody notices anything.
- Friday, you ask Bowtie: "how are conversions this week?"
get_conversionsshows 41 orders, down from 86.get_trafficshows sessions flat at 1,880. Traffic held; the outcome halved. get_top_pagessorted byexit_rate:/cartexit rate is 61%, up from a 34% baseline. Buyers reach the cart and vanish.get_incidents: aTypeError: Cannot read properties of undefinedfiring on/cart, 214 sessions affected, first seen Tuesday 14:20.get_incident_detailnames the script: it belongs to the updated app.get_notesconfirms nothing else changed that day.
Detection took four questions. The fix (disable the app, contact its developer) is the easy part once you know Tuesday, /cart, that app. Without the exit-rate and conversion trail, this store loses 45 orders a week until someone happens to test checkout themselves.
Quick diagnosis checklist
Once detection tells you checkout is leaking, work through causes in this order and stop when you find the problem:
| Check | How | If broken |
|---|---|---|
| Shopify status | status.shopify.com | Wait it out; nothing you can fix |
| Payment gateway | Run a test transaction | Fix gateway config, re-enter credentials |
| Specific product | Test checkout with different products | Product or inventory setup issue |
| Theme code | Test with Shopify's default theme | Your theme is the problem |
| Apps | Disable third-party apps, re-test | App conflict (see below) |
Rule out Shopify first. If status.shopify.com shows a checkout incident, every minute you spend debugging your own store is wasted.
Common checkout failures and their fixes
"There was a problem with checkout"
This vague error is usually payment gateway configuration. Check that gateway credentials are current, the gateway is enabled for the customer's currency and region, and test mode is off in production. Re-enter API keys; check the gateway's own status page. The detection tell: exits spike on the payment step's entry page while get_incidents shows nothing, because the failure is server-side on Shopify.
Payments declined
| Symptom | Likely cause | Fix |
|---|---|---|
| All payments declined | Provider misconfiguration | Verify Shopify Payments settings and API keys |
| Specific card types fail | Card type not enabled | Enable it in payment settings |
| International payments fail | Currency or region restriction | Check provider regional settings |
| "Error processing payment" | Gateway timeout | Check the provider's status page |
Diagnose in Shopify Admin under Settings, then Payments. Test with Shopify's Bogus Gateway in test mode, and check the provider's dashboard for decline reasons.
Cart empties on checkout
Products disappear between cart and checkout. Check inventory counts, variant availability, and product status (active vs draft). This one is visible in your data as high exits on /cart with zero checkout entries.
Customers can't enter a shipping address
Almost always a shipping zone gap: the customer's region has no rate defined, or the cart's weight or price falls outside every rate's limits. Add a rest-of-world fallback rate and test checkout as a customer from the affected region.
Checkout displays incorrectly
Broken layout or missing buttons before the Shopify-hosted steps means your theme or an app is injecting broken code. Test with the default theme, then with apps disabled. get_incidents usually names the offending script directly, and get_incident_detail gives you the failing URL, error message, and selector to hand to the developer.
App conflicts: find the culprit systematically
Apps are the most common cause of storefront-side checkout breakage. Don't guess; bisect:
- Note when the problem started. Your
get_conversionstrend andget_incidentsfirst-seen timestamps give you the exact day, andget_notestells you what you changed around it. - List apps installed or updated around that time.
- Disable the suspects, then re-test checkout.
- Re-enable one at a time, testing after each. The one that re-breaks it is your culprit.
Common patterns: two cart apps fighting over cart behavior, overlapping features interfering, script load-order issues, and API rate limiting from too many apps polling at once. Before installing any app, check its reviews for conflict reports, and test on a development store if you have one.
Theme problems: recovery steps
A theme update that overwrites customizations can break the buy button, the cart, or checkout entry silently.
Prevention: duplicate your theme before every update, document each customization (file, change), and keep custom CSS/JS in separate files.
Recovery:
- Shopify keeps previous theme versions. Duplicate the current broken state first so you lose nothing.
- Download the theme file (Themes, then Actions, then Download).
- Compare against your documented customizations and reapply.
- Re-test checkout, then watch
/cartexit rate for a day to confirm the leak closed. That last verification step is the one everyone skips, and it's the only proof the fix worked for real buyers rather than for you in incognito mode.
When to contact Shopify support
Escalate when checkout fails on a fresh default theme with no apps, when the error references Shopify-side systems, or when the gateway works independently but fails inside Shopify. Bring evidence: steps to reproduce, the exact error, browser console output, and when it started. Your get_incidents first-seen timestamp and the affected-session count make that "when it started" answer precise instead of "sometime last week".
Questions you can now answer
- Is my checkout leaking right now? ->
get_top_pagessorted byexit_rate: is/cartor checkout entry above its baseline? - Did sales drop because of traffic or because of checkout? ->
get_trafficvsget_conversionsover the same period. - When exactly did it break? ->
get_conversionstrend plusget_incidentsfirst-seen timestamps. - What changed around that time? ->
get_notesfor app installs, theme updates, deploys. - Which script is breaking my cart page? ->
get_incident_detail: failing URL, error message, selector. - Did my fix actually work? -> re-check
/cartexit rate and conversion rate the next day.
MCP reference (for agents)
Detection surface for a Shopify store (the tracker runs on the storefront; Shopify's hosted checkout steps are not directly instrumented; conversions arrive via the order-confirmation page or server-side webhook events):
Tools:
get_top_pages { domain, period?, sort:"exit_rate" }-> pages ranked by where sessions END. Watch/cartand the checkout-entry URL. Exit rate, not bounce rate: bounce is ~0% mid-funnel by definition.get_conversions { domain, period? }-> conversion counts, rates, top converting pages. Compare periods to date the drop.get_traffic { domain, period? }-> sessions/pageviews over the same window, to separate a traffic problem from a checkout problem.get_incidents { domain }-> active JS errors and broken elements ranked by business impact;get_incident_detail { domain, id }-> failing URLs, error messages, CSS selectors.get_page { domain, page:"/cart" }-> full metrics for the doorway page.get_engagement { domain, page:"/cart" }-> are buyers clicking the checkout button at all, or leaving without interacting?get_notes { domain }/add_note-> the change log. Read it BEFORE diagnosing; write a note after every app install or theme update.
Question to tool:
- "is checkout broken" -> get_top_pages sorted by exit_rate (cart/checkout-entry spike vs baseline) + get_conversions (drop with flat get_traffic).
- "when did it break" -> get_conversions trend + get_incidents first_seen.
- "what caused it" -> get_notes (what changed) + get_incident_detail (which script).
- "is it fixed" -> re-run get_top_pages and get_conversions after the fix.
Recommended agent loop: get_conversions and get_traffic to confirm an outcome drop with stable traffic, get_top_pages by exit_rate to locate the doorway page, get_incidents + get_incident_detail to name the script, get_notes to correlate with a change, then report the leak with its start date and affected-session count. askbowtie detects and dates the leak; the fix (gateway config, app bisection, theme recovery above) is human or agent work in Shopify admin.
Related
- Why Customers Abandon Checkout for drop-off that isn't breakage
- Error Monitoring for the full JS-error detection guide
- Fixes & Troubleshooting for the rest of this cluster