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
CachingTroubleshootingPerformanceWordPressfix:hit-ratioplatform:wordpress

The Hit Rate Dropped Overnight and the Cache Never Changed

xSpeed Cache Team Updated Oct 4, 2026 7 min read
The hit rate dropped overnight, xSpeed cover

Updated September 2026

Our own 1.1.4 release notes, dated 9 August 2026, record that Apache and LiteSpeed sites showed a permanent 0% hit ratio because hits were counted only on nginx. W3Techs put those two servers at 22.0% and 14.5% of the web on 22 September 2026. On all of them the number was broken, whatever the cache did.

The question people ask is which setting broke the cache. The more useful question is whether the cache changed at all, because a hit rate has three moving parts and only one is the cache. This covers a page-cache hit ratio reported by a WordPress caching plugin after an update.

Quick summary: what actually moved

If the number dropped…Do thisWhy
…the moment you updated, traffic flatRead the changelog firstA counting change lands on the update boundary
…the moment you updated, counted requests moved tooCheck what left the denominatorBots and 404s leaving the count move the ratio, not the cache
…gradually over daysTreat it as a real cache problemGenuine misses accumulate, they do not step

Jump to: confirm the cache · the fraction · our own meter changes · real drops · FAQ

Confirm the cache still works before you trust the number

Ask for a page twice and read the header on the second request, the only one that can be a hit.

curl -sI https://example.com/ | grep -i -E 'x-xspeed|x-cache|cf-cache-status|age'

A hit there means the cache is serving and the dashboard is what changed. Reading these headers has traps, and sixteen headers WordPress core accepts as proof of a page cache covers which six prove nothing. If the second request is a miss, which of the four caches holds the old copy is the faster path.

A hit rate is a fraction with three moving parts

Hit rate as hits over counted requests, both defined by the meter

Every hit-rate report is hits divided by countable requests, produced by code that decides what both words mean. An update can move any of the three alone.

PartWhat it isWhat an update does to itShape on the chart
NumeratorRequests served from cacheFewer pages warm, more missesA slope over days
DenominatorRequests the plugin countsBots, 404s and bypasses reclassifiedA step, request volume moving
The meterCode deciding what counts as a hitCounting fixed, extended or correctedA step, both counts moving

The shape test does most of the work. A ratio that fell over a week is a cache problem. One that fell between two page loads either side of an update is arithmetic.

A slope means real misses, a step means a counting change

Four times we changed the meter, and what each did to the number

We ship a hit-ratio chart, so our own release history is the clearest public worked example. Every row is from plugins.svn.wordpress.org/xspeed/trunk/changelog.txt, fetched 22 September 2026.

ReleaseDateWhat changed in the meter
1.1.49 Aug 2026Hits counted on every server, not only nginx. Apache and LiteSpeed had shown a permanent 0%
1.1.49 Aug 2026The ratio began excluding 404s and bot traffic
1.1.49 Aug 2026Headers began separating a miss from a deliberate bypass
1.2.32 Sep 2026The dashboard began reporting whether the cache is actually serving, not what the setting says

Excluding bot traffic removes requests that were mostly served from cache, so a site with heavy crawler traffic sees its ratio fall on upgrade while serving every visitor as before. The number got more honest and looked worse. Read the changelog first: a dated release note costs a minute, a settings audit chasing a counting change costs an afternoon.

When the drop is real: four documented causes

CauseSource
One POST kept a visitor on the uncached path for the rest of their visit, so a single comment generated every later page from scratchour 1.1.8, 20 Aug 2026
Cache warming identified itself in a way common firewall rule sets block, so new posts went unwarmedour 1.3.5, 22 Sep 2026
Cache lifetime set shorter than the preloader interval, leaving pages permanently uncachedour 1.1.1, 28 Jul 2026
Crawlers and preload bots inflating what the cache storesWP-Optimize 4.6.0, per its readme, 6 Jul 2026

Both hit publishers hardest: every new URL starts cold and nothing warms it.

A fifth route belongs to the cache key rather than the meter, and a logged-out visitor seeing someone else’s name covers how a new cookie or query parameter fragments it. If a tracking parameter arrived last week, start there.

The same question across thirty sites

One dashboard shows one site; the pattern across a fleet tells you whether it was the plugin. If a version bump moved the ratio everywhere, it is a counting change and no per-site configuration will move it back. If it moved on four of thirty, those four share something the others do not, usually a firewall, a bot filter or a publishing cadence. xSpeed Hub reads those numbers across every connected site from one place. It is ours, from WPDeveloper, a Startise company.

What is measured rather than estimated depends on your server, and server compatibility lists which is which.

Run the free scan on your own site: xspeedcache.com/scan/

Common mistakes reading a cache hit rate

  • Comparing this week’s number to a screenshot from before an update. Two readings from two meters are not a trend.
  • Treating 0% as a dead cache. According to our 1.1.4 notes it was a counting gap on every non-nginx server.
  • Reading a smaller denominator as damage. Dropping bots is the point of the change.

Frequently Asked Questions

My hit rate went from 94% to 61% the day I updated and I changed nothing. What happened?

Read the changelog for the version you installed. A same-day step with flat traffic is almost always a counting change, most often bot and 404 traffic leaving the denominator. Confirm with a header check before changing a setting.

I see 0% hit ratio but the site is clearly fast. Is the cache working?

Probably. Per our 1.1.4 release notes, hits were counted only on nginx until 9 August 2026, so Apache and LiteSpeed sites reported a permanent 0% while serving from cache normally. Update, then read it again.

My hit rate dropped slowly over two weeks rather than overnight. Does that change the diagnosis?

It does, and points away from the meter. A slope means genuine misses accumulating: new URLs unwarmed, an expiry set too short, or a preloader that cannot finish. Check cache lifetime against preloader interval.

I excluded bot traffic and my number got worse. Should I put it back?

No. Bots are cheap to serve from cache and were inflating the ratio without representing a visitor. A ratio measures how often the cache answered, not how much time it saved, and 48% of WordPress sites have under 100ms of cache headroom to begin with.

My plugin shows no hit ratio at all. What do I use instead?

The header check above works on any stack and needs no dashboard. Among plugins that do report one, W3 Total Cache lists caching statistics among its features, and our own xSpeed Cache charts a daily hit-ratio trend annotated with the setting changes that moved it. Coverage varies, so check what yours measures first.

Conclusion: read the meter before you chase the cache

A hit rate is a claim made by code about other code, and updating the plugin updates the claim. Before treating a drop as damage, spend a minute on the changelog and one request on the headers. Most drops reported after an update survive neither.

What to do this week:

  1. Run the header check on your slowest page and note what the second response said.
  2. Search the changelog for the version you installed for “ratio”, “count” and “bot”, then compare counted requests across the update boundary.
  3. If the shape is a slope rather than a step, check cache lifetime against preloader interval.
  4. If you would rather the measurement were handled than audited, xSpeed Cache charts the ratio with setting changes annotated on it. Free to start, Pro $29/yr at the founding price with a 14-day money-back guarantee. Free vs Pro shows where the line falls, pricing has the rest.

If the two checks disagree, bring the number to the community forum. That is worth a bug report.

Written by

xSpeed Cache Team

Try xSpeed Cache

Make your site load in milliseconds.

One switch. Zero bloat. Always free to start.