Peak season is coming — book a store readiness review before [date].Book now →

WooCommerce Performance Checklist: 12 Fixes Before You Blame Hosting

WooCommerce speed problems usually come from the store, not the host. Profile what plugins do on each request, trim autoloaded options, run cron from the server, clear Action Scheduler backlogs, enable HPOS, prune the database, add a persistent object cache, cache pages correctly around the cart, limit cart fragments, fix images and per-page scripts, and index search. Move hosts only after measuring these.

Twelve checks we run on slow WooCommerce stores before anyone recommends a bigger server.

Store owner holding a tablet showing WooCommerce Performance Checklist with speed score 95 out of 100 and checked items for cache, image optimization, database cleanup, CDN and plugins

WooCommerce speed problems are usually blamed on hosting, and moving to a bigger server is often the first thing a store owner tries. In the WooCommerce stores we audit, the host is rarely the main cause. The same handful of issues come up again and again: too many plugins doing work on every request, a database full of old data, background jobs piling up, caching configured in a way that skips the pages that matter, and images and scripts that make the browser wait.

Here are the twelve fixes we check before recommending a hosting change, roughly in the order we check them. Most need no new infrastructure.

First, measure the right thing

“The site is slow” can mean the server takes a long time to answer (time to first byte), or the page takes a long time to appear and respond in the browser. They have different causes. Measure both on your key templates (home, a category, a product, the cart) before changing anything:

[Inline image to add: Chart: where server time goes on a typical slow WooCommerce product page (plugins, options, queries, cron), from a profiler view.]
Profiler breakdown of server time on a WooCommerce product page
  • Server time: use a staging copy with a query profiler such as the Query Monitor plugin to see which plugins and database queries each page runs.
  • Browser time: use Core Web Vitals field data where you have enough traffic, and a lab test for each template.

Write the numbers down. Every fix below should move one of them, and if it does not, undo it.

The 12 fixes

1. Audit plugins by what they cost, not how many there are

Plugin count matters less than what each plugin does per request. One plugin that runs several slow queries on every page view can cost more than twenty that do nothing until an admin opens their settings. Profile a product page and a category page, sort by time, and question the top offenders. Remove plugins that duplicate each other (we often find two SEO plugins, or several that each add their own analytics).

2. Clean up autoloaded options

WordPress loads every option marked “autoload” on every request. Plugins that store large settings, caches or logs as autoloaded options slow down every page, including admin pages. Check the total size of autoloaded options, find the largest entries, and stop autoloading what is not needed on every request. Plugins you have already deleted often leave their options behind.

3. Move WP-Cron to a real scheduler

By default, WordPress runs scheduled tasks when someone visits the site, which means a visitor’s request can end up waiting while cron work runs. On a store with regular traffic, hook WP-Cron into the server’s task scheduler instead, so scheduled jobs run on their own timetable and never on a shopper’s request.

4. Check Action Scheduler for a backlog

WooCommerce and many extensions queue background work through Action Scheduler: emails, webhooks, subscription renewals, data syncs. If jobs fail or pile up, the queue table grows and each run gets slower. Look at WooCommerce → Status → Scheduled Actions for large numbers of past-due or failed actions, fix the cause, and make sure completed actions are being cleaned up.

5. Switch to High-Performance Order Storage

Older WooCommerce stores keep orders in the WordPress posts and post meta tables, which were never designed for order data. High-Performance Order Storage (HPOS) moves orders into dedicated tables. On stores with large order histories, it makes order queries lighter and reduces the load on the tables your product pages also use. Check that your extensions are compatible first; WooCommerce shows compatibility in its settings.

6. Prune the database

Expired transients, old sessions, post revisions, spam comments and orphaned meta rows accumulate for years. None of them help sales. Clean them on a schedule, and look at the postmeta table in particular: product and order meta from long-deleted plugins is common.

7. Add a persistent object cache

WordPress can cache database results in memory between requests if a persistent object cache such as Redis or Memcached is available. For WooCommerce, where many pages cannot be fully cached (see the next fix), this is one of the most effective changes. Many managed hosts offer it without a plan change.

8. Configure page caching around the cart

Full-page caching is the biggest speed win for pages that are the same for every visitor: home, categories, products, content. It must not apply to the cart, checkout and account pages, or to visitors with items in their cart. WooCommerce documents how to configure caching plugins for this. We regularly find stores where caching is switched off entirely because it once broke the cart, when the real fix was a correct exclusion list.

9. Stop cart fragments from running where they are not needed

The cart fragments script refreshes the mini-cart with an uncached request to the server. On themes that load it on every page, it can undo the benefit of page caching. Recent WooCommerce versions handle this more conservatively, but themes and plugins still re-enable it. Check whether your theme needs it, and limit it to pages where the mini-cart is actually shown.

10. Serve modern, correctly sized images

Product and category pages are image-heavy. Serve WebP or AVIF, generate sizes that match your layouts, include width and height attributes so the page does not jump, and lazy-load images below the fold, but never the main product image or the hero, which is usually your Largest Contentful Paint. Our article on where ecommerce LCP actually goes wrong goes deeper on this.

11. Reduce what loads in the browser

Many plugins load their JavaScript and CSS on every page, even when their feature appears only on one. Sliders, form plugins, review widgets and chat tools are the usual suspects. Load assets only on the pages that use them, defer non-critical scripts, and remove features nobody uses. This matters most on mobile, where the processor is slower.

12. Make product search efficient

WordPress’s default search runs broad database queries that get slower as the catalog grows, and faceted filtering plugins can multiply that. On larger catalogs, use a dedicated search index and make sure filter combinations are cached or indexed rather than computed from scratch each time.

The checklist

# Check Affects Effort
1 Profile plugins on product and category pages Server time Low
2 Autoloaded options size and largest entries Server time, admin Low
3 WP-Cron on a system scheduler Server time Low
4 Action Scheduler backlog and failures Server time, reliability Low–medium
5 HPOS enabled and extensions compatible Server time, admin Medium
6 Transients, sessions, revisions, orphaned meta Server time Low
7 Persistent object cache Server time Low–medium
8 Page cache with correct cart/checkout exclusions Server time Medium
9 Cart fragments limited to where needed Server and browser Low
10 Image formats, sizes, dimensions, lazy-loading Browser (LCP, CLS) Medium
11 Per-page asset loading, deferred scripts Browser (LCP, INP) Medium
12 Search and filters on an index Server time Medium–high

How to run this audit in a day

You do not need a long project to find the biggest problems. This is the order we work in on a first audit day:

  1. Morning: copy the site to staging, install a query profiler, and record server time and query counts for the home, category, product and cart pages. Record field data for the same templates.
  2. Late morning: check autoloaded options, cron, Action Scheduler and the size of the largest database tables (fixes 2–6). These are quick to measure and often explain most of the server time on their own.
  3. Afternoon: review caching and object caching (fixes 7–9), then run lab tests on each template in the browser to find the heaviest images and scripts (fixes 10–11).
  4. End of day: rank what you found by likely impact and effort, and fix the cheap, high-impact items first, measuring after each change.

Keep the changes small and reversible, and apply them to staging before production. A single change that breaks checkout costs more than every speed gain on this list.

Keeping it fast

Performance drifts back without a routine. On stores we maintain, we re-check autoloaded options and Action Scheduler monthly, review new plugins before they go live, and re-run the template measurements after every significant update. Each new plugin should justify what it costs on the pages it affects.

When hosting really is the problem

After these fixes, hosting becomes the bottleneck when the server itself is underpowered or shared with noisy neighbours, when PHP is outdated, when there is no persistent object cache available at all, or when the database runs on the same small machine as everything else. At that point a move is worth it, and you will know exactly what you need from the new host because you have measured the site.

If you are considering leaving WooCommerce rather than tuning it, compare the options fairly first; our platform comparison covers when staying makes sense. Otherwise, our WooCommerce development team runs this audit on existing stores, and speed optimization covers the browser side end to end.

FAQ

Questions store owners ask

Why is my WooCommerce store slow on a good host?

Usually because of work done on every request: heavy plugins, large autoloaded options, cron running on visits, a backlog of scheduled actions, or pages that cannot be cached because of cart scripts. Profile a product and category page on staging to see where the time goes.

Should I enable HPOS on an existing WooCommerce store?

In most cases, yes, once your extensions are compatible. HPOS stores orders in dedicated tables instead of posts and post meta, which reduces load on large stores. Check compatibility in WooCommerce settings, test on staging, and keep a backup before switching.

Can I use page caching with WooCommerce?

Yes, for pages that are the same for every visitor, such as home, categories and products. Exclude cart, checkout and account pages, and visitors with items in their cart. WooCommerce documents the exclusions caching plugins need.

Want us to look at your store?

Tell us about your store and we will reply within one business day with next steps.