Short answer: to speed up a WooCommerce store, start with the same fundamentals that speed up any WordPress site — good hosting, caching, and optimised images — then fix the things that are unique to WooCommerce: kill unnecessary cart fragments, add object caching for the dynamic cart and checkout, clean up sessions and transients in the database, and switch on High-Performance Order Storage. The store pages that make you money (cart, checkout, My Account) cannot be fully cached, so the goal is to make the uncacheable parts fast rather than pretend they will cache. Here is how, in the order that actually moves the needle.
Why WooCommerce Is Slower Than Plain WordPress
A vanilla WordPress blog is mostly static: the same post looks the same to everyone, so a caching plugin can serve a pre-built HTML file and the server barely breaks a sweat. WooCommerce breaks that comfortable assumption. A shop has a cart that changes per visitor, a checkout that must never be cached, stock levels that update in real time, and a My Account area that is different for every logged-in user. On top of that, every WooCommerce extension you install tends to add its own database queries, scripts, and options that load on every single page, including the ones that have nothing to do with shopping.
So speeding up a store is a different job from speeding up a blog. Most of what you already know about how to speed up a WordPress site still applies and you should do all of it first. But WooCommerce adds a second layer of problems that generic "make WordPress fast" advice quietly ignores. That second layer is where the real wins hide.
Measure Before You Touch Anything
Get a baseline before you change a single setting, or you will never know what actually worked. Run your key pages through Google PageSpeed Insights and, because stores behave differently under load, test the pages that matter most: the homepage, a product page, the shop archive, the cart, and the checkout. Each one has a different bottleneck. Watch your Core Web Vitals — LCP (how fast the main content appears, aim for under 2.5 s), INP (how snappy it feels when clicked, aim for under 200 ms), and CLS (how much the layout jumps, aim for under 0.1) — and note your TTFB (Time To First Byte) in the network waterfall. If TTFB is above 600 ms, your problem is the server, not the front end, and no amount of image tweaking will save you.
Hosting: WooCommerce Needs More Than a Blog
Cheap shared hosting is the single most common reason a store crawls. A shop does far more work per request than a blog — database writes for carts and orders, session handling, stock checks — and shared plans that pack thousands of sites onto one server simply cannot keep up when traffic arrives. If your TTFB is high and steady, this is almost certainly why. Move to managed WooCommerce hosting or a properly resourced VPS with enough CPU and RAM, PHP 8.1 or newer, and ideally server-level caching that already understands WooCommerce. Good hosting is not glamorous, but it is the foundation everything else sits on, and it is usually the change that produces the biggest single jump.
Cache Everything You Can, Correctly
Caching a store is about knowing what to leave alone. Full-page caching should serve your homepage, product pages, and category archives from a pre-built file, because those look the same to most visitors. The cart, checkout, and My Account pages must be excluded from the page cache entirely, or customers will see each other's baskets and you will have a very bad week. Any decent caching plugin — the ones we cover in our guide to the best WordPress plugins — already knows to skip these WooCommerce pages, but always confirm it rather than assuming. Add a browser cache with long expiry for static assets and GZIP or Brotli compression on top, and your cacheable pages will fly.
Add Object Caching for the Parts You Can't Page-Cache
This is the step most stores skip, and it is the one that matters most for the pages that cannot be full-page cached. Object caching stores the results of repeated database queries in memory so WooCommerce does not have to rebuild them on every request. Install Redis (or Memcached) and a persistent object cache plugin, and the cart, checkout, and account pages — the dynamic ones a page cache can never touch — get dramatically faster because the expensive queries behind them are answered from memory instead of the database. On a busy store this is often the difference between a checkout that feels instant and one that makes customers wonder if their payment went through.
Tame Cart Fragments
WooCommerce has a feature called cart fragments that keeps the little "items in cart" counter up to date using an AJAX call. The problem is that, by default, this call (?wc-ajax=get_refreshed_fragments) fires on every page of your site — including your blog, your about page, and anywhere else that has no business talking to the cart. On a slow server, that request can add hundreds of milliseconds to pages that should be lightning fast. Limit cart fragments so they only run where a cart actually exists (shop and product pages) and disable them everywhere else. Most performance plugins expose this as a single toggle, and it is one of the highest-return changes you can make in the least time.
Clean Up the Database
WooCommerce databases get messy fast, and a bloated database slows down every uncacheable page. Three things pile up. First, expired transients — temporary cached values that WooCommerce and its extensions leave behind — can balloon into tens of thousands of rows. Second, old customer sessions accumulate in the sessions table if nothing clears them. Third, the wp_options table fills with autoloaded data that gets read on every request, and every abandoned extension you ever tried left something behind. Clean out expired transients and stale sessions, review what is set to autoload and trim anything large that does not need to be, and keep it tidy on a schedule rather than once a year in a panic.
Switch On High-Performance Order Storage
Modern WooCommerce ships with High-Performance Order Storage (HPOS), which moves orders out of the general-purpose wp_posts table and into their own dedicated tables built for the job. For a store with any real order volume, this makes order queries, the admin order screens, and reports noticeably faster, and it scales far better as you grow. If your store is on a current version of WooCommerce and your extensions are compatible, enable HPOS. It is one of the few free performance upgrades that keeps paying off as your order count climbs.
Optimise Product Images
Stores live and die on images, and product photos are usually the heaviest thing on the page. Serve them in a modern format like WebP, which is far smaller than JPEG or PNG at the same visual quality. Size them correctly so you are not shipping a 3000-pixel image to display it at 400 pixels, and let WooCommerce generate the right thumbnail sizes for archives and galleries. Lazy-load everything below the fold so the browser only fetches images as the shopper scrolls toward them. Done properly, image optimisation alone can cut the weight of a product page in half without any visible loss of quality.
Be Ruthless About Plugins and Extensions
Every WooCommerce extension is a small tax on performance. Many load their CSS and JavaScript on every page of the site, not just the pages where they do something, so a currency switcher meant for the shop ends up slowing down your contact form. Audit what you actually use, delete anything you do not, and for the extensions you keep, check whether they let you limit their scripts to the relevant pages. One well-chosen extension that does its job cleanly beats five overlapping ones that each drag a bundle of assets onto every request.
Use a Lean Theme and a CDN
A heavy, do-everything theme buries your store under scripts and styles you will never use. Pick a lightweight, WooCommerce-friendly theme and resist the temptation to bolt on a page builder for the whole site. Then put a content delivery network (CDN) in front of the store so static assets — images, CSS, JavaScript — are served from a location near each shopper rather than from a single origin server on the other side of the world. For a store selling to more than one region, a CDN is not a luxury; it is the difference between a fast site and a fast site only for the people who happen to live near your host.
Keep PHP and Everything Else Current
Running an old version of PHP is leaving free speed on the table. Each recent PHP release has been meaningfully faster than the last, and WooCommerce is heavily PHP-bound, so upgrading from an ancient version to PHP 8.1 or newer can shave real time off every dynamic request at no cost beyond the update itself. The same goes for WordPress, WooCommerce, and your extensions: current versions are faster and safer. Test updates on staging first — a store is not the place to discover a plugin conflict live — but do not let "if it isn't broken" become an excuse to run software that is quietly slowing you down.
Speed Is a Conversion Feature, Not a Vanity Metric
For a store, page speed is not about bragging rights on a testing tool. Every extra second on a product or checkout page is measurable revenue walking out the door, because shoppers abandon slow sites and Google ranks fast ones higher. Work through this list in order — hosting, caching, object caching, cart fragments, database, HPOS, images, plugins, theme and CDN, PHP — and re-measure after each change so you can see what worked and prove the improvement to whoever signs the cheques.
If your store is slow and you would rather have specialists fix it properly than spend your weekends in the database, our team offers WooCommerce development services that cover performance, custom functionality, and the ongoing maintenance that keeps a store fast as it grows.