TTFB — Server Response

Slow TTFB —
Missing Caching Headers

Every page is being served fresh from the server. Every single time.

Where to find it: Chrome DevTools > Network Panel > Response Headers > Cache-Control > Max-Age Value

What It Is

HTTP caching headers tell browsers, CDNs, and intermediate proxies how long they can store a resource before requesting a fresh copy. When these headers are missing or misconfigured, every single request for every resource — images, CSS, JavaScript, fonts — goes back to the origin server. There's no browser cache, no CDN edge cache, no intermediate storage. Every visitor, on every page load, downloads everything from scratch from the origin server. This inflates TTFB for returning visitors and eliminates the performance benefits of CDN infrastructure.

Why It Matters

Properly configured caching headers can reduce page load times for returning visitors by 50–90% and cut origin server load by eliminating redundant requests. For sites with CDNs, missing cache headers prevent the CDN from doing its job — every request bypasses the edge cache and hits the origin. For clients on managed hosting with bandwidth costs, missing cache headers also directly increase hosting bills. This is a frequently overlooked fix that delivers significant, measurable improvements in real-user field data.

Root Diagnostics

Common Causes

Understanding why this failure occurs is the first step to fixing it permanently.

01

No Cache-Control Headers

The server returns responses without Cache-Control headers, so browsers and CDNs default to no caching or short-lived caching. Every asset must be re-downloaded on each page visit.

02

Cache-Control: no-store or no-cache on Static Assets

Static assets (images, fonts, CSS) are configured with no-store or no-cache directives — often copied from API endpoint configurations. Static assets should be cached aggressively; only dynamic content needs no-cache.

03

Short max-age Values

Cache-Control headers exist but with max-age values of seconds or minutes rather than days or years. A max-age of 3600 (1 hour) means browsers re-download assets on every new browsing session.

04

CDN Not Configured to Cache HTML

The CDN is set up but configured to pass all requests through to the origin without caching HTML pages. Static assets are cached but the HTML document — which triggers all other requests — is not.

Interactive Standard Operating Procedure

The Fix Blueprint (Interactive SOP)

Check off each step to monitor your implementation progress live!

Implementation Progress: 0% Completed (0/7)

Tools

  • Chrome DevTools Network Panel
    Free | Inspect response headers on any asset to check Cache-Control, Expires, and ETag values
  • WebPageTest
    Free (webpagetest.org) | Repeat View test shows exactly which assets are cached and which are re-downloaded on return visits
  • GTmetrix
    Free tier available | Caching report flags all assets missing or misconfigured cache headers with specific fix recommendations

Time to Fix

30–60 minutes
To audit headers across all asset types
Hours
Server config + CDN rules implementation

Pro Tip

immutable in Cache-Control eliminates unnecessary revalidation requests.

Adding immutable to Cache-Control headers for versioned assets (Cache-Control: public, max-age=31536000, immutable) tells browsers not to bother checking whether the resource has changed during the max-age period — even on explicit reload. Without immutable, browsers still send conditional requests to the server to validate cached resources on reload. With immutable, those requests are eliminated entirely for properly fingerprinted assets.