WooCommerce Speed Optimisation: 12 Measurable Interventions
WooCommerce is not slow software; what slows down is the layers accumulated on top of it over the years. The twelve interventions below are listed because they produce measurable results on real stores — apply them in order and measure after each step.
Measure first: know what you are fixing
Before optimising, record three data points: category page TTFB, product page LCP and the completion time of an add-to-cart action. Any improvement made without noting these is guesswork.
Tools: Query Monitor (query counts and slow queries), New Relic or the server slow-log, and PageSpeed Insights field data.
Server layer
1. Update PHP and OPcache
Between PHP 8.3+ and 7.4 you typically see a 25–40% difference in WooCommerce response time. OPcache must be enabled with opcache.memory_consumption at 256 MB or more.
2. Install an object cache (Redis)
WooCommerce runs hundreds of options and meta queries per request. A Redis object cache serves most of them from memory. It is the single highest-return intervention; halving TTFB is common.
3. Set up page caching with the right exclusions
Exclude the cart, checkout and my-account pages, plus any request carrying the woocommerce_items_in_cart cookie. Otherwise users will see each other's carts.
Application layer
4. Get cart fragments under control
wc-cart-fragments.js fires an uncacheable AJAX request on every page load. If you are not showing a live cart counter, disable the script outside product pages; category pages speed up noticeably.
5. Remove unnecessary scripts per page
WooCommerce styles do not need to run on blog posts, nor the contact form script on product pages. Use conditional wp_dequeue_script so each page loads only what it needs.
6. Audit your plugins
Open Query Monitor and load a category page. If you see more than 300 queries, find the culprit. The usual suspects: multi-currency, advanced filtering, popup and analytics plugins.
7. Clean up autoloaded data
Autoload rows left behind in wp_options by deleted plugins are loaded into memory on every request. If total autoload size exceeds 800 KB, cleanup is due.
Database layer
8. Use HPOS (High-Performance Order Storage)
HPOS stores orders in dedicated tables and stops wp_posts from bloating. On stores with thousands of orders, admin panel speed improves markedly.
9. Prune transients and revisions
Expired transients and unlimited post revisions inflate tables. Cap revisions with define('WP_POST_REVISIONS', 5);.
10. Check for missing indexes
When meta_key lookups on wp_postmeta are unindexed, MySQL performs a full table scan. The slow query log reveals this quickly.
Front-end layer
11. Convert images to modern formats
Convert product images to WebP or AVIF, generate them at correct dimensions and defer everything below the fold with loading="lazy". Forty product thumbnails on a category page should not exceed 500 KB in total.
12. Critical CSS and font strategy
Inline the CSS that paints the first screen and defer the rest. Limit the font family to two variants and use font-display: swap.
What to expect
On a typical mid-sized WooCommerce store these twelve steps take category page TTFB from 1.2 s to 0.3 s and product page LCP from 3.8 s to 1.9 s. The critical point: measure after each step. Making five changes at once makes the result impossible to interpret.
Frequently Asked Questions
Will a caching plugin alone speed up my store?
Partly. Page caching makes a big difference on product and category pages, but cart, checkout and account pages cannot be cached. On those pages speed is determined by server configuration, database health and plugin load.
How many plugins are too many?
Weight matters, not count. A single plugin running 400 queries per request is worse than ten light ones. Use Query Monitor to measure which plugin consumes how many queries and how much time, then decide from the data.