← Back to blog
WooCommerce

WooCommerce checkout not working? Common causes + fixes

If WooCommerce checkout is broken (spinning button, errors, payment fails), here’s a practical checklist to diagnose and fix it fast — without guessing.

15 Feb 2026 3 min read By Michael Wood reads
WooCommerce WordPress Bug fixes Payments Ecommerce

“WooCommerce checkout not working” usually means one of a few things: the pay button spins forever, the page reloads with no order created, a payment fails, or you get a vague error.

The good news: most checkout issues come from conflicts, caching, or broken scripts — and can be diagnosed quickly. Here’s the checklist I use on real client sites.

If checkout is business-critical, this is exactly the kind of issue covered by my WooCommerce development and website maintenance work.

Symptoms (what you’re seeing)

  • Spinning “Place order” button (no order created)
  • Checkout refreshes and loses fields
  • Payment fails (Stripe/PayPal) with generic message
  • “There was an error processing your order”
  • AJAX 400/500 errors on ?wc-ajax=checkout

Step 1: Check your browser console + network

Open DevTools → Console/Network and look for red errors. Specifically check the request to:

  • / ?wc-ajax=checkout
  • /wp-admin/admin-ajax.php

If you see a 500 error, it’s usually a PHP/plugin problem. If you see 400/403, it can be security rules, caching, or missing nonce/session.

Step 2: Plugin conflict test (fastest win)

Most checkout breakages are caused by one plugin interfering with checkout scripts, validation, or sessions.

✅ Quick test: temporarily disable non-essential plugins (especially “optimisation”, “security”, “checkout customiser”, “analytics”) and re-test checkout.

If disabling a plugin fixes it, you’ve found your culprit. Then you either:

  • Replace the plugin, or
  • Configure exclusions, or
  • Patch the conflict properly

Step 3: Caching/CDN exclusions (very common)

WooCommerce checkout pages must not be cached. If you’re caching checkout, users can get mismatched sessions, missing nonces, or “invalid order key” style issues.

Exclude these URLs from caching

  • /cart/
  • /checkout/
  • /my-account/
  • /?add-to-cart=
  • /?wc-ajax=

Also exclude WooCommerce cookies from cache variation if your caching layer supports it.

Step 4: Theme overrides and checkout templates

If your theme overrides WooCommerce templates, outdated overrides can break checkout on Woo updates.

Check for overrides at:

wp-content/themes/YOUR_THEME/woocommerce/
If you updated WooCommerce recently and checkout broke right after, outdated overrides are a top suspect.

Step 5: Payment gateway configuration

For Stripe/PayPal failures:

  • Confirm live keys vs test keys
  • Check webhook delivery (Stripe dashboard → Webhooks)
  • Confirm server time is correct (bad time can break signatures)
  • Check for blocked requests by security plugins/WAF

Step 6: Server-side errors (logs)

If checkout returns 500, check:

  • WooCommerce → Status → Logs
  • PHP error log in hosting panel
  • wp-content/debug.log (if enabled)

A common cause: a fatal error in a custom plugin or functions file.

Quick “fix it fast” summary

✅ Check console/network for wc-ajax=checkout errors
✅ Disable non-essential plugins (conflict test)
✅ Exclude checkout/cart/account from caching/CDN
✅ Check theme WooCommerce template overrides
✅ Verify payment gateway keys + webhooks
✅ Review Woo logs + server logs for fatal errors

Related reading and useful resources

If you’re stuck, send me the site link + what you’re seeing ↗. I can usually identify the root cause quickly and fix it without trial-and-error.

Need help with this?

Want me to look at your website or system?

Send the issue, URL or rough idea. I’ll tell you what I think the sensible next step is.

More reading

Related articles.

Browse the blog
Swipe for more
Have a project in mind?

Let’s make your website simpler and better.

Websites, WordPress, WooCommerce, custom systems and automation — built clearly, without unnecessary complexity.