A broken WooCommerce checkout usually comes down to a plugin conflict, a payment gateway setting, a theme problem, or a missing webhook. The fastest way to fix it is to match your exact symptom to its cause first, because a checkout that will not load and a checkout where the button does nothing are two completely different problems.
If your checkout is broken right now, you are losing sales while you read this. So let us skip the long introduction. Find your symptom in the table below, jump to that section, and fix it. One thing before you do: there is a failure on this list that most store owners never notice, because it does not look like a problem at all. It is the first thing worth checking, and it is covered right after the table.
Quick WooCommerce Checkout Troubleshooting Flow
Not sure where to start? Use this quick flow to narrow down the most likely cause of your checkout problem.
WooCommerce checkout is not working
↓
Does the checkout page load?
- No → Check caching, plugin conflicts, PHP errors, and WooCommerce logs.
- Yes → Continue below.
↓
Does the Place Order button work?
- No → Check the browser Console and Network tabs for JavaScript, AJAX, or Store API errors.
- Yes → Continue below.
↓
Does the payment fail or the order status not update correctly?
- Yes → Check your payment gateway settings, webhook status, credentials, and WooCommerce gateway logs.
- No → Check shipping, tax, theme compatibility, and third-party checkout integrations.
Find your symptom
| What you are seeing | Most likely cause | Go to |
| Customer paid but no order appeared | Missing or broken payment webhook | Section 1 |
| No payment methods showing at checkout | Gateway incompatible with your checkout type | Section 2 |
| Why is WooCommerce checkout stuck loading? | Plugin conflict, cache, or a script failing | Section 3 |
| Why does Place Order do nothing? | A JavaScript error stopping the request | Section 4 |
| Button is there but greyed out or invisible | Theme or page builder styling | Section 5 |
| Checkout sends people back to the cart | Session or cookie problem | Section 6 |
| “Your cart is empty” on the checkout page | Same session or cookie problem | Section 6 |
| Why does checkout redirect to cart? | Same session or cookie problem | Section 6 |
| Why does WooCommerce payment fail? | API keys, SSL, or gateway settings | Section 7 |
| Works on desktop, broken on phones | Cache or a mobile-specific script issue | Section 8 |
| It broke right after an update or change | Whatever you just changed | Section 9 |
Before you start, know which checkout you are running, because a few of these fixes only apply to one of them. Since WooCommerce 8.3, new stores use the Checkout block (built with JavaScript). Older stores use the Classic checkout (the [woocommerce_checkout] shortcode, built with PHP). Go to WooCommerce, then Settings, then Advanced, then Page Setup, and open your Checkout page. If you see the shortcode, you are on Classic. If you see a Checkout block, you are on the newer one. Keep that answer handy.
Section 1: Customer paid but WooCommerce did not update correctly
This is the one to check first, even if it is not the symptom that brought you here. It is the most expensive failure in this entire guide because it is invisible from your side.
Here is what happens. A customer pays. The money leaves their account. But no order ever appears in your WooCommerce dashboard. From where you are sitting, the store looks like it is simply having a quiet day. You only find out when someone emails you asking where their order is, and by then it may have been happening for weeks.
Why it happens
Payment gateways use webhooks and APIs to keep WooCommerce informed about payment events. A missing, blocked, or misconfigured webhook can prevent WooCommerce from correctly updating the payment status or processing important gateway events. The exact behavior varies by payment gateway, so a webhook problem does not always mean the order itself was never created.
For example, the payment may succeed at Stripe or PayPal while the WooCommerce order remains pending, on hold, or fails to update correctly. Security plugins, firewalls, incorrect webhook URLs, expired credentials, or changes made during a site migration can all interrupt this communication.
How to check it
Log into your payment gateway’s dashboard (not WordPress) and look for a Webhooks section. Confirm a webhook exists and points at your live site. Each gateway uses its own URL format, and your gateway’s documentation will give you the exact one to use. Razorpay, for example, uses a URL ending in /wc-api/WC_Razorpay. Then place a small real test order and confirm it appears in WooCommerce.
Make this a habit, not a one-off
Check your webhook after every site migration, every domain or SSL change, and any time you install a firewall or security plugin, because all four of those can quietly break it. It is worth putting on your regular maintenance checklist rather than trusting you will notice.
Section 2: No payment methods appear at checkout
If your checkout loads properly but there is nowhere to pay, the cause is almost always that your payment gateway does not work with the type of checkout you are running.
Here is the part most guides get wrong. WooCommerce does have a warning system for this: plugin developers are supposed to declare whether their extension works with the Checkout block. When a plugin has declared itself incompatible, WooCommerce shows you a warning in the block’s settings sidebar, along with a one-click button to switch that page back to Classic checkout. If all of your active gateways are incompatible, WooCommerce even shows a warning on the checkout page itself saying no payment methods are available.
So check the sidebar first
Open your Checkout page in the block editor, click the Checkout block, and look at the settings sidebar on the right. If a compatibility warning is there, you have your answer and your fix in the same place.
But here is the catch nobody mentions
That warning only appears if the plugin developer did the work to declare their status. An old or abandoned plugin that never added the declaration does not get flagged as incompatible. It just quietly does not run, with no warning at all. So no warning does not mean no problem.
If you suspect an older gateway or checkout add-on is the issue, check its documentation for confirmed block support, or temporarily switch that page to Classic checkout and see if the payment method reappears. If it does, you have found your answer. Switching back to Classic is a perfectly legitimate choice, and WooCommerce still maintains it. Full details are in WooCommerce’s own documentation on customizing checkout.
Section 3: Why is WooCommerce checkout stuck loading?
A checkout that never finishes loading is usually one of three things: a caching plugin serving a broken saved copy, a security plugin blocking the request the checkout needs to make, or a plugin conflict.
Quick Check
Test checkout in a private browser window before changing anything.
Open it in a private window first
If checkout works in incognito but not in your normal browser, it is a cache or cookie issue, not a broken site. Clear your caching plugin, your CDN if you use one, and your browser.
Check WooCommerce logs before disabling plugins
WordPress Dashboard → WooCommerce → Status → Logs
- fatal errors
- payment gateway logs
- shipping plugin errors
- API errors
- PHP exceptions
If the checkout broke at 2:15 PM, start with log entries generated around 2:15 PM rather than reading an entire log file.
Check Your PHP Memory and Server Limits
A complex WooCommerce checkout may trigger several processes at once, including payment processing, inventory updates, transactional emails, CRM integrations, invoice generation, and third-party API calls.
If your server does not have enough memory or a process takes too long to complete, checkout can fail, hang, or return a server error.
Go to:
WooCommerce → Status → System Status
Check the following values:
- WP Memory Limit
- PHP Memory Limit
- PHP Version
WooCommerce currently recommends a WordPress memory limit of at least 256 MB. If your available memory is lower, increasing it may help on stores that use multiple checkout extensions or integrations.
Also review your WooCommerce and server logs for errors such as:
Allowed memory size exhausted
or
Maximum execution time exceeded
If you see an execution-time error, ask your hosting provider to investigate and increase the PHP execution limit if necessary. Avoid setting an arbitrary value without first confirming what is causing the slow request, because the required limit can vary depending on your plugins, integrations, and hosting environment.
WooCommerce Pages That Should Not Be Cached
WooCommerce checkout depends on dynamic cart, session, and customer data, so key account and checkout pages should not be served from cache.
Make sure these pages remain dynamic:
/cart//checkout//my-account/
You should also make sure your caching or CDN setup does not incorrectly cache WooCommerce session cookies such as:
woocommerce_cart_hashwoocommerce_items_in_cartwp_woocommerce_session_
The exact exclusion syntax varies between caching plugins, so do not copy the same rule blindly into every plugin. The important point is that Cart, Checkout, and My Account should remain uncached and WooCommerce sessions should be allowed to update normally.
If you use WP Rocket, check:
WP Rocket → Settings → Advanced Rules → Never Cache URL(s)
Then confirm that your WooCommerce checkout, cart, and account pages are excluded correctly.
Does Checkout Hang After You Enter an Address?
If the checkout page loads normally but starts spinning or stops responding after the customer enters or changes their shipping address, the problem may be coming from a shipping, tax, or address-validation service.
Plugins that calculate live rates or taxes may need to contact external services such as FedEx, UPS, USPS, DHL, TaxJar, Avalara, or an address-validation API. If that external request times out, credentials expire, or the service returns an error, WooCommerce may appear to hang while it waits for updated shipping or tax information.
To diagnose the issue, open:
Chrome DevTools → Network
Then enter or change the shipping address and watch for failed or unusually slow requests.
You should also check:
WooCommerce → Status → Logs
Look for logs created by your shipping, tax, or related checkout plugin around the time the problem occurred. Errors involving API authentication, timeouts, invalid credentials, or failed rate calculations can help identify the service causing the checkout delay.
Turn off your security plugin temporarily
Checkout works by sending background requests to your server, and firewalls and security plugins sometimes block those, which leaves the page spinning forever. If turning it off fixes checkout, turn it back on and add an exception rather than leaving it off.
Then test for a plugin conflict
Deactivate everything except WooCommerce, load checkout, and if it works, turn plugins back on one at a time until it breaks again. That last one is your culprit. The full method is in our guide to finding a plugin that is breaking your site, and it works the same way here.
If the page is not just stuck but showing an actual error, you may be looking at a 500 server error or a completely blank white screen, both of which have their own fixes.
Section 4: Why does Place Order do nothing?
The form fills in fine, the customer clicks Place Order, and nothing happens at all. No error, no spinner, nothing. This is almost always a JavaScript error, and your browser will tell you exactly what it is in about ten seconds.
Press F12 to open developer tools, click the Console tab, then reload checkout and click the button. A red error message will appear naming a file. If that file sits inside a plugin folder, you have found your problem plugin.
Also check the Network tab
Switch to it, filter by Fetch/XHR, and click Place Order again. If you see a failed request in red, checkout is trying to talk to your server and something is stopping it. That is usually a security plugin, a firewall, or a server limit.
Check What the Failed Checkout Request Returns
The Network tab can show whether WooCommerce is sending the checkout request correctly and what the server returns when it fails.
If You Are Using the Classic Checkout
Look for WooCommerce AJAX requests such as:
?wc-ajax=checkout
or
?wc-ajax=update_order_review
Click the failed request and check its status code and response.
A 403 Forbidden response can indicate that a security plugin, firewall, CDN, or caching rule is blocking the request.
If the response is simply -1, WooCommerce may be rejecting the request because of a failed security check or an expired or cached nonce. Clear all website, server, and CDN caches, then test the checkout again in a private browser window.
If You Are Using the Checkout Block
The newer WooCommerce Checkout Block uses the WooCommerce Store API instead of the same AJAX flow used by the Classic Checkout.
In the Network tab, look for requests such as:
/wp-json/wc/store/v1/checkout
or
/wp-json/wc/store/v1/cart
Open any failed request and review the status code and response message. Checkout Block requests rely on WooCommerce security tokens such as nonces or Cart Tokens, so cached or invalid session data can cause the request to fail.
If you see a 403, authentication error, or failed Store API request, clear your caches and temporarily disable any security or optimization rule that may be interfering with WooCommerce REST API requests. Re-enable those protections after testing.
Developer Check
A 403, -1 response, JavaScript exception, or failed Store API request usually gives you a more useful clue than the message visible on the checkout page.
One specific cause worth checking
Performance plugins that delay, defer, minify, or combine JavaScript can sometimes interfere with WooCommerce checkout or payment gateway scripts.
Temporarily disable JavaScript optimization in WP Rocket, Autoptimize, LiteSpeed Cache, or whichever performance plugin you use, then test checkout again in a private browser window.
If the Place Order button starts working, do not leave JavaScript optimization disabled permanently. Open Chrome DevTools, check the Console and Network tabs, and identify the specific checkout or payment gateway script that is failing. Then exclude only that script from delay, defer, or minification according to your performance plugin’s settings.
Avoid copying a universal exclusion list such as woocommerce, wc-checkout, stripe, or paypal-checkout into every site. The exact scripts can vary depending on your payment gateway, plugin version, and whether you use the Classic Checkout or the newer Checkout Block.
Section 5: The button is greyed out or invisible
Sometimes the button is not broken at all. It is right there, doing its job, and simply cannot be seen or clicked.
Theme and page builder styles are the usual reason
If your store uses Elementor, Bricks, Divi or a similar builder, those tools apply global button styling across your whole site. Sometimes that styling lands on WooCommerce’s checkout button too, and if the text colour ends up matching the background colour, you get an invisible button. It is still functional. Nobody can see it.
Right-click where the button should be and choose Inspect. If the button element is in the code but you cannot see it on screen, this is your answer, and the fix is a small CSS adjustment rather than anything to do with WooCommerce. Our guide to Elementor problems covers how these style conflicts happen and how to trace them.
A greyed-out, unclickable button usually means a required field has not been completed or has failed validation, and the error message is not displaying properly. Fill in every field and see whether it becomes active. If a field is hidden by your theme or a checkout customization plugin but still marked as required, checkout can never complete, because the customer cannot fill in something they cannot see.
Section 6: Why does checkout redirect to cart?
If shoppers get bounced back to the cart, or reach checkout only to be told their cart is empty, or see “your session has expired,” these are all the same underlying issue: WooCommerce is losing track of who the shopper is between pages.
WooCommerce uses cookies and sessions to remember what is in someone’s cart. When something interferes with that, the cart appears to vanish.
The usual causes:
Caching, again
A cached cart or checkout page breaks the session almost every time. Confirm both pages are excluded from caching.
Page settings pointing at the wrong place
Go to WooCommerce, then Settings, then Advanced, and confirm the Cart page and Checkout page are set to the correct pages. If someone deleted and recreated a page at any point, this setting can be pointing at a page that no longer exists.
A mismatch between http and https, or www and non-www. If part of your site loads on one and part on the other, cookies do not carry across. Check Settings, then General, and make sure your WordPress Address and Site Address both use the same format, with https.
A security plugin or server rule blocking cookies. Less common, but worth checking if the first three come back clean.
Section 7: Why does WooCommerce payment fail?
If checkout loads, the button works, but payment itself fails, the problem sits with the gateway configuration rather than with WooCommerce.
Enable WooCommerce logs
WooCommerce → Settings → Payments → [Gateway] → Enable Logging
Check your API keys
Go to WooCommerce, then Settings, then Payments, and open your gateway. The single most common mistake here is test keys left in place on a live store, or live keys entered into the test field. Confirm you are using live credentials and that test mode is switched off.
Check your SSL
Payment gateways require a secure connection, and without a valid SSL certificate the payment section may not load or work at all. Visit your site with https and confirm there is no browser warning. If you recently added SSL, also make sure your site URLs were updated to https in Settings, then General.
Check for two gateways fighting
Running several payment plugins that do similar things, especially older ones, can cause them to interfere. Keep the ones you actually use and remove the rest.
Check the gateway’s own dashboard for declined transactions. Sometimes payments are failing on the gateway’s side (fraud rules, account limits, verification issues) and WooCommerce is only reporting what it was told.
Section 8: It works on desktop but not on mobile
Mobile-only checkout failures are almost always either caching or a script problem, because the checkout code itself does not change between devices.
Test on a real phone using mobile data, not your office wifi. Desktop browsers set to a narrow width do not reproduce real mobile conditions.
Clear any separate mobile cache
Some caching plugins keep a separate cached version for mobile visitors, which means the desktop version can be fine while the mobile one serves something broken.
Check for JavaScript errors on the phone
If something fails only on mobile, it is often a script that is heavier or slower there. A slow checkout on mobile can also look like a broken one to an impatient shopper, which is a different problem covered in our guide to speeding up WooCommerce checkout.
Section 9: It broke right after something changed
If the checkout was working yesterday and is broken today, do not start a general investigation. Start with whatever changed.
Was it a plugin or WooCommerce update? Deactivate the updated plugin and test. If checkout returns, you have your answer, and you can either roll that plugin back or contact its developer.
Check for Outdated WooCommerce Template Overrides
Your theme or child theme may contain customized WooCommerce template files that are no longer compatible with the latest version of WooCommerce.
Was it a theme change?
Switch temporarily to a default theme like Storefront and test checkout. If it works, your theme is overriding WooCommerce templates with outdated code.
Go to:
WooCommerce → Status → System Status → Templates
Look for any template files marked as outdated. You may see files such as:
your-theme/woocommerce/checkout/form-checkout.php
If WooCommerce flags a checkout-related template as outdated, it can cause broken layouts, missing fields, JavaScript errors, or checkout functionality that stops working after a WooCommerce update.
Do not simply delete an outdated template file, especially if your theme contains custom checkout changes. Back up the file first, then compare it with the latest WooCommerce template and update the customizations carefully.
If you are unsure whether the theme override is causing the problem, temporarily switch to a default WooCommerce-compatible theme such as Storefront and test checkout again.
Was it a migration or a host move?
Check your payment gateway API keys, your SSL, your site URLs, and your webhooks. All four commonly break during a move, and this is exactly why the migration process includes a post-move checklist.
Did you add SSL?
Confirm your site URLs were updated to https everywhere, and re-check your gateway settings.
Did you install a security plugin or firewall?
Add exceptions for checkout requests rather than leaving the plugin off.
This is also the strongest argument for testing changes on a staging site before they reach your live store. In a store, an untested update does not just look bad. It stops you taking money.
Work down the list rather than trying everything at once, so you know which step actually fixed it.
Test your checkout regularly, not just when it breaks
Most checkout problems are found by customers, which means they are found late and they are found by the person you least want finding them.
Place a small real order through your own store once a month, and after every update, plugin change, migration or SSL change. Complete it properly with a real payment, confirm the order appears in WooCommerce, and confirm the confirmation email arrives. If it does not arrive, that is a separate email delivery problem rather than a checkout one, and it is just as damaging, because customers who get no confirmation assume the order failed.
Ten minutes a month is the cheapest insurance available to an online store.
Key takeaways
Match the symptom to the cause before changing anything, because a checkout that will not load and a button that does nothing have different fixes. Check for the invisible failure first: if payments are succeeding without creating orders, a webhook is missing or blocked, and that one can run undetected for weeks.
If no payment methods appear, look for a compatibility warning in the Checkout block sidebar, and remember that no warning does not mean no problem, since older plugins fail silently. Caching and security plugins cause a large share of everything else, so test in a private window and rule those out early. And once it is fixed, place a real test order monthly, because the alternative is finding out from a customer who already paid.
WooCommerce Checkout Still Broken?
If you’ve checked the logs, cache, payment gateway, plugin conflicts, and theme compatibility but your checkout still isn’t working, Survyc can help diagnose the issue across WooCommerce, your payment gateway, plugins, theme, and hosting environment.
We can trace the error, identify what is breaking checkout, and recommend the safest fix without making unnecessary changes to your live store.
Frequently Asked Questions
Why is my WooCommerce checkout page not loading?
Usually a caching plugin serving a broken saved version, a security plugin blocking the background requests checkout needs, or a plugin conflict. Test in a private browser window first, clear every cache, confirm your checkout page is excluded from caching, then deactivate plugins one at a time to find the conflict.
A customer paid but no order was created. What happened?
The payment gateway’s webhook is missing, misconfigured or blocked. Gateways confirm payments in the background by sending a message to your site, and that URL is set inside the gateway’s dashboard rather than in WooCommerce. Check it there, then place a small test order to confirm orders now appear.
Why is my Place Order button not working?
Almost always a JavaScript error. Press F12, open the Console tab, and click the button; a red error naming a plugin file identifies the cause. A common culprit is a performance plugin minifying or combining payment gateway scripts, so add those scripts to your plugin’s exclusion list.
Why are no payment methods showing at checkout?
Your gateway is likely incompatible with the Checkout block. Open the Checkout page in the block editor and check the block’s settings sidebar for a compatibility warning, which includes a one-click switch to Classic checkout. Older plugins can fail silently without any warning, so absence of a warning does not rule this out.
Why does WooCommerce checkout keep redirecting to the cart?
WooCommerce is losing the shopper’s session, usually because the checkout page is being cached, the cart or checkout page is set incorrectly under WooCommerce settings, or your site mixes http and https or www and non-www URLs so cookies do not carry across pages.
My checkout broke after an update. What should I do first?
Deactivate whatever was updated and test checkout again. If it works, you have found the cause and can roll that plugin back or contact its developer. This is why testing updates on a staging copy first matters more for stores than for other sites, since a broken checkout stops revenue immediately.
How often should I test my own checkout?
Once a month, and after every update, plugin change, migration or SSL change. Place a small real order, confirm it appears in WooCommerce, and confirm the confirmation email arrives. Most checkout failures are discovered by customers, which means they are discovered far too late.