WooCommerce

WooCommerce checkout not working? Common errors and fixes

A broken checkout is the most expensive bug a store can have — every hour is lost revenue. The failures look mysterious from the buyer’s side but fall into a few known buckets. Here is the triage order we use on rescue jobs.

1. Dead button or endless spinner: check the console

When Place Order does nothing, or the spinner never resolves, open the browser console (F12) and try again. A red error naming a plugin’s script is your culprit nine times out of ten — a conflict between an optimisation plugin (deferred/minified JS breaking checkout scripts) or an outdated extension and WooCommerce. Exclude checkout scripts from JS optimisation entirely; minifying the checkout is never worth it.

2. “Session expired” and vanishing carts: caching

If buyers see expired-session messages, empty carts that were full, or someone else’s data — the cart/checkout pages are being cached. They never should be. Verify your caching plugin, server cache and CDN all exclude /cart/, /checkout/, /my-account/ and the wc-ajax endpoints, and that WooCommerce’s session cookies are not being stripped by the CDN.

3. Payment failures: read the gateway log

Declines and “payment could not be processed” errors are logged in detail at WooCommerce → Status → Logs — select the gateway’s log file. It states the real reason: expired API keys, webhook failures, currency mismatch, test keys on live. Fix what the log says rather than guessing; while you are there, confirm the gateway’s webhook URL is reachable (server firewalls love to block it).

4. Isolate conflicts the reliable way

If the cause is not obvious, reproduce on a staging copy: default theme (Storefront), only WooCommerce plus the payment gateway active. Checkout works? Reactivate your theme and plugins in batches until it breaks — the last activation is your conflict. This is tedious and utterly dependable, and staging means revenue keeps flowing while you test.

5. Make it hard to break again

Most checkout breakages ship with an update. Test updates on staging with a real test order before pushing live, keep a weekly log check habit, and add uptime monitoring that actually hits the checkout page. Stores on our maintenance plans get exactly that routine — because checkout downtime is the outage that shows up on the revenue chart.