How to Speed Up WooCommerce
Fix a slow WooCommerce store step by step: cart fragments, High-Performance Order Storage, product images, database bloat, caching exclusions and finding out when the host is the bottleneck.

Table of Contents
- Step 1: Find out what is slow
- Step 2: Confirm caching is set up correctly
- Step 3: Deal with cart fragments
- Step 4: Use High-Performance Order Storage (HPOS)
- Step 5: Clean the database
- Step 6: Optimise product images
- Step 7: Review extensions
- Step 8: Make search and filtering efficient
- Step 9: Add an object cache
- Step 10: Check whether the hosting is the bottleneck
- Worked example: a slow checkout
- Measuring before and after
- Frequently Asked Questions
- Related reading
- Sources
A slow WooCommerce store is usually slowed by uncached cart and checkout requests, AJAX calls such as cart fragments, a bloated database, heavy product images, too many extensions, or hosting limits. Fix them in that order of investigation: measure which pages are slow and for whom, then work through the specific causes below.
Step 1: Find out what is slow
Test as both a guest and a logged-in customer with items in the cart:
- product and category pages;
- add to cart;
- cart and checkout;
- the admin orders screen.
If guest product pages are fast but cart and checkout are slow, the problem is uncached server work. If everything is slow, start with caching and hosting. If only the admin is slow, look at the database and extensions.
Step 2: Confirm caching is set up correctly
- Product and category pages should be served from the page cache for guests.
- Cart, checkout and My Account must be excluded.
- Check that the cache is not bypassed for every visitor because of a cookie set on every page (some plugins set cookies that disable caching).
See website caching explained.
Step 3: Deal with cart fragments
WooCommerce's cart fragments script refreshes the mini-cart through an AJAX request (?wc-ajax=get_refreshed_fragments). On older setups this ran on every page view, adding an uncached request for each visitor. Recent WooCommerce versions load it more selectively, but themes and plugins can still trigger it widely.
Options:
- Check in the browser's Network tab whether the request appears on every page.
- If your theme does not need a live mini-cart on every page, limit it to cart-related pages (some performance plugins have this option).
- Test thoroughly afterwards: the mini-cart count should still update correctly.
Step 4: Use High-Performance Order Storage (HPOS)
HPOS stores orders in dedicated database tables instead of the general WordPress posts tables, which improves performance for stores with many orders. It is the default for new stores in recent WooCommerce versions. Older stores can switch under WooCommerce → Settings → Advanced → Features after confirming their extensions are compatible. Back up first and follow WooCommerce's migration guidance.
Step 5: Clean the database
- Remove expired transients and old sessions.
- Limit post revisions for products.
- Check the size of
wp_optionsautoloaded data; abandoned plugins often leave large entries. - Review scheduled actions (Tools → Scheduled Actions): thousands of failed or pending actions slow the admin.
See WordPress database optimization. Always back up before cleaning.
Step 6: Optimise product images
Product galleries are image-heavy. Use consistent dimensions, compress and convert to WebP, and let WordPress serve appropriately sized versions. Do not lazy-load the main product image at the top of the page. See WordPress image optimization.
Step 7: Review extensions
Every extension can add queries to product, cart and checkout pages. Common heavy categories are product filters, dynamic pricing, wishlist, live search and review plugins. Deactivate extensions one by one on a staging copy and measure checkout and cart response times.
Step 8: Make search and filtering efficient
Layered navigation and product filters can generate thousands of uncached URLs and expensive queries, and bots crawl them endlessly. Consider:
- a filter plugin that uses indexes rather than raw queries;
- disallowing crawling of filter-parameter URLs in
robots.txtwhere appropriate; - rate-limiting aggressive bots.
Step 9: Add an object cache
A persistent object cache (Redis) speeds up the uncached requests that stores depend on. See Redis object caching explained.
Step 10: Check whether the hosting is the bottleneck
After the above, check your hosting's resource usage during busy periods. If CPU, memory or process limits are reached by real shoppers, the store needs more resources. Compare plans in WooCommerce hosting requirements, or consider a VPS for larger stores.
Worked example: a slow checkout
A store's checkout takes 6–8 seconds to load. Measuring with a profiling plugin on staging shows:
| Component | Time |
|---|---|
| WooCommerce core | 0.4 s |
| A shipping-rate plugin calling a courier API | 3.9 s |
| A "frequently bought together" plugin | 1.1 s |
| Theme and other plugins | 0.6 s |
The courier API call is slow and runs on every checkout load. The fix: cache the courier's rates for each delivery zone for a few hours (or use flat zone-based rates the business sets itself), and load the recommendations plugin only on product pages, where it belongs. Checkout drops to about 1.2 seconds.
The lesson: on WooCommerce, external API calls and plugins hooked into the checkout are often the real bottleneck, not the server.
Measuring before and after
Record these for a few key pages before and after each change:
- server response time (TTFB) for a logged-in customer with items in the cart;
- time to complete add-to-cart (Network tab, the AJAX request);
- checkout page load time;
- the number of database queries per page (from a query-monitoring tool on staging).
Without numbers, it is hard to tell which change actually helped.
Frequently Asked Questions
Why is my WooCommerce checkout slow?
Checkout runs uncached PHP for shipping, taxes, payment gateways and stock checks. Slow extensions, external API calls (shipping rates, payment providers) and limited server resources are the usual causes.
Is it safe to disable cart fragments?
It can be, if your theme's mini-cart does not need live updates on every page. Test adding and removing items afterwards.
Does HPOS work with all extensions?
Most maintained extensions support it. WooCommerce shows compatibility warnings for extensions that have not declared support; resolve those before switching.
Related reading
For general WordPress performance, see how to speed up a WordPress website, and for the hosting overview, WordPress hosting: what it is and how to choose.
Sources
Last updated 7 October 2026



