Performance claims about headless WooCommerce are everywhere. “10x faster!” “Sub-second page loads!” I have learned to treat every one of them as a question, not an answer: faster than what, measured where, and at what cost to the team that has to maintain it? So we benchmarked three real WooCommerce stores — one traditional, one headless with Next.js, and one optimized traditional — to find out what the numbers actually look like in production.
Test Setup
All three stores run the same product catalog (1,847 products, 12 categories) against the same WooCommerce backend (WP Engine Pro plan, PHP 8.2, Redis object cache).
| Config | Stack | Hosting |
|---|---|---|
| Traditional | Starter theme, WooCommerce default | WP Engine |
| Traditional (Optimized) | Custom theme, asset optimization, CDN | WP Engine + Cloudflare |
| Headless | Next.js 15, ISR, WPGraphQL | Vercel + WP Engine |
Testing: WebPageTest (Virginia, Cable connection), 5 runs median, mobile viewport.
The Results
Homepage
| Metric | Traditional | Optimized | Headless |
|---|---|---|---|
| TTFB | 1.2s | 0.4s | 0.08s |
| FCP | 2.8s | 1.4s | 0.6s |
| LCP | 4.1s | 2.1s | 1.0s |
| CLS | 0.18 | 0.05 | 0.01 |
| Total Blocking Time | 890ms | 320ms | 45ms |
| Lighthouse Score | 38 | 72 | 98 |
Product Listing Page (Category with 48 products)
| Metric | Traditional | Optimized | Headless |
|---|---|---|---|
| TTFB | 1.8s | 0.6s | 0.09s |
| LCP | 5.2s | 2.8s | 1.2s |
| Total JS | 1.4MB | 680KB | 120KB |
| HTTP Requests | 87 | 34 | 12 |
| Lighthouse Score | 31 | 65 | 96 |
Product Detail Page
| Metric | Traditional | Optimized | Headless |
|---|---|---|---|
| TTFB | 1.5s | 0.5s | 0.07s |
| LCP | 3.8s | 1.9s | 0.9s |
| INP | 380ms | 120ms | 28ms |
| Lighthouse Score | 42 | 78 | 97 |
What’s Driving the Difference?
TTFB: Edge vs Origin
The headless store’s near-zero TTFB comes from ISR (Incremental Static Regeneration). Product pages are pre-rendered and served from Vercel’s edge network. The traditional store generates every page from PHP on the origin server. Even with Redis, WordPress must bootstrap, load plugins, and render. This is the single biggest lever in the whole table, and it is the one people quietly ignore because it does not fit on a marketing slide.
JavaScript: React’s Advantage
Traditional WooCommerce loads jQuery, multiple plugin scripts, and the theme’s JavaScript — often 1MB+ of JS that blocks the main thread. The headless store ships only the React components needed for the current page, code-split by route.
Images: Next.js Image Component
Next.js’s component automatically:
- Serves WebP/AVIF based on browser support
- Generates responsive srcsets
- Lazy loads below-the-fold images
- Sizes images to the actual display dimensions
Traditional WooCommerce serves whatever the theme provides — often unoptimized full-size images.
The Optimization Gap
The “optimized traditional” results are important. A well-optimized WooCommerce store with proper caching, CDN, and asset optimization can score 70+ on Lighthouse. The gap between optimized traditional (72-78) and headless (96-98) is real but narrower than the gap between default WooCommerce (31-42) and headless.
If you’re scoring under 50 on Lighthouse, optimize your current setup before considering headless. The low-hanging fruit (caching, CDN, image optimization, plugin audit) will get you to 70+ without a complete rebuild.
I have been optimizing for the slow machine since the Mac Plus
Let me put my age on the table, because it changes how I read a benchmark. My first serious machine was a Mac Plus — one megabyte of RAM, an 8 MHz processor, an 800K floppy. When you build anything on hardware that unforgiving, you internalise a rule that has never once let me down: performance is a budget you spend, not a score you chase. Every asset had a cost, and if you did not decide where the cost went, the machine decided for you by stalling in front of the user.
That is exactly the discipline the headless column is enforcing, thirty-five years later. A 120KB JavaScript budget on the listing page is not magic; it is someone refusing to spend bytes they did not have to. The traditional store scoring 31 is not slow because PHP is slow — it is slow because nobody set a budget and every plugin quietly spent from a shared account until the page was 1.4MB and 87 requests. The tool changed. The failure mode did not. If you take one thing from this table, take the habit of naming a number before you build, not measuring one after you shipped.
Conversion Impact
Page speed directly affects conversion rates. Google’s data shows:
- 1s → 3s load time: bounce probability increases 32%
- 1s → 5s load time: bounce probability increases 90%
Our client data from before/after headless migrations shows:
| Metric | Before (Traditional) | After (Headless) | Change |
|---|---|---|---|
| Bounce rate | 47% | 31% | -34% |
| Pages/session | 3.2 | 5.1 | +59% |
| Add-to-cart rate | 4.8% | 6.7% | +40% |
| Conversion rate | 1.9% | 2.6% | +37% |
These improvements are not solely attributable to speed — the headless rebuild also improved UX and navigation. But speed is the foundation.
When Optimization Beats Headless
Don’t go headless just for performance. Consider the cost:
| Approach | Performance Gain | Dev Cost | Timeline |
|---|---|---|---|
| Basic optimization | 40 → 70 Lighthouse | $2-5K | 1-2 weeks |
| Advanced optimization | 70 → 85 Lighthouse | $5-10K | 2-4 weeks |
| Headless rebuild | 40 → 95+ Lighthouse | $30-80K | 2-4 months |
If your store is below 50 on Lighthouse and you don’t need headless for other reasons (omnichannel, custom UI, team preference), optimize first. You’ll get 80% of the performance benefit for 10% of the cost.
Performance Budget for Headless WooCommerce
If you do go headless, set a performance budget and enforce it:
| Metric | Budget | Enforcement |
|---|---|---|
| LCP | < 1.5s | CI/CD Lighthouse check |
| CLS | < 0.05 | CI/CD Lighthouse check |
| INP | < 50ms | Real User Monitoring |
| JS Bundle | < 150KB | webpack-bundle-analyzer |
| API Response | < 200ms | Backend monitoring |
The enforcement column is the one that matters. A budget nobody checks in CI is a wish, not a budget — and I have watched more than one headless build drift back to 1MB of JavaScript within a year precisely because the check was aspirational.
Conclusion
Headless WooCommerce delivers genuinely superior performance — 95+ Lighthouse scores are achievable and sustainable. But the performance story is nuanced. A well-optimized traditional WooCommerce store can score 75-85, which is good enough for most businesses. Go headless when performance is one of several reasons (flexibility, omnichannel, developer experience), not the only reason. The numbers don’t lie, but neither does the cost column.
Last modified: August 2, 2026
United States / English
Slovensko / Slovenčina
Canada / Français
Türkiye / Türkçe