cf-cache-status: DYNAMIC 🟧 Cloudflare

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

  1. Create a Cache Rule “Eligible for cache” for the paths you want cached
  2. Remove Set-Cookie/private headers on cacheable responses
  3. Normalise query strings; set Edge TTL

Detailed fix by platform

Cloudflare

  1. # Caching → Cache Rules → (http.request.uri.path wildcard "/blog/*") → Eligible for cache, Edge TTL 1 hour

Shell

  1. curl -sI https://example.com/blog/post | grep -iE 'cf-cache-status|cache-control|set-cookie|age'

How to diagnose

  1. Status — DYNAMIC, BYPASS, MISS, EXPIRED?
  2. Headers — Cache-Control/Set-Cookie from origin
  3. 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:

🧠 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.