
Guides · E-Commerce
How to Speed Up a WooCommerce Store: Core Web Vitals Fixes That Work
Guide • WooCommerce Performance • Core Web Vitals
A slow WooCommerce store loses shoppers at the worst moments: on a busy category page, when a filter is clicked, or while the cart updates. Generic WordPress speed tips help a blog, but a store has carts, sessions, orders and checkout pages that cannot be cached like a normal post.
Speed also matters for search. Google says it “highly recommends” good Core Web Vitals for success with Search, and Search Console grades your product and category pages using real visitor data.
This guide shows how to speed up WooCommerce: measure first, then fix hosting, order storage, caching, cart fragments, images, plugins, filters and the database, roughly in the order that pays off. If you would rather have a team handle the work, see our WooCommerce development services.
Editorial note: this article contains no affiliate links. Facts were checked against official WooCommerce, WordPress, web.dev and Google documentation on November 10, 2026, and any third-party report is credited where used. WooCommerce and WordPress change with every release, so confirm settings and version requirements in the current documentation before you change a live store.
Quick answer: To speed up WooCommerce, start with real-user Core Web Vitals data, then fix the server side before the front end. Use current PHP and database versions, enable High-Performance Order Storage, cache every page except cart, checkout and my account, add a persistent object cache, and serve right-sized modern images without lazy loading the main image.
- Targets per web.dev: LCP of 2.5 seconds or less, INP of 200 milliseconds or less and CLS of 0.1 or less, at the 75th percentile of visits.
- WooCommerce recommends PHP 8.3 or greater, MySQL 8.0 or MariaDB 10.6 or greater, and a 256 MB WordPress memory limit.
- Exclude cart, checkout and my account pages, plus WooCommerce session cookies, from page caching.
- Since WooCommerce 7.8, cart fragments only load when the classic Cart Widget is rendered or another script requires them.
- Use Query Monitor to find slow plugins, and clean transients and scheduled actions from WooCommerce > Status.
Each block is one section, sized by how long it is. The orange block is the longest: Common Problems and a Speed Checklist (about 2 min). Tap a block to jump.
Measure First: Field Data, Lab Data and the Thresholds
Record where the store stands before you change anything, or you cannot tell which fix helped.
Know the three Core Web Vitals
According to web.dev, a page passes when it meets all three targets at the 75th percentile of page loads, measured separately for mobile and desktop:
- Largest Contentful Paint (LCP): 2.5 seconds or less. On a store, this is usually the main product image or a hero banner.
- Interaction to Next Paint (INP): 200 milliseconds or less. It tracks how fast the page responds to add to cart, variation pickers and filters.
- Cumulative Layout Shift (CLS): 0.1 or less.
Read PageSpeed Insights the right way
PageSpeed Insights shows field data from real Chrome users over the previous 28 days, and lab data from one simulated Lighthouse run. Google says lab data is useful for debugging but may not capture real-world bottlenecks. Judge success on field data and use lab data to find causes. Low-traffic pages fall back to origin-level data for the whole site.
Use CrUX and Search Console
Field data comes from the Chrome User Experience Report (CrUX). Search Console’s Core Web Vitals report uses it and groups similar URLs. A group’s status is set by its slowest metric, so one Poor CLS score makes the group Poor. After a fix, click Validate Fix and Google monitors the URLs for 28 days.
Write down LCP, INP and CLS for your home page, one category page, one simple product and one variable product, and retest them after each change.
Fix Hosting, PHP and Order Storage
Cart and checkout cannot be cached, so they depend entirely on how quickly PHP and the database respond.
Match WooCommerce’s server recommendations
WooCommerce’s server recommendations page (last updated May 25, 2026) lists these for WooCommerce 10.8 and later:
- PHP 8.3 or greater, tested up to PHP 8.4
- MySQL 8.0 or greater, or MariaDB 10.6 or greater
- WordPress 6.9 or greater, with a memory limit of 256 MB or greater
- HTTPS support, on Apache or Nginx
Older versions such as PHP 7.4 still work, but WooCommerce warns they are end-of-life. Check your versions under WooCommerce > Status and test upgrades on staging first. If your host cannot offer current versions or server-level caching, compare options in our guide to the best hosting for a WooCommerce store.
Turn on High-Performance Order Storage
High-Performance Order Storage (HPOS) moves orders out of the WordPress posts tables into dedicated order tables. WooCommerce’s docs say this means “fewer read/write operations and fewer busy tables.” HPOS became stable in WooCommerce 8.2 (October 2023) and is the default on new installs, but older stores may still use legacy storage.
- Go to WooCommerce > Settings > Advanced > Features and check for incompatible plugins, which block the switch.
- Turn on compatibility mode and let the background sync finish under WooCommerce > Status > Scheduled Actions.
- Switch to High-Performance Order Storage and keep compatibility mode on for a while so you can switch back if a plugin misbehaves.
Back up first, and use staging if you have a large order history.
Set Up Page Caching With the Right Exclusions
Page caching serves a saved copy of a page instead of building it for every visitor. It is the biggest win for product and category pages, but a store needs careful rules.
Exclude the pages that must stay dynamic
WooCommerce says Cart, My Account and Checkout must not be cached because they show customer-specific information. Many caching plugins exclude them by default, but confirm it in your plugin and any host-level cache.
Exclude WooCommerce cookies
Bypass the cache for visitors carrying these cookies:
woocommerce_cart_hashwoocommerce_items_in_cartwp_woocommerce_session_woocommerce_recently_viewedstore_notice[notice id]
If your caching tool also caches database queries, WooCommerce suggests excluding the _wc_session_ key. For Varnish, WooCommerce’s sample configuration passes cart, my account and checkout URLs, and ?add-to-cart= requests, straight to the server.
Test with a real cart
Add a product to the cart in a private window, browse a few cached pages and confirm the cart count stays correct. WooCommerce notes that password reset loops usually mean My Account is cached at the server level.
Add a Persistent Object Cache With Redis
Page caching does nothing for logged-in customers, cart, checkout or the admin. A persistent object cache helps there by keeping repeated database query results in memory between requests.
Since WordPress 6.1, Tools > Site Health shows “You should use a persistent object cache” when one would help. WooCommerce’s performance guide lists Redis among the server-level caching tools you can enable through your host.
- Ask your host whether Redis is available on your plan.
- Install the plugin or drop-in your host recommends, then confirm Site Health reports a persistent object cache in use.
- Retest cart and checkout after enabling it.
Handle Cart Fragments and the Mini Cart
The wc-cart-fragments script makes an AJAX request to refresh the header cart on cached pages. On older stores it loaded on every page.
What changed in WooCommerce 7.8
In June 2023, WooCommerce 7.8 stopped loading the script everywhere by default. According to the WooCommerce developer blog, it now loads only when:
- the classic Cart Widget is rendered on the page, including themes like Storefront that hard-code the widget into their templates,
- another plugin or theme script registers cart fragments as a dependency, or
- code explicitly enqueues it.
How to check and fix it
- Open a blog post, check the network requests for
wc-ajax=get_refreshed_fragments, and if it appears, find which theme feature or plugin loads the script. - Replace the classic Cart Widget with the Mini-Cart block, which WooCommerce says does not use the cart fragments API.
- If you must keep the widget, WooCommerce’s post includes a filter that limits cart fragments to shop, cart and checkout pages, at the cost of a stale mini cart elsewhere.
Serve Product Images That Load Fast
Product images are usually the LCP element on product and category pages.
Size images to match the theme
WooCommerce’s main sizes are woocommerce_thumbnail for shop grids (300 px wide by default), woocommerce_single for product pages (600 px wide by default) and woocommerce_gallery_thumbnail (100 by 100 px). Adjust them in Appearance > Customize > WooCommerce > Product Images unless your theme sets them, then run Regenerate Shop Thumbnails from WooCommerce > Status > Tools. Upload images close to the largest size your theme displays, not camera originals.
Use WebP or AVIF
WordPress 6.5 added AVIF support where the server’s image library allows it, and the core team says AVIF can be up to 50% smaller than JPEG at the same quality. Check support under Tools > Site Health > Info > Media Handling. The WordPress Performance Team’s Modern Image Formats plugin generates AVIF when supported and WebP otherwise, for new uploads. Existing images need regenerating.
Lazy load everything except the main image
Lazy loading the LCP image delays it. Research on web.dev found WordPress pages using lazy loading had slower LCP, and loading above-the-fold images eagerly reversed it. Since WordPress 6.3, core adds fetchpriority="high" to the likely LCP image and skips lazy loading on the first few images.
- Confirm in PageSpeed Insights that the LCP image is not marked
loading="lazy", and exclude it in any optimization plugin that lazy loads every image. - WooCommerce 10.6 made the Product Image block lazy load by default. Developers can change that with the
woocommerce_product_image_loading_attrfilter where the block sits above the fold. - Give every image width and height attributes. web.dev lists missing dimensions as a top cause of layout shift.
Audit Plugins, Filters and Search
Most stores slow down gradually as plugins pile up, each adding queries, scripts and external requests.
Find the slow plugins with Query Monitor
WooCommerce’s performance guide recommends Query Monitor or WP Hive to measure plugin impact. Query Monitor groups database queries by the plugin or theme responsible, flags slow and duplicate queries, and lists external HTTP API calls with timings.
- Load a product page, a category page and the cart as an admin.
- Sort queries by component and note plugins with many or slow queries or remote calls.
- Remove unused plugins and replace heavy ones.
Lighten layered filters
Attribute filters on large catalogs can be expensive. WooCommerce 9.1 added an Optimized updates option for the product attributes lookup table under WooCommerce > Settings > Products > Advanced, which uses faster queries but may not suit some extensions, so test it first. WooCommerce 9.9 added a Product Filters block powered by the Interactivity API that filters without full page reloads.
Watch third-party scripts and search
Chat widgets, pop-ups and tracking tags compete for the main thread, which hurts INP. web.dev recommends limiting main-thread work during page load and breaking up long tasks. Load non-essential scripts only where needed, and check in Query Monitor what each product search runs.
Clean Up the Database
WooCommerce’s performance guide recommends regularly deleting spam comments, post revisions and expired transients, then optimizing tables. Back up the database first.
Use WooCommerce’s built-in tools
Under WooCommerce > Status > Tools you will find:
- Clear expired transients, which removes expired transient entries.
- Delete all shop and product transient data, which clears WooCommerce’s temporary shop data.
- Delete variations without a parent product, for orphaned variations.
- Regenerate product lookup tables, which runs in the background to keep lookup data matching product data.
Check the Action Scheduler queue
WooCommerce uses Action Scheduler for background jobs. In WooCommerce > Status > Scheduled Actions, large numbers of pending or failed actions usually point to a misbehaving plugin. Completed and canceled actions are purged after about a month by default, and WooCommerce said Action Scheduler 4.0.0, shipping with WooCommerce 11.0, would also purge failed actions older than three months.
Limit revisions
WordPress keeps unlimited revisions by default. Cap them by setting WP_POST_REVISIONS to a number in wp-config.php, then remove old ones with a tool such as WP-Optimize.
Add a CDN, Choose a Lean Theme and Use Block Checkout
Serve static files from a CDN
A CDN serves images, CSS and JavaScript from servers closer to each shopper. WooCommerce’s guide names Cloudflare, Fastly and Amazon CloudFront. If your CDN caches HTML, apply the same cart, checkout, my account and cookie exclusions there.
Pick a theme built for WooCommerce
WooCommerce advises a lightweight theme designed for WooCommerce. Heavy multipurpose themes and page builders often load large CSS and JavaScript bundles on every page, so compare a new theme on staging before switching.
Move to the Cart and Checkout blocks
The Cart and Checkout blocks are the default for new installs since WooCommerce 8.3, while existing stores keep the shortcode checkout until they switch. WooCommerce 10.2 made the Cart block render immediately with placeholders for totals, items and express payments. Confirm your payment and shipping plugins support the blocks, and test an order on staging.
Common Problems and a Speed Checklist
Match what you see in your reports to the likely fix.
| Problem | Symptom | Fix |
|---|---|---|
| Slow server response | High time to first byte on cart and checkout, even with caching on | Upgrade to PHP 8.3+, MySQL 8.0+ or MariaDB 10.6+, and add Redis object caching |
| Legacy order storage | Slow order screens and checkout on stores with many orders | Enable HPOS with compatibility mode, then switch once sync finishes |
| Cache misconfigured | Wrong cart counts or stale cart contents on cached pages | Exclude cart, checkout, my account and WooCommerce cookies |
| Cart fragments on every page | get_refreshed_fragments requests on blog and landing pages | Replace the Cart Widget with the Mini-Cart block |
| Oversized product images | Poor LCP on product and category pages | Right-size images, convert to WebP or AVIF, regenerate thumbnails |
| Lazy-loaded hero image | LCP image flagged as lazy loaded in PageSpeed Insights | Exclude above-the-fold images from lazy loading |
| Images without dimensions | CLS above 0.1 as products and banners load | Add width and height attributes, reserve space for banners |
| Heavy plugins and scripts | Poor INP on add to cart, variations and filters | Audit with Query Monitor, remove or replace slow plugins |
| Bloated database | Slow admin and large options or Action Scheduler tables | Clear transients, review scheduled actions, limit revisions |
WooCommerce speed checklist
Based on WooCommerce, WordPress and web.dev documentation as of November 10, 2026.
→ Baseline field data recorded in PageSpeed Insights
→ PHP 8.3 or greater and a current database version
→ HPOS enabled and compatibility mode reviewed
→ Page cache excludes cart, checkout, my account and Woo cookies
→ Persistent object cache reported in Site Health
→ Mini-Cart block in place of the Cart Widget
→ Product images right-sized and served as WebP or AVIF
→ LCP image not lazy loaded
→ Plugins audited with Query Monitor
→ Transients, scheduled actions and revisions under control
On Hostinger? See how to speed up WordPress on Hostinger.
Frequently Asked Questions
What is the fastest way to speed up WooCommerce?
For most stores, correct page caching plus current PHP and database versions give the biggest gains.
Why does my PageSpeed score differ from Search Console?
The score is one lab test. Search Console uses 28 days of real-user CrUX data.
Can I cache the cart and checkout pages?
No. WooCommerce says cart, checkout and my account must stay dynamic.
Should I disable cart fragments?
Since WooCommerce 7.8 they only load where needed. Switching to the Mini-Cart block is the cleaner fix.
Is HPOS safe to turn on for an existing store?
Yes, if your plugins are compatible. Back up, use compatibility mode, and you can switch back.
Do I need Redis for WooCommerce?
Not required, but a persistent object cache helps uncached pages like cart, checkout and the admin.
Should I use WebP or AVIF for product images?
Either beats large JPEGs. AVIF is often smaller but needs server support.
Does page speed affect WooCommerce SEO?
Google recommends good Core Web Vitals for Search, but speed is one signal among many. Our WordPress SEO services cover both speed and content.
Final Take
You can speed up WooCommerce without guesswork if you measure with field data, fix the server and database layer first, and only then tune images and scripts. Current PHP, HPOS, correct cache exclusions, an object cache and the Mini-Cart block solve most of the store-specific problems that generic WordPress advice misses.
Make one change at a time, retest the same templates and let Search Console confirm each fix over 28 days. If you want a specialist team to audit your store and implement these fixes safely, our WooCommerce development team can help.
Sources
- web.dev: Web Vitals (updated October 31, 2024)
- web.dev: Optimize Interaction to Next Paint
- web.dev: Optimize Cumulative Layout Shift
- web.dev: The performance effects of too much lazy loading
- Google: About PageSpeed Insights
- Chrome for Developers: Overview of CrUX
- Search Console Help: Core Web Vitals report
- Google Search Central: Understanding Core Web Vitals and Google search results
- WooCommerce: Server recommendations (updated May 25, 2026)
- WooCommerce Developer Docs: High-Performance Order Storage
- WooCommerce Developer Docs: How to enable HPOS
- WooCommerce Developer Docs: How to configure caching plugins for WooCommerce
- WooCommerce Developer Docs: How to optimize performance for WooCommerce stores
- WooCommerce Developer Blog: Best practices for the use of the cart fragments API (June 16, 2023)
- WooCommerce Developer Docs: Image sizes
- WooCommerce Developer Blog: An optimization for the product attributes lookup table is coming (June 20, 2024)
- WooCommerce Developer Blog: WooCommerce 9.9 (June 9, 2025)
- WooCommerce Developer Blog: WooCommerce 10.2 (September 17, 2025)
- WooCommerce Developer Blog: WooCommerce 10.6 (March 10, 2026)
- WooCommerce Developer Blog: WooCommerce 8.3.0 released (November 16, 2023)
- WooCommerce Developer Blog: What’s changing in Action Scheduler 4.0.0 (June 17, 2026)
- WooCommerce: System status tools
- WordPress Developer Resources: Persistent object cache Site Health test
- WordPress Developer Resources: wp_revisions_to_keep()
- Make WordPress Core: Image performance enhancements in WordPress 6.3
- Make WordPress Core: WordPress 6.5 adds AVIF support
- WordPress.org: Modern Image Formats plugin
- WordPress.org: Query Monitor plugin
