Check If a Website Is Cached

Paste a URL and get a clear verdict: cached or not, which CDN is serving it, and how long the cache lasts. We even fetch twice to catch the MISS-to-HIT flip that proves your cache actually works. No signup, instant results.

What it checks

Everything that decides whether your site is served from cache.

Not just a header dump - a verdict, the provider, the TTL, and the reasons behind them.

Cache verdict

A plain-English answer up front: cached or not. We read cf-cache-status, x-cache, x-vercel-cache, and the Age header - the signals CDNs use to report whether they served from cache.

Double-check (MISS to HIT)

A single MISS doesn't mean caching is broken - it may just be a cold cache. When the first request misses, we fetch again: if the second comes back HIT, your cache is working and we just warmed it.

CDN detection

Identifies the cache layer in front of the site - Cloudflare, Fastly, CloudFront, Akamai, Vercel, Netlify, BunnyCDN - from server, via, and provider-specific headers.

Cache lifetime (TTL)

Decodes Cache-Control max-age and s-maxage (and legacy Expires) into a human-readable lifetime, so you know exactly how long a cached copy is served before revalidation.

Cache validators

Checks for ETag and Last-Modified, and verifies the server actually honors conditional requests with a 304 Not Modified - the mechanism that makes revalidation nearly free.

Cache blockers

Flags the directives that prevent caching - no-store, private, Vary: * - and misconfigurations like a missing Vary: Accept-Encoding that silently poison shared caches.

How it works

Two requests, one clear answer.

No DevTools, no curl, no guessing what cf-cache-status means.

01

Paste a URL

Drop in any page URL - your homepage, a landing page, an image, or an API endpoint. Apex domains and subdomains both work.

02

We fetch it twice

The first request reads the live cache status. If it's a MISS, a second request tests whether the CDN stored our first response - the MISS-to-HIT flip that proves caching works.

03

Read the verdict

You get a clear cached / not cached answer, the CDN serving it, the cache TTL, and every cache-related header - with an explanation of what each one means.

Why caching matters

The difference between HIT and MISS is your whole performance budget.

A cached response is served from an edge node near the visitor. An uncached one crosses the world to your origin - on every single view.

Speed

A cache HIT is typically served in tens of milliseconds from a nearby edge. A MISS adds the full round trip to your origin plus render time - often 10x slower. Time-to-first-byte is a Core Web Vitals input, so cache misses show up in your rankings, not just your waterfall.

Cost & load

Every MISS is a request your servers must handle and bandwidth you pay for. A healthy cache hit ratio absorbs traffic spikes for free; a silently broken one means your origin takes the full brunt of every crawl, campaign, and front-page moment.

Resilience

With stale-while-revalidate and stale-if-error, a CDN can keep serving your site even while your origin is slow or down. If nothing is cached, an origin outage is a full outage - visitors see errors the moment your server blinks.

Reference

How to tell if a page is cached, header by header.

The signals this tool reads - and what each value actually means.

cf-cache-status

Cloudflare's cache report. HIT means served from cache; MISS means fetched from origin and stored; DYNAMIC means Cloudflare doesn't consider the content cacheable by default; BYPASS means a cookie or header disabled caching.

x-cache

Used by CloudFront, Fastly, and many Varnish setups. Values like 'Hit from cloudfront' or 'MISS' tell you whether the edge served a stored copy.

x-vercel-cache

Vercel's edge cache status. HIT is a cached response, MISS was fetched from the origin function, STALE means a cached copy was served while revalidating in the background.

Age

How many seconds the response has been sitting in a cache. Any value above 0 is proof a shared cache is serving stored content - even when no explicit cache-status header is present.

Cache-Control

The policy header. max-age sets browser cache lifetime, s-maxage sets CDN lifetime, no-store forbids caching entirely, and private restricts storage to the visitor's browser.

Expires

The legacy freshness header - an absolute timestamp after which the copy is stale. Cache-Control max-age wins when both are present; many stacks still send both.

ETag / Last-Modified

Validators. They don't make a response cacheable by themselves, but they let caches revalidate with a cheap 304 Not Modified instead of re-downloading the full body.

Vary

Tells caches which request headers create distinct cached copies. A correct 'Vary: Accept-Encoding' is essential; 'Vary: *' or varying on Cookie usually kills your hit rate.

FAQ

Frequently asked questions.

Quick answers about cache checking and what the results mean.

How do I check if my website is cached?

Paste the URL above. We read the cache status headers your CDN returns (cf-cache-status, x-cache, x-vercel-cache, Age) and give you a plain verdict: cached or not, plus which provider is serving it and for how long. No DevTools digging required.

What does cache HIT vs MISS mean?

HIT means the CDN served a stored copy without contacting your origin server - the fast path. MISS means the CDN had no valid copy, fetched it from origin, and (if the response allows it) stored it for next time. A MISS followed by HITs is normal; constant MISSes mean caching isn't sticking.

Why does my site always show MISS?

Common causes: the response sets Cache-Control: no-store or private; a Set-Cookie header or session cookie forces a bypass; the TTL is so short copies expire between visitors; Vary is too broad (e.g. varies on Cookie); or your CDN only caches static file extensions by default and treats HTML as DYNAMIC.

Why is my HTML not cached when my images are?

Most CDNs cache static assets (images, CSS, JS) by default but treat HTML as dynamic - Cloudflare reports this as cf-cache-status: DYNAMIC. To cache HTML you must opt in, e.g. a Cloudflare Cache Rule / 'Cache Everything', or s-maxage on Vercel and Fastly. This tool shows you exactly which case you're in.

Does this check the browser cache or the CDN cache?

The CDN / shared cache - the layer between your visitors and your origin. Browser caching is governed by the same Cache-Control header, which we decode and show, but a HIT here specifically means an edge server responded without hitting your origin.

Is this tool really free?

Yes - no signup, no email harvesting. We rate-limit per-IP to keep it fast for everyone, but otherwise it's open. The paid product is the monitoring side: SiteTrak re-checks your cache status on a schedule and alerts when HITs turn into MISSes.

Run it once. Or have SiteTrak watch it forever.