Every minute your WooCommerce checkout is broken, people are landing on your site, trying to give you money, and leaving without doing it. This isn’t a “get to it this week” bug. Below is a triage table to find your exact symptom fast, then a systematic debugging method, then the specific fixes for every common cause.
Quick Triage: Match Your Symptom to the Likely Cause
| What you’re seeing | Most likely cause |
|---|---|
| Checkout stuck on loading / infinite spinner | JavaScript error or a plugin blocking the AJAX request that loads checkout fields |
| Checkout page is blank / white screen | A PHP fatal error — usually a plugin or theme incompatibility |
| “Proceed to Checkout” button does nothing when clicked | JavaScript error, or a caching plugin serving a stale cart page |
| Checkout page loads but fields are missing | Theme conflict, or checkout page content was edited/replaced |
| Redirect loop on checkout | SSL misconfiguration or conflicting “force SSL” settings between WooCommerce and a security plugin |
| Payment isn’t going through | Payment gateway API keys, SSL, or the gateway plugin needs updating |
| Order isn’t created even though payment succeeded | A broken webhook/IPN — the payment processor and WooCommerce aren’t talking to each other |
| Works on desktop but not mobile | Theme/plugin CSS or JS issue that only breaks at mobile viewport widths |
The Systematic Way to Debug Any Checkout Failure (Do This First)
Before touching any specific fix below, run this sequence. It isolates the cause in most cases within 10-15 minutes, and it’s the same process regardless of which symptom you’re seeing.
Plugin Conflicts
This is the single most common cause of a broken checkout. Any plugin that touches the cart, hooks into WooCommerce’s checkout process, or loads its own JavaScript on the checkout page can break it — not just plugins that look checkout-related. A/B testing tools, chat widgets, and analytics plugins cause this constantly.
To confirm it’s a plugin: deactivate every plugin except WooCommerce and your payment gateway, then test checkout. If it works, reactivate plugins one at a time, testing checkout after each one, until it breaks again. That plugin is the conflict. From there you’re choosing between an update, a config change, or replacing it.
If you can’t deactivate plugins on the live site (an active store, real customers), do this on a staging copy first — never debug by deactivating plugins directly on a site that’s actively taking orders.
Theme Conflicts
WooCommerce expects specific template hooks and functions from the active theme. A theme that doesn’t declare WooCommerce support properly, or that overrides checkout templates without keeping them updated against new WooCommerce versions, will show a broken or incomplete checkout page — often with fields simply missing rather than an outright error.
To test: switch to a default WordPress theme (Twenty Twenty-Four or similar) temporarily and reload checkout. If it works, the problem is in your theme’s WooCommerce templates or functions.php. Check the theme’s changelog for a WooCommerce-compatibility update, or if you’re customizing checkout templates directly, compare them against WooCommerce’s current template versions — a stale overridden template is the usual culprit.
JavaScript Errors
WooCommerce’s checkout page is JavaScript-heavy — it uses AJAX to update totals, load payment fields, and validate the form without a full page reload. A JS error anywhere on the page can silently break checkout even if the error has nothing to do with WooCommerce’s own code.
Open browser dev tools (F12), go to the Console tab, and reload the checkout page. Any red error text is worth investigating — look specifically for errors mentioning jQuery, a plugin’s script filename, or “is not a function.” A common pattern: two plugins both loading their own version of jQuery, or a theme loading jQuery in a way that conflicts with WooCommerce’s expected version. Fixing this usually means deferring or dequeuing the conflicting script, not rewriting WooCommerce’s.
SSL Errors
WooCommerce checkout requires HTTPS to work correctly, and a surprising number of “checkout is broken” tickets trace back to an SSL misconfiguration rather than anything WooCommerce-specific: an expired certificate, mixed content (some page resources still loading over HTTP), or a mismatch between what WooCommerce’s “Force secure checkout” setting expects and what your host or CDN is actually serving.
Check your certificate is valid and not expiring soon, then load the checkout page and check the browser’s address bar for a broken-padlock or “not secure” warning — that’s mixed content, and dev tools’ Console tab will list exactly which resource is loading insecurely. If you’re behind Cloudflare or a similar proxy, confirm the SSL mode is set to “Full” or “Full (strict),” not “Flexible” — flexible SSL is a common cause of checkout redirect loops specifically.
Caching Issues
Cart and checkout pages must never be cached — they’re different for every visitor and change every time the cart changes. Most caching plugins know this and exclude WooCommerce pages by default, but an aggressive cache configuration, a CDN caching HTML it shouldn’t, or a caching plugin that doesn’t recognize a customized checkout page’s URL can serve a stale, non-functional version of checkout to some visitors while it works fine for others (including you, if your browser has an uncached version).
Confirm your caching plugin’s WooCommerce-exclusion setting is actually enabled — this is the single most commonly-missed setting after installing a new cache plugin. The caching plugin comparison guide covers how each of the major options handles WooCommerce page exclusions specifically, since they don’t all default the same way.
Payment Gateway Issues
Stripe checkout not working. Confirm you’re not mixing test-mode and live-mode API keys — a live-mode publishable key with a test-mode secret key (or vice versa) fails silently in a way that looks like a generic “payment not going through” error. Check the Stripe plugin is updated; Stripe deprecates API versions and an outdated plugin can stop working with no warning on your end. Also check your Stripe dashboard’s logs directly — they usually show the exact rejection reason that WooCommerce’s generic error message hides.
PayPal checkout not working. The most common cause is a PayPal account setting, not a WordPress problem: check that your PayPal business account has the correct return URL and IPN (Instant Payment Notification) endpoint configured, since a mismatch here is exactly what causes “payment succeeded but no order was created” — PayPal took the money but never told WooCommerce it happened. Verify IPN in PayPal’s account settings under Notifications.
Guest checkout not working. If guest checkout specifically fails while logged-in checkout works, check WooCommerce Settings → Accounts & Privacy — “Allow customers to place orders without an account” needs to be enabled, and it’s a setting that gets accidentally toggled off during theme changes or plugin updates far more often than people expect.
WordPress Errors During Checkout
500 error on checkout. A 500 error means a server-side PHP failure, which is a narrower, more diagnosable problem than a generic “checkout is broken.” Check your site’s error log (via your host’s control panel or wp-content/debug.log if WP_DEBUG_LOG is enabled) for the specific fatal error and file — this will point directly at the plugin or theme file causing it, rather than requiring the full plugin-by-plugin deactivation process. If the log points at a database connection failure specifically, that’s a different, narrower problem — the database connection error guide covers that case.
Critical error / blank white page on checkout. WordPress’s “There has been a critical error on this website” message, and a fully blank white page, are both front-end symptoms of the same underlying PHP fatal error a 500 status code represents. The fix path is identical: check the debug log for the real error, or if logging isn’t enabled, deactivate plugins via FTP (rename the wp-content/plugins folder) to isolate which one is throwing it — the white screen of death guide walks through that process in more detail if checkout is completely blank rather than showing an error message.
When to Get Help Immediately
Most of the fixes above take 15-30 minutes once you know which one applies. If you’ve gone through the systematic debug sequence and you’re still stuck, or the store is actively losing sales while you’re troubleshooting, that’s the point where getting a second pair of eyes costs less than the sales lost figuring it out alone. I fix broken WooCommerce checkouts regularly, usually same day.
Once checkout is working again, it’s worth a look at whether it was optimized for conversions in the first place — a checkout that technically works but has unnecessary friction loses sales just as quietly as one that’s broken. The WooCommerce conversion optimization guide and the WooCommerce performance guide cover that next step.


