RevealTheme logo
Back to Blog

Why Most People Are Using Caching Plugins Wrong

Why Most People Are Using Caching Plugins Wrong
The RevealTheme Team

By

·

Almost every "speed up WordPress" tutorial ends the same way: install a caching plugin, flip a few toggles, done. That advice isn't wrong so much as dangerously incomplete. A caching plugin is a power tool, and most people are holding it backwards — caching the wrong things, stacking layers that fight each other, and mistaking a faster repeat-visit for a faster site. Here are the specific ways it goes sideways, and what to do instead.

Mistake 1: Double-caching on a host that already caches

This is the single most common misconfiguration, and it gets worse the better your host is. Managed hosts like Kinsta, WP Engine, Cloudways, and SiteGround already run full-page caching at the server or edge — Nginx FastCGI cache, Varnish, or their own layer. SiteGround bundles SG Optimizer; WP Engine and Kinsta explicitly ban page-cache plugins because they break the host's own cache.

When you install W3 Total Cache or WP Super Cache on top of that, you now have two systems generating and purging cached HTML with no awareness of each other. The symptoms are maddening to debug: you publish an edit, the plugin purges its copy, but the server still serves a stale version — or vice versa. Worse, the plugin caches a page that the server then caches again, so a stale fragment gets frozen at two layers.

The fix is to know your stack before you install anything. On a managed host, let the host handle page caching and use a plugin only for the things it doesn't do — usually asset optimization and an object cache. If you're on generic shared hosting or a plain VPS with no server-level cache, then yes, a page-cache plugin is doing real work.

Mistake 2: Thinking "caching" is one thing

"Caching" is shorthand for at least four distinct mechanisms, and most people configure exactly one of them. Understanding the layers is what separates a fast site from a lucky one:

  • Page cache — stores the fully rendered HTML so PHP and the database don't run on every request. Huge win, but only for pages that are identical for every visitor.
  • Object cache — caches the results of database queries (via Redis or Memcached) so repeated queries don't hit MySQL. This is what speeds up the uncacheable requests: logged-in users, carts, dashboards.
  • Opcode cacheOPcache keeps compiled PHP bytecode in memory. It's a server setting, not a plugin, and it should always be on.
  • Browser and CDN/edge cache — pushes static assets (and sometimes HTML) close to the visitor with proper Cache-Control headers.

Here's the trap: page caching does nothing for a logged-in WooCommerce or membership site, because those pages are personalized and bypass the page cache entirely. If you've only set up page caching, your most important users — the ones logged in and ready to buy — get the slow, uncached experience. For dynamic sites, an object cache is not optional. Redis on a WooCommerce store often does more for real-world speed than the page cache everyone obsesses over.

Mistake 3: Caching pages that must stay dynamic

The scariest caching bugs aren't slow — they're wrong. Cart, checkout, my-account, and any page tied to a session must never be served from a shared cache. The classic failure is the "someone else's cart" bug: visitor A's cart gets cached as a static page and served to visitor B, who now sees products they never added. With logged-in sessions, a cached page can leak one user's account view to another.

Reputable plugins exclude WooCommerce's cart, checkout, and my-account pages and cookies by default, but the moment you hand-roll exclusion rules, enable an aggressive "cache everything" mode, or add a custom logged-in area, you can override those safeguards. The same applies to nonces: cache a form with a frozen nonce and submissions start failing security checks after the nonce expires. Always test the full logged-in and checkout flow after touching cache settings — a green PageSpeed score on the homepage tells you nothing about whether checkout still works.

Mistake 4: Treating caching as a substitute for optimization

Caching makes a repeat visit to an already-cached page faster. That's it. It does not shrink your 4 MB of unoptimized images, untangle your render-blocking JavaScript, or fix a theme that fires 80 database queries per page. A cached hit serves the same bloated page — just faster on the second load.

This matters for Core Web Vitals, which Google measures on real visits, including cold ones. Caching mostly improves TTFB and, by extension, LCP (the target is under 2.5 seconds) on cached hits. But it does almost nothing for CLS (keep it under 0.1) or INP (under 200 ms — INP replaced FID as a Core Web Vital in 2024). INP is driven by heavy JavaScript on the main thread, and no page cache touches that. If your site feels janky when you interact with it, caching is not your problem and never will be.

Audit the actual page weight first. A lean WordPress page lands in the 0.5–1.5 MB range; if you're well above that, fix the images and scripts before you celebrate a cache hit ratio.

Mistake 5: Blindly toggling minify, combine, and defer

Every caching plugin ships optimization toggles — minify CSS/JS, combine files, defer JavaScript, remove unused CSS — and people enable all of them at once, then wonder why the layout exploded. Combine CSS/JS in particular breaks sites constantly, because concatenating files in the wrong order or merging an inline-dependent script corrupts execution.

It's also frequently pointless. Under HTTP/2 and HTTP/3, which nearly every host now supports, multiple parallel requests are cheap, so combining dozens of files into one giant bundle can actually hurt by killing caching granularity and parallelism. The "combine everything" advice is a leftover from the HTTP/1.1 era. Enable optimization toggles one at a time, check the front end and console after each, and keep minify (safe) while being skeptical of combine (risky, often unnecessary).

Mistake 6: Never looking at the cache after you set it up

Caching is not fire-and-forget. Two numbers tell you whether it's actually working: the cache hit ratio (what fraction of requests are served from cache) and the TTL (how long entries live). A low hit ratio means your cache is constantly being missed or purged — common on sites with frequent updates or query-string-heavy URLs. A TTL that's too long means editors publish changes nobody sees until the cache expires; configure purge-on-update so editing a post clears its cache immediately.

Check the hit ratio in your plugin or host dashboard, watch it after deploys, and make sure preview and admin requests bypass the cache entirely.

Pick the plugin that fits your server

One last misuse: recommending the same plugin to everyone. LiteSpeed Cache is excellent — but its headline features (server-level page cache, ESI, image optimization) only fully fire on LiteSpeed or OpenLiteSpeed servers. On Apache or Nginx it's a shadow of itself. WP Rocket and FlyingPress are strong server-agnostic choices; Cloudflare APO makes sense if you're already on Cloudflare. Match the tool to the stack, configure the layers you actually need, and test the dynamic paths. That's the difference between caching that helps and caching that quietly breaks things.