Cloudflare not caching: cf-cache-status DYNAMIC / BYPASS / MISS every time
Cloudflare isn’t caching the response — HTML isn’t cached by default, and cookies or Cache-Control headers from the origin prevent caching.
Seen on:
Cloudflare
Meaning
By default Cloudflare caches static file extensions only; HTML/JSON show DYNAMIC. BYPASS appears when the origin sends Cache-Control: private/no-store or Set-Cookie, or a rule bypasses cache. Constant MISS means varying query strings or very low traffic per data center.
Common causes
- HTML/API responses (not cached by default)
- Origin sends Cache-Control: no-cache/private or Set-Cookie
- Cache rule or Page Rule set to bypass
- Unique query strings on every request
⚡ Quick fix
- Create a Cache Rule “Eligible for cache” for the paths you want cached
- Remove Set-Cookie/private headers on cacheable responses
- Normalise query strings; set Edge TTL
Detailed fix by platform
Cloudflare
# Caching → Cache Rules → (http.request.uri.path wildcard "/blog/*") → Eligible for cache, Edge TTL 1 hour
Shell
curl -sI https://example.com/blog/post | grep -iE 'cf-cache-status|cache-control|set-cookie|age'
How to diagnose
- Status — DYNAMIC, BYPASS, MISS, EXPIRED?
- Headers — Cache-Control/Set-Cookie from origin
- Rules — Cache rules matching
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
Most viewed in Cloudflare
Other ways to find it
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 7 Oct 2026