The caching stack I use in 2026
Cloudflare + WP Rocket + page-cache + object-cache. The order matters. The defaults don't.
The essay
Cloudflare + WP Rocket + page-cache + object-cache. The order matters. The defaults don’t.
The premise
Most WordPress sites I audit have a caching stack that fights itself. Two plugins doing the same job, three layers stepping on each other, and a “performance” plugin actively defeating the other layers. The result: cached responses that aren’t fresh, fresh responses that aren’t cached, and a site that’s slower on the second visit than the first.
The stack below is what I run on this site and on every Care Plan retainer I manage. It’s not the only configuration that works; it’s the one that’s survived the most edge cases without me having to think about it.
Layer 1 — Cloudflare at the edge
Cloudflare Pro tier (£18/mo) with APO enabled. Page Rules configured for:
- Cache logged-out traffic by host, path, and query string. Bypass cache on any URL with
preview=,p=, or a logged-in cookie. - HTML caching with revalidation: cache for 4 hours, revalidate on every request, serve stale-while-revalidate for up to 24 hours if origin is slow.
- Brotli + HTTP/3 + Polish for image optimisation at the edge. Polish handles WebP / AVIF conversion without me running an image plugin on the origin.
Why APO and not Workers
APO buys you 80% of the Workers benefit without writing or maintaining any code. For B2B marketing sites, the trade is right. The 20% Workers wins on — true edge-computed personalisation, A/B tests at the edge — isn’t worth the maintenance burden unless you’re shipping AB tests weekly.
Layer 2 — WP Rocket for page cache
WP Rocket (£49 once + £20/year) handles the page-cache layer at the origin. Configuration:
- Page caching on, with mobile-specific cache, cache preload on, cache lifespan 10 hours.
- Lazy-loading off. Cloudflare Polish does this better. Two layers fighting = bugs.
- Critical CSS inlining on. This is the single biggest LCP win for WordPress sites with a heavy theme.
- JavaScript defer / async on, but with a manual exclusion list for any inline script that must run early.
- Database optimisation cron off. The default schedule is fine; the “deep clean” options break things on sites with custom CPTs.
Why not WP Super Cache or W3 Total Cache
WP Super Cache is fine for sites under 10k visits/month with no critical CSS need. W3TC is more configurable than WP Rocket; it’s also harder to maintain and ships more breakage by default. The £49 for Rocket buys me sane defaults and a team that ships configuration migrations correctly.
Layer 3 — Redis object cache
Most managed WordPress hosts (Kinsta, WP Engine, Rocket.net) now ship Redis as a managed add-on. Enable it. The single biggest TTFB win on dynamic pages is moving the persistent object cache off the database.
If your host doesn’t offer Redis, the Object Cache Pro plugin (£99/year) or the free Redis Object Cache plugin both work. For non-managed hosting, ensure Redis is configured with persistence (appendonly yes) and a sensible eviction policy (allkeys-lru).
Layer 4 — OPcache (PHP)
Should be on by default on any PHP 8.1+ host. Verify opcache.jit_buffer_size is set to at least 64M; many hosts leave it at zero. Verify opcache.validate_timestamps behaviour matches your deploy strategy: 1 for development (recompile on file change), 0 for production (require explicit cache clear on deploy).
The order
The stack is layered: Cloudflare absorbs the request, WP Rocket serves the cached HTML if Cloudflare misses, Redis serves the cached database query if WP Rocket misses, OPcache serves the compiled PHP. Each layer makes the next one cheaper.
The mistake I see most often is adding layers that fight each other. Two page-cache plugins, two image-optimisation plugins, two minification plugins. Pick one per layer; remove the others.
The numbers this stack delivers
On this site, on a £18/mo Kinsta plan + £18/mo Cloudflare Pro: LCP 0.43s mobile p75 globally, TTFB 87ms p95, Lighthouse Performance 99 / 100. The marginal cost of the stack vs the “no caching” baseline is £216/year. The marginal cost of not running it would be a Care Plan retainer with monthly LCP firefighting.
If you’re spending more than £400/year on performance maintenance and not running a stack like this: that’s where the money’s going.