xSpeed Cache is officially live! Get 50% OFF during Launch Week — Lifetime starts at just $79Lifetime from $79 — 50% OFF, Launch Week! See Plans →

See Plans →
Features
xSpeed Hub Pricing Docs Blog Scan
Appearance
Get Plugin
All articles
CachingTroubleshootingPerformanceWordPressCloudflarecheck:S2fix:cache-purge

You Purged the Cache and the Page Is Still Old

xSpeed Cache Team 7 min read
Dark cover reading "You purged the cache. The page is still old." with three figures: four caches in front of one WordPress URL, five purge requests a minute on a Cloudflare Free zone, and zero messages a server can send a visitor's browser cache.

Updated September 2026

WP Super Cache shipped a fix on 19 August 2026 for a delete-cache button that could not clear archive pages whose slug held a non-ASCII character, per its own changelog on the WordPress.org Plugin API. A Cloudflare Free zone allows five purge requests a minute, according to Cloudflare’s purge cache documentation, last updated 14 August 2026.

So the button probably worked. It cleared a cache. The question is which one, because a WordPress site in 2026 stacks three or four caches in front of one URL, and emptying the wrong one changes nothing a visitor sees. Two commands name the layer holding the old copy.

Start here: name the layer before clearing anything else

What you seeStale copy is inJump to
A query string returns the new page, the plain URL does notA page cache or CDN edgeTest one
Both return the old page, private window tooNothing; the page never changedThe causes
Only your browser is stale, a phone is fineYour browserLayer 4
Text updated, styling did notA separately purged assetCause 5

On this page: Four layers · Test one · Test two · Seven causes · Clearing in order · Confirming it stuck · FAQ

The four places an old page can hide

Four stores can answer a request for a WordPress URL, each with its own purge control. A plugin’s button reaches one, sometimes two, never the last.

Four cache layers sit between WordPress and the reader: object cache, page cache, CDN edge and browser cache. A plugin purge reaches the page cache and sometimes the CDN, and can never reach a visitor's browser.

The fourth is the one people forget. RFC 9111, the HTTP caching specification, states that a fresh response “can be used to satisfy subsequent requests without contacting the origin server”. A browser holding a fresh copy asks your server nothing, and there is no message you can send it.

Test one: does a query string return the new page?

Request it twice, once plain and once with a parameter nothing has cached:

curl -s https://example.com/your-page/ | grep -c "the new text"
curl -s "https://example.com/your-page/?cachebust=$(date +%s)" | grep -c "the new text"

Read the pair, not either line alone:

PlainCachebustWhat it means
01WordPress has the new page. Something in front serves the old one.
00Nothing is caching. The page itself never changed.
11The server is current. The staleness is in your browser or a nearby proxy.

The middle row saves the most time. It sends you to the post, the environment and the object cache rather than the plugin.

Test two: which cache says it answered?

Ask for the headers and read who claims credit:

curl -sI https://example.com/your-page/ | grep -Ei \
  'cf-cache-status|x-cache|x-litespeed-cache|age|cache-control'
HeaderWho answeredIts purge control
cf-cache-status: HITA Cloudflare edge nodeThe zone’s purge, not the plugin’s
age: 3271A shared cache, 54 minutes oldWhichever proxy set it
x-litespeed-cache: hitThe LiteSpeed server modulePurge All in the plugin

A non-zero age on a page you just purged means a shared cache kept its copy, so the purge never reached it. For a fuller reading of these headers, see how to check whether caching is actually working.

Why a purge misses: seven causes, in order

#CauseWhere it is documented
1You purged a plugin that is not serving the pageTwo page caches on one site, per the 1.2.3 changelog, 2 Sep 2026
2What you edited has no page of its ownTemplates, styles, menus, synced patterns, per the 1.2.2 changelog, 31 Aug 2026
3That URL sat outside the purge’s reachWP Super Cache 3.1.2, 19 Aug 2026: archives with non-ASCII slugs
4The purge was refused before it ranW3 Total Cache 2.10.4 lists “Restore filterable capabilities for purge-all and purge-post”
5The page cleared, a derived asset did notLiteSpeed Cache’s readme: a correct CSS change “can still look stale… if you purge the page cache without also purging Unique CSS”
6The CDN throttled the purge it acceptedCloudflare token buckets: five a minute on Free, bucket of 25
7Your browser never askedRFC 9111 §4.2, above

Cause 6 catches busy sites hardest: an edge purge on every post save, comment and stock change exhausts a Free bucket, and dropped requests fail quietly.

Rule out cause 1 first. It is why xSpeed Cache, our own plugin at WPDeveloper, refuses to switch page caching on when another plugin owns it, and why its 1.2.2 release names each purge trigger as Cache purged (hook:wp_update_nav_menu). A purge log turns cause 2 into a readable line.

Clearing the layers in the right order

Order matters: clearing the CDN before the page cache refills it with the stale page. Work outwards.

Purge from the origin outwards: object cache, then page cache, then CDN edge, then force your own browser to revalidate. Clearing the CDN first refills it with the stale page.

  1. Object cache with wp cache flush, or the dashboard flush control.
  2. Page cache with the plugin’s purge, or wp xspeed purge.
  3. CDN edge by URL, which is Cloudflare’s own recommended method.
  4. Your browser, with a private window or DevTools.

Where a CDN sits in front, connect it to the plugin rather than clearing by hand. The Cloudflare integration in xSpeed Cache, which ships in the free plugin, does this on publish, keeping steps 2 and 3 in sequence.

If step 2 refills with a slow page rather than a fast one, the layer underneath is the server. Our sister company Startise builds xCloud for that, and every xSpeed Scan report recommends it while disclosing it is ours.

Confirming the fix actually stuck

Refreshing your browser is the mistake that restarts the loop. Check it as a stranger would.

Run the free scan on your own site: xspeedcache.com/scan/. It requests the page from outside your network and reports whether it came from a cache. No account needed.

By hand:

  • 🔁 Run the curl -sI line twice. The first may be a MISS; the second should be a HIT with a small age.
  • 📱 Load it on a phone on mobile data, sharing neither your browser cache nor network.
  • 🔍 Repeat the query-string test. Both columns should return 1.

Stores carry an extra rule: cart, checkout and account pages must never be cached at all, covered in optimizing a WooCommerce checkout and on the WooCommerce use-case page.

Frequently asked questions

I clicked purge, it said success, and nothing changed. Did it lie? It told the truth about the cache it controls. Run test one: if the query-string version returns the new page, another layer holds the old one.

I purged everything in Cloudflare and the page is still old. What now? If the origin still serves the old page, the edge refilled from a stale page cache. Clear layer 2 first, then the edge.

My colleague sees the new page and I do not. Why? Your browser, per cause 7. If a private window is correct, your stored copy is still inside its freshness lifetime and nothing on the server can evict it.

I updated a template in the Site Editor and no pages changed. Cause 2. Those have no URL of their own, so a plugin listening only for post saves has nothing to hook. xSpeed Cache added them as triggers in 1.2.2.

I have two cache plugins active. Which do I press? Neither reliably. Two page caches competing is the fault itself. The route out is migrating to a single cache plugin.

Conclusion: one cache, one purge control

What to do this week:

  1. Run test one on the stuck page and note the row you got.
  2. Run test two and note the layer that claimed the response.
  3. Clear from the origin outwards: object cache, page cache, CDN, browser.
  4. Confirm from outside your network: a free scan, or a phone on mobile data.

If the answer is two page caches fighting, pick one and migrate. xSpeed Cache is free and detects a competing plugin before touching anything, with paid tiers from $29 a year on the pricing page. Keeping the plugin you have is a fine answer too. What matters is the same either way: one page cache, one purge control, and a log that says when it fired.

Written by

xSpeed Cache Team

Try xSpeed Cache

Make your site load in milliseconds.

One switch. Zero bloat. Always free to start.