WooCommerce checkout not working?
Run this diagnostic in order. WooCommerce checkout failures almost always trace to one of these 8 causes, ordered by how often they actually turn out to be the culprit.
Suspect the most recently updated plugin
The average WooCommerce store runs 20+ plugins that auto-update on their own schedules. A payments, discount, or checkout-field plugin shipping a bad update is the single most common cause of a dead checkout.
WordPress admin → Plugins → sort by recently updated. Anything touched in the last 7 days? Deactivate the most recent one and retest checkout. The Health Check & Troubleshooting plugin lets you disable plugins for your session only, without affecting live visitors.
If checkout recovers, pin that plugin to the previous version and report the bug to its developer. Turn off auto-updates for anything that touches checkout, payments, or shipping, and batch updates weekly with a test afterwards.
Open the browser console on the checkout page
WooCommerce checkout is driven by checkout.js. If a script optimizer (Autoptimize, WP Rocket file optimization, SiteGround Optimizer) defers or minifies it wrong, the Place Order button does nothing and no error is shown to the customer.
Open /checkout/ → press F12 → Console tab → reload. Any red errors? Typical tells: 'wc_checkout_params is not defined', jQuery errors, or a 404 on a .js file.
Exclude checkout scripts (checkout.js, jquery, your gateway's JS) from minify/defer/delay in the optimizer plugin, then purge the cache. If the error comes from the theme, switch briefly to Storefront to confirm, then ticket the theme developer.
Exclude cart and checkout from caching
Page caches (WP Rocket, W3 Total Cache, LiteSpeed, Varnish at the host, Cloudflare page rules) sometimes cache /checkout/. Cached checkout pages serve stale security nonces, so submissions fail.
Symptoms: 'Your session has expired', the order form silently refusing to submit, or one customer seeing another customer's cart. Fetch /checkout/ and look for an HIT in the x-cache / cf-cache-status response header.
Add /cart/, /checkout/, and /my-account/ to the cache exclusion list in every caching layer, including the CDN. Most cache plugins exclude them by default; custom Cloudflare 'cache everything' rules are the usual offender.
Test the payment gateway in sandbox mode
Expired API keys, a gateway account flag, or a webhook misconfiguration can decline every card while the checkout page itself looks perfectly healthy.
Enable your gateway's test mode (Stripe: test keys + card 4242 4242 4242 4242, any future expiry, any CVC. PayPal: sandbox account). Does a test order complete? Then check WooCommerce → Status → Logs and open your gateway's most recent log file.
The gateway log states the real reason: invalid key, currency mismatch, 3D Secure failure, or a declined webhook. Fix the credential or setting it names, or quote that exact log line to the gateway's support.
Verify a shipping method exists for the address
If no shipping method matches the customer's address, WooCommerce blocks checkout with 'There are no shipping options available.' This appears after zone edits, plugin updates, or a carrier API (table rates, live rates) starting to error.
WooCommerce → Settings → Shipping → check each zone has at least one enabled method. Then test checkout with one address per region you ship to, domestic plus your top international market.
Re-add the missing method, or if a live-rates plugin is erroring, check its log and temporarily enable a flat-rate fallback for the affected zone so orders keep flowing while you debug.
Check WooCommerce session and cart cookies
WooCommerce tracks the cart with cookies plus a session table. Mixed HTTP/HTTPS content, an overeager CDN stripping cookies, or SameSite misconfiguration makes carts empty out right at checkout.
Settings → General: both WordPress Address and Site Address must be https and the same host (www vs non-www mismatches break cookies). Add a product, go to checkout: does the cart survive? Try incognito too.
Fix the URL mismatch or add a redirect so only one host serves the store. On Cloudflare, confirm the cart/checkout paths aren't behind 'cache everything' (which strips Set-Cookie). If sessions are corrupted, WooCommerce → Status → Tools → clear all sessions.
Update outdated template overrides
Themes commonly override WooCommerce templates (form-checkout.php and friends). After a WooCommerce core update changes those templates, the stale override renders a broken or half-missing checkout form.
WooCommerce → Status → scroll to Templates. Does it list overrides marked 'out of date'?
Update the theme, or copy the updated template from woocommerce/templates into the theme override and re-apply the customization. To confirm the theme is the problem first, switch to Storefront and retest.
Enable logging and escalate with specifics
If 1-7 didn't find it, you're likely looking at a host-level issue (PHP version bump, memory limit, mod_security rules blocking the checkout POST) that only shows up in logs.
Enable WP_DEBUG_LOG in wp-config.php, reproduce the failure, then collect wp-content/debug.log plus the fatal-errors log under WooCommerce → Status → Logs.
Send the exact log lines, the timestamp, and the URL to your host or gateway support. Specific reports with logs get fixed in hours; 'checkout is broken' tickets take days.
Run the free website grader, it scores your store's security, SEO, privacy, and performance in one pass and flags issues before they cost you orders.
Why this keeps happening
You ran the diagnostic. You fixed today's problem. Next month a different plugin update will break a different part of checkout, and you'll be back here.
WooCommerce makes this worse than any other platform because you own the whole stack: WordPress core, PHP, the theme, 20+ plugins, the host's cache, and the CDN all update independently. Any pair of them can conflict, and none of them will email you when checkout stops taking money.
The only sustainable fix is scheduled checkout testing, automated runs of your real checkout flow on a schedule, with an alert the moment a step fails.
Catch the next checkout break before customers do
Tracefox replays your WooCommerce checkout on a schedule, across desktop, mobile, and tablet. The moment a step breaks, you get an email + Slack alert with a screenshot, before customers find out.
Test your WooCommerce checkout free7-day free trial · First test running in 5 minutes · No credit card