All posts

Shopify Checkout Not Working? How to Find the Cause and Fix It

Shopify checkout not working? Learn how to diagnose the exact failure point, from missing shipping rates to app conflicts, and fix it before it costs more sales.

A broken checkout is the most expensive thing that can go wrong in your store.

Think about who it affects. Not window shoppers. Not people who bounced off your homepage. It hits the customers who already decided to buy, picked their size, entered their address, and were reaching for their card. Those are the most valuable visitors you have, and a broken checkout sends every single one of them away at the exact moment they were ready to hand you money.

Worse, most of them won’t tell you. They’ll assume your store is dodgy and buy from someone else. By the time one person bothers to email you about it, you’ve probably lost dozens.

So let’s fix it properly.

The most important thing to understand is that “checkout not working” isn’t one problem. It’s about ten different problems wearing the same costume. A customer stuck on the shipping step has a completely different issue from a customer whose checkout button does nothing. Fixing the wrong one wastes hours you don’t have.

That’s why this guide starts with diagnosis instead of fixes.

Start here: match your symptom to the cause

Before you change a single setting, work out where in the flow things break. Ask a customer who complained, or reproduce it yourself with a real address.

The checkout button does nothing, or spins forever. The customer never even reaches the checkout page. This is almost always a theme or app script problem, not a payment problem. Skip ahead to the theme and app sections.

They reach checkout but get stuck at the shipping step. Usually the message mentions no available shipping methods or says the order can’t be shipped to that address. This is a shipping configuration issue, and it’s the single most common cause on the list.

They fill everything in and the payment step fails. Cards get declined, or the page says the store can’t accept payments. Now you’re looking at payment provider setup.

Checkout works for some customers and not others. International orders failing while local ones work, or one country breaking while the rest are fine. That points at markets, shipping zones, or currency settings.

It broke suddenly with no changes on your end. Check the Shopify status page first, then look at what updated on its own. Apps push updates without asking you.

Got a rough idea? Good. Now here are the causes behind each one.

No shipping rate matches the customer’s address

If Shopify can’t find a shipping rate that applies to a customer’s address, checkout simply stops. There’s no way for the customer to push past it, and the message they see doesn’t explain what went wrong.

This happens more often than merchants expect because it’s invisible from your side. Your own test orders use your own address, which is always covered. The gap only shows up for the customer in the region you forgot about.

The usual causes are a country or state that isn’t inside any shipping zone, or a zone that exists but has no rate attached to it. There’s also a sneakier version: you set up rates by weight or by price, and a particular cart falls into a gap between your brackets. A cart weighing 5.2kg when your rates cover up to 5kg and then restart at 6kg will fail, and everything else will look perfectly configured.

The fix: Go to Settings, then Shipping and delivery. Open the shipping profile your products belong to and check that every country and region you sell to sits inside an active zone with at least one rate attached.

Then do the thing that prevents this permanently: add a catch all flat rate to every zone. Price it high if you want. The point is that a customer always has something to select instead of hitting a dead end. This one habit fixes more lost checkouts than any other change on this list.

If you use weight or price based rates, check your brackets connect with no gaps between them.

Product data is blocking rate calculation

Sometimes the zones are fine and the rates are fine, but a specific product breaks the calculation. Add that product to a cart and checkout fails. Leave it out and everything works.

Look for three things. A product with its weight left at zero, when your rates are weight based. A product where the physical product checkbox is unticked, which tells Shopify no shipping is required at all and confuses mixed carts. And weight entered in the wrong unit, where grams got typed into a field expecting kilograms, producing a cart that no carrier will quote for.

There’s a related one that catches people after they add a warehouse or a second store location: if a location isn’t enabled in your shipping profile, products stocked there can’t generate rates.

The fix: Go to the product that breaks checkout, scroll to the shipping section, and confirm the physical product box is ticked and the weight is correct with the right unit. For large catalogs, export a CSV and sort by weight to find every zero at once. Then check Settings, Shipping and delivery, and confirm all your active locations are included in the profile.

The destination isn’t in an active market

Markets is a separate system from shipping zones, and this trips up nearly everyone who expands internationally. You can build a perfect shipping zone for a country and still have checkout fail, because the country isn’t part of an active market.

Both need to be right. The shipping zone decides whether a rate exists. The market decides whether you sell there at all.

The fix: Go to Settings, then Markets. Confirm the country is listed and active. If you recently added new shipping zones, this is the step people skip, and it produces failures that look exactly like a shipping problem while your shipping settings are flawless.

No active payment provider, or test mode is still on

If no payment provider is active, customers see a message saying the store can’t accept payments. Nothing you do elsewhere will fix that.

Test mode is the close cousin, and it catches experienced merchants constantly. You switch it on while building, launch day arrives with a hundred things to do, and nobody remembers to switch it off. Real cards get rejected and the error gives no hint why.

A useful tell: if orders appear in your admin but no money ever moves, or only specific test card numbers work, test mode is on.

The fix: Settings, then Payments. Your provider should show as active rather than inactive or setup incomplete. Click Manage, scroll to the bottom, and confirm test mode is unchecked. Then place one small real order with your own card and refund it. That’s the only way to be sure.

Payment provider credentials or account problems

If you use a third party gateway, expired or mistyped API credentials break the connection between Shopify and the processor. Nothing on your settings page looks obviously wrong.

If you use Shopify Payments, the account itself can be the problem. Shopify’s banking partners run reviews throughout the life of an account, not just at signup, and an account can be put on hold pending verification. Two details matter here. Only the store owner can resolve a hold, so staff members will hit a wall regardless of their permissions. And the notification goes to the store owner email address specifically, which lands in spam far more often than it should.

The fix: For third party gateways, open the provider under Settings and Payments and re-enter your credentials from scratch rather than assuming they’re still valid. For Shopify Payments, check your admin home page for banners, upload exactly what’s requested, and make sure the documents match your account details precisely. A business address that doesn’t match your utility bill will fail the review again.

While you wait on a review, enable a second payment method so you keep selling.

The checkout button doesn’t respond

This one feels different from the others because the customer never reaches checkout at all. They click, and either nothing happens or they get bounced back to the cart.

The cause is nearly always JavaScript. A script from an app or from custom theme code throws an error, which stops the event listener on the checkout button from firing. Everything else on the page keeps working, which is why the problem looks so strange.

The fix: Open your store in Chrome, press F12 to open developer tools, go to the Console tab, and click the checkout button. Errors will appear in red. Even if the message means nothing to you, it usually names the file or app responsible, and that alone tells you where to look.

Then confirm it’s the theme by testing a clean one, described below.

An app is interfering with checkout

Checkout customization tools, upsell apps, currency converters, subscription apps, and cart drawer apps all inject code into your storefront. Any of them can break the checkout flow, especially after an update.

The strongest signal here is timing. If checkout worked last Tuesday and broke on Wednesday, something changed on Wednesday. It doesn’t have to be something you did, because apps update themselves.

Uninstalling an app doesn’t always remove its code either. Leftover snippets in your theme files are a real cause of problems that persist after the app is gone.

The fix: Disable recently installed apps one at a time, testing checkout after each one. It’s tedious and it’s still the fastest reliable method. If you removed an app recently, check your theme’s layout and cart files for orphaned code it left behind.

Your theme or custom code broke it

Custom Liquid edits, a theme update, or a snippet you pasted in from a tutorial can all interfere with the cart and checkout flow.

Here’s the safest way to test this, and it’s worth knowing because most people do it dangerously.

Go to Online Store, then Themes. Add a free default theme like Dawn to your theme library, but do not publish it. Click Actions, then Preview, and run a test checkout inside the preview. Your live store stays exactly as it is while you test.

If checkout works on the clean theme and fails on yours, the problem is in your theme. If it fails on both, your theme is innocent and the cause is in your settings or an app.

The fix: Once you’ve confirmed the theme is the culprit, look at your recent edits first. If you’ve been editing live without backups, duplicate the theme before changing anything else so you have a working version to fall back on.

Inventory settings are silently blocking orders

If a product is out of stock and set to stop selling when it hits zero, customers can’t check out with it. Obvious enough. What isn’t obvious is when this happens to one variant inside an otherwise available product, or when a stock sync app quietly zeroes out your counts.

Multi location stores hit a version of this too. If inventory sits at a location that isn’t enabled for fulfilling online orders, Shopify treats it as unavailable.

The fix: Check the specific product and variant a customer reported. Look at Products, then Inventory, and confirm the count and which location holds it. If you never want stock levels to block sales, enable the option to continue selling when out of stock, though only do that if you can actually fulfill the orders.

Your store is on a trial or paused plan, or Shopify is down

Two quick ones that cost people entire afternoons.

Checkout is disabled during a free trial and on the pause plan. New store owners test their own checkout, see it fail, and start dismantling settings that were never broken. If this is you, go to Settings, then Plan, and pick a paid plan.

And sometimes it genuinely isn’t you. Check shopifystatus.com before touching anything, particularly if checkout broke suddenly with no changes on your end. During an incident, all you can do is wait.

The diagnostic most merchants never use

Here’s the tool that saves the most time, and hardly anyone touches it.

Go to Orders, then Abandoned checkouts. Open a recent failed one and scroll down to the history or timeline section. Expand the entries. What you’ll often find is the raw response logged from the payment gateway, including the actual decline reason.

That’s the information the customer never sees and you’d otherwise be guessing at. It tells you whether a bank declined the card, whether authentication failed, or whether the gateway rejected the request because of a configuration problem. Those are three completely different fixes.

Check this before you start changing settings. It frequently turns a two hour investigation into a five minute one.

A sane order to work through

If you’d rather follow a checklist than read every section:

  1. Check shopifystatus.com
  2. Confirm your plan is paid, not trial or paused
  3. Reproduce the failure yourself with a real address and note exactly where it stops
  4. Open Orders, then Abandoned checkouts, and read the history log
  5. If it stops at shipping, check zones, rates, markets, and product weights
  6. If it stops at payment, check provider status and test mode
  7. If the button itself is dead, check the browser console for errors
  8. Preview a clean Dawn theme without publishing it
  9. Disable recent apps one at a time
  10. Contact Shopify Support with what you’ve already ruled out

That last point matters more than it sounds. Support can see error codes on your account that are invisible to you. Arriving with “checkout stops at the shipping step for German addresses, the zone and rate exist, and it also fails on a clean Dawn theme” gets a real answer far faster than “my checkout is broken.”

Build a buffer before you need one

Here’s the pattern that costs merchants the most money.

Checkout breaks. You spend two days working through causes, waiting on support, testing themes. During that entire window, your ads keep running and your traffic keeps arriving. Every visitor hits the same wall and leaves.

Your traffic doesn’t pause because your checkout did.

So once you’ve fixed the immediate problem, spend twenty minutes making the next one cheaper. Add a catch all flat shipping rate to every zone so a missing rate can never dead end a customer again. Enable a second payment provider so a single gateway issue doesn’t take the whole store offline. Turn on abandoned checkout recovery emails, because some of the people who hit a broken checkout will come back if you remind them.

And get in the habit of running one real test order a month, from a different country than your own if you sell internationally. Most checkout failures are found by customers rather than merchants, which means they’ve usually been running for days before anyone notices. A monthly check turns a two day outage into a two hour one.

Frequently asked questions

Why does my Shopify checkout say no shipping methods are available?

Shopify couldn’t find a rate matching that customer’s address and cart. Either the destination isn’t in an active shipping zone, the zone has no rate attached, the cart falls into a gap between your weight or price brackets, or a product is missing its weight. Adding a catch all flat rate to every zone prevents most cases.

My checkout button does nothing when clicked. What’s wrong?

That’s almost always a JavaScript error from an app or theme code, not a payment issue. Open your browser console with F12 and click the button to see the error. Then preview a clean Dawn theme without publishing it to confirm whether your theme is responsible.

Checkout works for local customers but fails for international ones. Why?

Check two separate places. Settings and Shipping and delivery for a zone and rate covering that country, and Settings and Markets to confirm the country is in an active market. Both must be configured. A perfect shipping zone still fails if the market isn’t active.

How can I test checkout without risking my live store?

Add a default theme like Dawn to your theme library and use Actions and Preview instead of Publish. Your live store is unaffected. For payment testing, place a small real order with your own card and refund it immediately, since that’s the only way to confirm the gateway truly works end to end.

Can I see why a specific customer’s checkout failed?

Often yes. Go to Orders, then Abandoned checkouts, open the failed attempt, and expand the history section. Payment gateway responses are frequently logged there, including the decline reason the customer never sees.

Checkout broke suddenly and I changed nothing. What now?

Check shopifystatus.com for an active incident. If nothing’s reported, consider that apps update themselves without asking, your SSL certificate may have lapsed, or Shopify may have placed a review on your payments account. Sudden failures with no action on your side are usually one of those three.