A broken checkout costs money every minute it's down, so the goal here isn't a perfect diagnosis. It's finding which layer is at fault fast: the browser, a plugin, the theme, the payment gateway, or the server. Work top to bottom and you'll usually have your answer inside 15 minutes.
None of this needs our product. It's the same process a developer would run.
Open your checkout page, then open your browser's developer tools (F12, or right-click and choose Inspect) and click the Console tab. Reload the page and try to place a test order while watching the console.
What good looks like: a mostly empty console, maybe a harmless warning or two. What bad looks like: red errors. Read them, because they name the culprit more often than not:
.js file points straight at that plugin.Uncaught TypeError or is not a function usually means a JavaScript conflict where one script broke and stopped the checkout script from running.Copy the first red error's text. Even if it means nothing to you, it's gold for a support ticket or a web search.
Before you change anything on the site, rule out your own browser. Open checkout in a private or incognito window, and again in a completely different browser (if you use Chrome, try Firefox). Also try your phone on mobile data, not your office wifi.
If checkout works in incognito but not normally, the problem is a cached copy or a browser extension, not your store. Clear your site cache and your browser cache. If it fails everywhere, the problem is server-side and the rest of this guide applies. This 90-second test saves people from tearing apart a store that was fine.
Plugin conflicts are the most common cause of a checkout that renders but won't complete. The classic advice is to deactivate every plugin and turn them back on one by one. That works but it's slow, and it takes your live store down while you do it. Two faster moves:
Start with the usual suspects. Four categories cause the large majority of checkout conflicts. Deactivate these first, one at a time, testing checkout after each:
Use a staging site or a conflict tool if you have one. The free Health Check & Troubleshooting plugin has a "Troubleshooting Mode" that disables plugins only for you, the logged-in admin, while customers keep seeing the live site. Turn it on, then reactivate plugins one at a time inside that mode. You get the binary search without taking the store offline.
Once checkout works again with a plugin off, you've found it. Look for an update, a settings fix, or a replacement.
If no plugin is at fault, test the theme. Temporarily switch to a default theme like Storefront or Twenty Twenty-Four under Appearance → Themes, then test checkout. Do this when the store is quiet, or use the Health Check troubleshooting mode above so customers keep the real theme.
If checkout works on the default theme, your theme (or a checkout template it overrides) is the problem. A theme that ships its own outdated checkout template files can break after a WooCommerce update. Check WooCommerce → Status for a yellow notice about outdated templates, and ask your theme author for an update.
If the page works but payment fails, focus on the gateway. In WooCommerce → Settings → Payments, open your gateway's settings and confirm:
To confirm the wiring end to end, flip test mode on, place an order with the provider's official test card, then flip it back. If test orders succeed and real ones don't, the problem is on the gateway account side (verification, a hold, or live keys), not your store.
If checkout shows "There has been a critical error on this website," WordPress caught a fatal PHP error and hid the detail from visitors. The detail exists, in two places.
Your admin email. WordPress sends a "Your site is experiencing a technical issue" email to the site admin address. It names the exact plugin and file that crashed. Search your inbox for it first, because it often hands you the answer.
The debug log. Turn on logging by editing wp-config.php and adding these lines above the "stop editing" comment:
define('WP_DEBUG', true);define('WP_DEBUG_LOG', true);define('WP_DEBUG_DISPLAY', false);The third line keeps errors out of the page so customers don't see them. Reload checkout to reproduce the error, then read wp-content/debug.log. The most recent lines name the file and line number that failed. Turn WP_DEBUG back off when you're done, since a growing log fills the disk and can leak paths.
Some breaks aren't yours to fix. Suspect the host when: checkout times out or 500s under load but works when quiet (often a PHP memory or worker limit), the site is slow across the board, or the error log shows "Allowed memory size exhausted" or "Maximum execution time exceeded." Raise the PHP memory limit and max execution time, and if that doesn't hold, open a ticket. Give your host the exact error text and the time it happened, and ask them to check the server error log and PHP-FPM log, which you can't see from wp-admin. A good host will find a server-level cause quickly once you point them at the timestamp.
Want a second opinion on whether checkout is loading right now? Run the free checkout checker, no signup. And if you'd rather be told the next time checkout breaks instead of finding out from a customer, Store Guardian is free in beta and loads your checkout every hour to confirm it still works.
WooCommerce orders suddenly stopped? Work through these 7 checks
How to get alerted the minute a WooCommerce payment fails
Stop failed WooCommerce orders from cluttering your dashboard