Why is my WooCommerce site slow? The 7 real causes
“My WooCommerce site is slow”: that’s how most of the audit requests I receive begin. The good news is that a slow WooCommerce store is never a mystery. After auditing dozens of stores, the same 7 causes come up almost every time, in varying proportions. This article walks through them, with a way to check each one yourself.
One prerequisite: “my site is slow” is not a diagnosis. Before fixing anything, you need to measure where the time actually goes. The checks below are ranked from most common to most structural.
1. Cart fragments: the script that works for nothing
WooCommerce loads wc-cart-fragments.js on every page of your site. Its job: updating the cart icon through an AJAX request to admin-ajax.php, on every single page load. Even when the cart is empty, even on your blog posts. These requests can’t be cached: each one ties up PHP and your database.
How to check: open DevTools (F12, Network tab), reload a page, look for wc-ajax=get_refreshed_fragments. If it shows up on a page with no cart, you’re paying that tax on every visit.
The fix takes a few lines and the gain is immediate: I covered it in disabling cart fragments without breaking the cart.
2. Plugins loading their files everywhere
Every active plugin can add its CSS and JS to every page, even where it serves no purpose. The form plugin loads its scripts on your product pages, the slider loads its own at checkout. With 30 plugins, your homepage ships 80 to 120 requests.
How to check: DevTools, Network tab, filter by CSS then JS. Count. Beyond 25-30 files on a product page, there’s cleanup to do. Look at the folder names: /plugins/xxx/ tells you who loads what.
The fix: dequeue assets where they’re useless (targeted wp_dequeue_script by page type), replace the chattiest plugins, and be wary of kitchen-sink themes. It’s meticulous work, but it’s often the biggest win on page weight.
3. A cluttered database
Three usual suspects on the database side: autoloaded options (loaded on every request, they silently balloon, especially when uninstalled plugins leave their data behind), expired transients piling up, and session or Action Scheduler tables that are never purged.
How to check: one SQL query covers the first point:
SELECT SUM(LENGTH(option_value)) AS autoload_size
FROM wp_options
WHERE autoload = 'yes';
Under 800 KB, you’re fine. Above 1 MB, every page on your site pays that debt. I’ve seen stores at 5 MB and beyond: details and fixes are in cleaning up autoloaded options.
4. Third-party scripts: analytics, pixels, chats
Google Analytics, Meta pixel, Hotjar, live chat, review widgets: each tool adds 50 to 150 KB of JavaScript running on the browser’s main thread, the very thread that’s supposed to render your page. It’s the number one culprit behind poor INP and Total Blocking Time scores.
How to check: PageSpeed Insights, “Reduce the impact of third-party code” section. The list has names.
The fix: remove the tools nobody looks at (be honest), and move the rest off the main thread, for instance with Cloudflare Zaraz which runs these scripts at the edge. I wrote a full article on third-party scripts on WooCommerce.
5. Undersized hosting
WooCommerce is not a blog: cart, variations, personalized pricing and checkout generate dynamic content that caching can’t absorb. On $5/month shared hosting, TTFB (the time your server takes to start responding) collapses as soon as a few visitors browse at once.
How to check: measure TTFB while bypassing the cache, for example curl -so /dev/null -w "%{time_starttransfer}\n" "https://your-store.com/?test=123". Under 300 ms: good. Over 600 ms: your hosting (or your database) is a glass ceiling, and no plugin will break through it.
While you’re at it: check your PHP version (8.2 minimum, every major version brings 10 to 20% gains) and whether you have an object cache like Redis, which I explain in WooCommerce product caching.
6. A previous-generation checkout
The shortcode checkout [woocommerce_checkout], still the majority on stores older than 3 years, is heavier and slower than the block checkout. Some legacy payment gateways make it worse by loading their scripts across the whole site, even though they only serve a purpose at the payment step.
How to check: look at the source code of your checkout page. If you find woocommerce-checkout without a block structure, you’re on legacy. And in the Network tab, look for your gateway scripts (stripe, paypal…) on pages that have nothing to do with payment.
The fix: migrating to the block checkout, tested in staging first.
7. Misconfigured caching, or no caching at all
The WooCommerce paradox: cart and checkout must never be cached (or one customer sees another’s cart), but everything else should be cached aggressively. Many stores live in between: either no HTML caching at all, or caching that broke the cart and ended up disabled.
How to check: if you’re behind Cloudflare, look at the cf-cache-status header on your pages (DevTools, Network tab, click the first document). DYNAMIC on all your product pages = your HTML is never served by the CDN. On a store I audited recently, only 6% of requests were served from cache: the server took everything.
A warning though: a cache plugin alone doesn’t fix causes 1 through 6, it hides them at best. I explained why in cache plugins are not enough.
Where to start?
In order of best gain-to-effort ratio: cart fragments (cause 1, an hour of work), properly configured HTML caching (cause 7), third-party scripts (cause 4), then cleaning up assets and the database (causes 2 and 3). Hosting and checkout (causes 5 and 6) are heavier projects, to be decided with numbers in hand.
That prioritization is exactly what an audit does: measure each cause on your store, quantify the expected gain, and give you the execution order. You can follow my 15-minute audit method for a first assessment, or go for the full performance audit if you want the detailed action plan. And all the fixes are described in the WooCommerce optimization guide.
Does your store tick several of these boxes? Request a free audit: within 48 hours you’ll know which ones are actually costing you sales.
Need a WooCommerce store audit?
I'll send you a personalized report with the top priorities to improve. Free, no strings attached.