WooCommerce Speed Optimization That Actually Moves Revenue
From 4s to under 1.5s LCP without breaking checkout
Cache pages, fix images, dequeue unused scripts and clean the database — in that order — and judge results on conversion, not scores.
- → LCP under 1.5s on mobile is the real target
- → Never cache cart, checkout or account pages
- → Page caching gives the single biggest gain
- → Use field data from CrUX rather than lab scores
Most WooCommerce speed advice stops at "install a caching plugin". That helps a homepage score in a testing tool, and it does almost nothing for the pages that make you money. Revenue lives on category pages, product pages, cart, and checkout — and those are exactly the pages that cannot be cached the naive way.
Here is the sequence we actually follow, ordered by revenue impact rather than by how good it looks in a report.
Measure the right thing first
Ignore the overall score. Track three numbers on a product page and on checkout, measured on a throttled mobile connection:
- Largest Contentful Paint (LCP) — usually your product image. Target under 2.5s.
- Interaction to Next Paint (INP) — how fast "Add to cart" responds. Target under 200ms.
- Time to First Byte (TTFB) — server think time. Target under 600ms.
If you only fix what the score complains about, you will spend a weekend on render-blocking CSS while a 4-second database query on the cart page quietly kills conversions.
Step 1: Hosting and PHP are not optional
No plugin recovers from bad hosting. The baseline in 2026:
- PHP 8.2 or newer with OPcache enabled.
- MariaDB 10.6+/MySQL 8 with enough buffer pool to hold your database in memory.
- Object caching via Redis. WooCommerce hammers the options table and transients; Redis removes most of that load.
- A server in the same region as most of your customers.
Moving from cheap shared hosting to a properly tuned VPS routinely cuts TTFB from 1.8s to 250ms. That single change often beats every optimisation below combined.
Step 2: Reduce the plugin surface
Every active plugin loads on every request unless it is explicitly conditional. Audit honestly:
- Deactivate anything you have not consciously used in 30 days.
- Replace multi-purpose "swiss army" plugins with single-purpose ones.
- Watch for plugins that register their scripts globally — sliders, form builders, and page builders are the usual offenders. Dequeue their assets on pages that do not use them.
A store carrying 48 plugins is not slow because of any one of them. It is slow because each adds 20–80ms of PHP and one or two HTTP requests, and the sum is two seconds.
Step 3: Cache correctly, not aggressively
- Page cache for the homepage, blog, and category pages.
- Exclude cart, checkout, my-account, and any page with a nonce. Caching these causes the classic "someone else's cart appeared" bug.
- Fragment caching for the mini-cart so the rest of the page can still be cached.
- Object cache (Redis) so uncacheable pages still avoid repeating queries.
- Disable WooCommerce cart fragments on pages where the mini-cart is not shown.
wc-cart-fragments.jsfires an uncached AJAX request on every page load and is one of the most common INP killers.
Step 4: Images, properly
Product images are usually 60–80% of page weight.
- Serve WebP or AVIF with a JPEG fallback.
- Generate real responsive sizes; do not ship a 2000px image scaled down with CSS.
- Lazy-load everything except the main product image and the first row of category thumbnails. Lazy-loading your LCP element makes LCP worse, not better.
- Add
fetchpriority="high"to the primary product image. - Set explicit width and height attributes to stop layout shift.
For a Google Merchant Center store you also need a clean 1:1 image per product. Generate it once at upload time rather than resizing on the fly on every request.
Step 5: JavaScript discipline
- Defer everything that is not needed for first paint.
- Load chat widgets, review widgets, and analytics after user interaction or after the load event. A support chat bubble should never delay "Add to cart".
- Prefer server-side tracking for analytics; it removes several third-party scripts from the critical path.
- Self-host fonts, limit to two weights, and use
font-display: swap.
Step 6: Database hygiene
WooCommerce databases grow quietly and then fall over.
- Enable High-Performance Order Storage (HPOS). Orders move out of the posts table into dedicated tables, and admin order screens stop timing out.
- Clean expired transients weekly.
- Trim post revisions to a fixed number.
- Delete abandoned sessions and old
woocommerce_sessionsrows. - Add indexes for any custom meta you filter on. A single missing index on a heavily filtered attribute can cost 900ms per category page.
Step 7: Checkout specifically
Checkout is where speed converts directly into money.
- Remove address auto-complete plugins that call an external API on every keystroke.
- Do not run tax or shipping recalculation on every field change; debounce it.
- Cut optional fields. Each field is both friction and a recalculation trigger.
- Preload the payment provider script only when the payment step becomes visible.
A realistic before-and-after
A typical store we take on:
| Metric | Before | After |
|---|---|---|
| TTFB (product page) | 1.6s | 280ms |
| LCP (mobile) | 5.4s | 2.1s |
| INP (add to cart) | 480ms | 140ms |
| Plugins active | 44 | 26 |
| Checkout completion | 41% | 52% |
The conversion gain is not magic. Shoppers who would have left during a five-second wait simply stayed.
The short version
Fix hosting and PHP. Cut plugins. Cache everything except cart and checkout, and use Redis for the rest. Serve modern images and stop lazy-loading the hero. Defer third-party JavaScript. Turn on HPOS and clean the database. Then measure product pages and checkout — not the homepage — and repeat.
Frequently asked questions
Let's build this for you.
Book a free strategy call — we'll audit your setup and give you a concrete plan, no fluff.
Book a callKeep reading
Google Merchant Center Approval Checklist for 2026
A practical, field-tested checklist that gets dropshipping and e-commerce stores approved in Google Merchant Center without suspension surprises.
How to Cut Returns and Refunds Without Losing Sales
Returns are usually a description problem, not a customer problem. Here is how to find the cause and reduce them systematically.
How to Vet a Dropshipping Supplier Before You Sell
A supplier decides your refund rate, your review score and your ad account health. Here is the vetting process we run before adding any product.