Skip to content 99% OFF 🎉 Anniversary Sale 99% OFF Shared Hosting Use Code HURRYUP Claim Offer 99% OFF Hosting
99% OFF Hosting — Code HURRYUP
Products
AI Website Builder New VPS Hosting Cloud Servers Web Hosting cPanel Hosting Dedicated Servers Domains
Company
About Documentation Support Center Contact Get Started Call +91 75795 45488
Login
Hosting Panel — cPanel & Billing Console Panel — VPS Management
ALL SYSTEMS OPERATIONAL
WordPress

WordPress Caching Plugin Broke Your Site? Here's the Fix

Getwebup 6 min read

You installed a caching plugin to make your WordPress site faster, and now it's showing yesterday's homepage, a broken mobile menu, or a checkout page that won't load. This is one of the most common tickets we get, and it's almost never the plugin's fault on its own — it's usually two or three cache layers fighting each other. Here's how to find which one is lying to your visitors, and how to fix it for good.

Symptom: What You're Actually Seeing

Cache-related bugs tend to show up in one of two ways, and the fix is different for each:

  • Stale content — you publish a post, update a price, or fix a typo, and the live site still shows the old version. Sometimes it fixes itself after a few minutes; sometimes it doesn't budge for hours.
  • Broken layout or functionality — missing CSS, a mobile menu that won't open, a login form that logs the wrong user in, or a WooCommerce cart that shows someone else's items. This one is more serious and usually means a page that should never be cached got cached anyway.

Both point to the same root cause: your site almost certainly has more than one caching layer, and they're not agreeing with each other.

Cause: Cache Layers Stack Without Coordinating

A typical WordPress install on shared or VPS hosting can have four separate caches running at once, and each one has its own rules and its own purge button:

LayerExampleWhat It Caches
Plugin page cacheWP Super Cache, W3 Total Cache, WP RocketFull rendered HTML pages, saved as static files or in the object cache
Object cacheRedis or MemcachedDatabase query results and PHP objects, not full pages
Server-level cacheLiteSpeed Cache (LSCWP), VarnishFull pages, cached at the web server before PHP even runs
CDN / edge cacheCloudflare, other CDNsFull pages and static assets, cached outside your server entirely

When you publish an update, WordPress only knows how to clear the layer the active plugin controls. If LiteSpeed's server-level cache or Cloudflare's edge cache is also holding a copy, your change never reaches the visitor — the plugin purged its own cache and declared victory while an older copy is still being served from somewhere upstream.

The layout-breaking version of this bug

The broken-layout symptom usually comes from a page that should be excluded from caching but wasn't:

  • Logged-in pages cached for everyone. If “cache for logged-in users” gets enabled by mistake, a page cached while an admin was logged in gets served to every visitor — including admin bar markup that then gets hidden or mis-styled by the theme's logged-out CSS.
  • Mobile and desktop served the same cached file. If mobile-specific caching isn't set up correctly (or a redesign changed the mobile menu markup after the cache was built), phones get a stale desktop-cached version and the menu JS has nothing to hook into.
  • Dynamic pages cached by mistake. Cart, checkout, and account pages must never be full-page cached. If a caching plugin's WooCommerce detection fails — common after a theme or plugin update changes page templates — these pages get cached like any other, and one visitor's session bleeds into another's screen.

Fix: Find the Layer, Then Purge in the Right Order

1. Confirm which layer is actually serving the stale copy

Don't guess — check the response headers. From your terminal:

curl -I https://yourdomain.com/the-page/

Look for headers that name the cache: X-LiteSpeed-Cache, CF-Cache-Status, X-Cache, or a plugin-specific comment near the closing </html> tag in the page source (view-source, not the rendered page, since a cached copy is exactly what you want to inspect). Whichever header shows HIT is the layer still holding the old version.

2. Purge every layer, not just one

Clear them in this order — closest to WordPress first, then outward:

  1. Plugin cache: use the plugin’s “Clear Cache” / “Purge All” button, or via WP-CLI: wp cache flush for the object cache, or the plugin's own CLI command if it has one (e.g. wp litespeed-purge all).
  2. Object cache: if you're on Redis, redis-cli FLUSHALL from the server (only if nothing else shares that Redis instance), or the plugin's own flush action.
  3. Server-level cache: in cPanel with LiteSpeed, use the LiteSpeed Cache plugin's purge, which talks to the server cache directly — a plugin-only purge on a LiteSpeed server does nothing to the server's own copy.
  4. CDN / edge cache: log in to Cloudflare (or your CDN) and purge the specific URL, or purge everything if you've made a lot of changes. Purging WordPress last while Cloudflare still holds the old page is the single most common reason “I cleared the cache and it’s still old.”

3. Exclude pages that must never be cached

In your caching plugin's settings, explicitly exclude:

  • /cart/, /checkout/, /my-account/ (WooCommerce)
  • Any URL with a query string tied to a logged-in session
  • The REST API and wp-json endpoints, if your theme or plugins rely on live AJAX data

Most plugins auto-detect WooCommerce pages, but after a theme change or a WooCommerce update, re-check the exclusion list — auto-detection can silently break.

4. Turn off “cache for logged-in users”

Unless you have a specific reason (a membership site serving different content per logged-in role, handled carefully), leave this off. It's the single fastest way to leak one user's page to another.

Prevention: Keep the Layers From Fighting

  • Run one full-page cache, not two. If you're on a LiteSpeed server, use LiteSpeed Cache and skip WP Super Cache or WP Rocket's page-caching feature — having both active means two systems racing to serve the “current” version.
  • Test on staging before flipping cache settings on live. A cPanel staging clone (via WordPress Toolkit or a manual copy) lets you confirm cache exclusions work before customers see a broken cart.
  • Set up auto-purge on publish. Most modern caching plugins purge automatically when you update a post — confirm this is actually enabled, since older configs sometimes have it off.
  • Document your cache stack. Write down which layers are active (plugin, object cache, server, CDN) somewhere your team can see it. Six months from now, nobody remembers Cloudflare is also in the mix.

If you've gone through all four layers and a page is still stale, check for a stray Cache-Control or Expires header being set by the theme or an .htaccess rule — that's telling the visitor's own browser to hold onto the old copy regardless of what the server sends next.

Frequently asked questions

I cleared my caching plugin's cache but the site still shows old content. Why?

You almost certainly have another cache layer above the plugin — a server-level cache like LiteSpeed, or a CDN like Cloudflare. Check response headers with curl -I to see which layer is returning a HIT, then purge that layer too.

Can I run WP Rocket and LiteSpeed Cache at the same time?

You can install both, but you should only let one of them handle full-page caching. Running two page-cache systems at once causes exactly the stale-content and broken-layout issues described above. Pick one for page caching and, if you keep the other active, disable its page cache feature.

Why does my WooCommerce cart show items that aren't mine?

This means the cart or checkout page got full-page cached, so every visitor is served the same static snapshot. Add /cart/, /checkout/, and /my-account/ to your caching plugin's exclusion list immediately, and purge the cache.

Is it safe to enable caching for logged-in users?

Generally no, unless you specifically need it for a membership or LMS site and have configured per-role cache variants carefully. For a typical WordPress or WooCommerce site, leave it off — it's the most common cause of one user seeing another user's page.

How do I know if Cloudflare is caching my page instead of my server?

Run curl -I on the URL and look for the CF-Cache-Status header. A value of HIT means Cloudflare served a cached copy without ever reaching your server; DYNAMIC or MISS means your server (and its own cache layers) handled the request.

#wordpress #caching #wp-rocket #w3-total-cache #litespeed-cache #troubleshooting

Keep reading

Chat with Support