Slow WooCommerce checkout
A slow cart or checkout almost always comes down to three things: those pages cannot be served from the page cache (so every load runs full WordPress), a plugin or theme is doing too much work on each step, and the datab
The short answer
A slow cart or checkout almost always comes down to three things: those pages cannot be served from the page cache (so every load runs full WordPress), a plugin or theme is doing too much work on each step, and the database is answering the same questions over and over. Turn on object caching, switch to WooCommerce’s High-Performance Order Storage, find the slow plugin with Query Monitor and move to PHP 8.3 or 8.4. On WP Alpha, Redis object caching and the extra CPU on larger plans are what make the difference here.
What it means
Most of your shop is served from a page cache, a saved copy of each page that is handed to visitors without running WordPress. The cart, checkout and my-account pages cannot be cached, because they are different for every customer. Every click on those pages runs all of WordPress, every active plugin, your payment gateway’s code and dozens of database queries.
So the checkout is the honest measure of how fast your site really is. If it drags, your server is spending its time on wasted work: a shipping plugin recalculating rates on every refresh, a tracking script firing on each step, or the database searching through years of orders because they are stored in the general-purpose posts table.
Every extra second here costs sales. Customers who have already decided to buy are the ones who abandon a slow checkout, which is why this page deserves more attention than the home page.
Common causes
- No object cache. WooCommerce makes heavy use of the database on cart and checkout. Redis object caching, a store in memory for the database lookups WordPress repeats on every page, is the biggest single improvement available.
- Orders still in the legacy posts table. Older stores keep orders mixed in with posts and pages. High-Performance Order Storage (HPOS) moves them to dedicated tables built for the job, which makes order lookups and checkout much faster on stores with a long history.
- Cart fragments. WooCommerce refreshes the little cart icon on every page using a background request (
wc-ajax=get_refreshed_fragments). It runs full WordPress each time, on every page, for every visitor. - A heavy plugin or theme on the checkout. Live shipping rate lookups, address autocomplete, upsell popups and analytics plugins all add work to every step. Often one is responsible for most of the delay.
- Old PHP or a misconfigured page cache. PHP 8.3 or 8.4 runs WooCommerce faster. Separately, a page cache that does not bypass cart, checkout and my-account can serve one customer another’s cart, or break the pages entirely.
How to fix it
- Check the WooCommerce health screen. Go to WooCommerce > Status. The System Status tab lists the PHP version, database version, whether an external object cache is in use, and whether HPOS is enabled. Note anything flagged in red. This is the same on any host.
- Turn on object caching. If your host provides Redis, install the Redis Object Cache plugin from Plugins > Add New Plugin and enable it. The “External object cache” line in WooCommerce > Status should change to Yes.
- Enable High-Performance Order Storage. Go to WooCommerce > Settings > Advanced > Features and select High-Performance Order Storage as the order data storage. Keep compatibility mode on at first if you use older plugins that read orders directly, then turn it off once everything works. Test on a staging copy first and take a backup.
- Find the slow plugin. Install Query Monitor, add an item to the cart, open the checkout and look at Queries by Component and the HTTP API Calls panel. A shipping or payment plugin making a live request to an outside service on every page load will show there. Change its settings to cache rates, or replace it.
- Tame cart fragments. If your theme does not show a live cart count in the header, disable cart fragments on pages other than cart and checkout. Most performance plugins have a one-click option for this.
- Check page cache exclusions. Whatever page cache you use must bypass cart, checkout and my-account, and must not cache a page when the woocommerce_items_in_cart cookie is set. Most caching plugins detect WooCommerce automatically; confirm by adding an item to the cart in a private window and checking the count is right on every page.
- Update PHP. In the management console (Plesk with WP Toolkit), open Websites & Domains, choose the site and set PHP to 8.3 or 8.4.
- Clean up. Go to WooCommerce > Status > Tools and run Clear transients and Clear expired transients. Remove inactive plugins entirely rather than leaving them installed. Reduce the payment gateways and shipping methods shown at checkout to the ones you actually use.
- Re-test the checkout. Time the steps from cart to the order confirmation page before and after. If it is still slow after all of the above, the server itself may be the limit, and more CPU is the next step.
On WP Alpha
Two things on WP Alpha do the heavy lifting for cart and checkout. Redis object caching is included on every plan, so the database work WooCommerce repeats on every checkout step comes from memory. Beyond that, larger plans have more CPU, which is what matters when the uncacheable pages are running full WordPress for every customer at once. If your checkout is still slow after the steps above, moving to VERIFY: plan name is the next lever. Page caching for the rest of the shop is included too.
PHP 7.0 to 8.5 is available with 8.3 or 8.4 recommended, staging sites are one click in WP Toolkit so you can trial HPOS safely, and backups run every two hours and are kept 30 days so a change can be rolled back. Support is available 24/7 by live chat, with tickets and an urgent escalation form, if you want help reading the Query Monitor results.
