Guide Speed & Performance

How to speed up a WooCommerce store

Where a WooCommerce store actually loses its speed, and why the fix is different for catalogue pages and the checkout.

Updated 10 min read Intermediate

A WooCommerce store has a specific problem plain content sites do not: large parts of it cannot simply be cached and served to everyone, because a cart, an account page and a checkout are different for every visitor. That does not mean caching is off the table — it means it has to be applied selectively, alongside the same page-weight discipline that helps any site.

Start with what applies to any site

Before anything WooCommerce-specific, the general causes of a slow page still apply, usually more so, because a store typically carries more images and more plugins than an average brochure site:

  • Product images. A catalogue with hundreds of products means hundreds of images, and an uncompressed set compounds fast. Compressing images for the web applies directly, and matters more here than almost anywhere else because of the sheer volume involved.
  • Plugin count. Stores tend to accumulate extensions — payment gateways, shipping calculators, marketing tools, review widgets — each adding its own scripts and stylesheets. Review what is actually active periodically rather than only when installing something new.
  • Theme and page builder bloat. Some WooCommerce themes and page builders load a substantial amount of CSS and JavaScript on every page regardless of what that specific page needs. Check what is genuinely being used against what came bundled by default.

Cache what can be cached, correctly

Product listing pages, category pages and individual product pages that are the same for every visitor can be cached exactly like any other content page — this is usually the single biggest win available for a store's browsing experience. Cart, checkout, account pages and anything showing personalised pricing or content cannot be cached the same way without breaking them, because caching a page means serving one visitor's version to everyone else afterwards.

Never cache the cart or checkout as a static page

Caching a cart page means every visitor risks seeing someone else's cart contents, and caching checkout can expose one customer's order details to the next. Proper WooCommerce-aware caching setups exclude these automatically — how to stop caching breaking your cart covers exactly which pages need to be excluded and how to configure that correctly.

The database grows in a way content sites do not experience

Every order, every cart session, every completed and abandoned checkout adds rows to the database, and WooCommerce stores that have been running for a while can accumulate a large amount of order and session data that a typical content site never generates. This gradually slows down anything that queries across that data — reports, order searches, even parts of the admin area.

Reducing database load on a busy site covers the general approach; for a store specifically, periodically reviewing and cleaning up expired cart sessions and old transient data, where your store's tools support it, keeps that growth from compounding indefinitely.

Payment gateway and shipping calculator scripts

Payment providers and shipping calculators frequently load their own JavaScript, sometimes on every page of the site rather than only on checkout where it is actually needed. Check where these scripts are being loaded and, where the plugin allows it, restrict them to the pages that genuinely require them — a payment gateway script has no reason to load on a blog post or a product listing page.

Preparing for higher traffic than usual

A sales event, a newsletter send, or a seasonal spike can bring a sudden surge of visitors browsing and checking out at once, which is a different problem from everyday slowness. How to survive a traffic spike and the store-specific preparing a store for a sales rush both cover getting ready in advance, since the fixes that matter under a spike are not identical to the ones that matter on a normal day.

A working checklist

  1. Compress the entire product image library

    Not just newly added products — older ones are frequently the least optimised because they were added before anyone was paying attention.

  2. Audit active plugins and disable anything unused

    Stores accumulate extensions faster than content sites do, and it is worth a periodic review rather than a one-off.

  3. Enable caching, excluding cart, checkout and account pages

    Confirm the exclusions are actually working, not just configured, before relying on them.

  4. Restrict gateway and shipping scripts to the pages that need them

    Checkout-only scripts loading site-wide are a common and easily fixed source of unnecessary weight.

  5. Review database growth periodically

    Expired sessions and abandoned cart data accumulate silently and are worth clearing out on a schedule.

A store benefits from the same fundamentals as any other site — image weight, plugin count, and caching — applied with more care around the parts that are genuinely personal to each visitor and cannot be cached the same way as everything else.

Related reading