Browser Caching Headers Missing or Too Short

Google recommends a minimum cache lifetime of 30 days for all cacheable subresources, with one week as the absolute minimum and one year recommended for static assets (Chrome DevTools Lighthouse). Without caching headers, every return visit downloads your CSS, JavaScript, images, and fonts from scratch — wasting bandwidth and making your site feel slow for your most engaged users.

Start here

Before You Fix It: What This Check Means

Caching policy determines whether repeat visitors and bots can reuse responses efficiently. In plain terms, this tells you whether users are likely to feel this page as fast, stable, and usable. Scavo samples first-party static assets discovered in page HTML (scripts, styles, images), up to 8 assets, and probes headers.

Why this matters in practice: degraded speed here often compounds into lower conversion and weaker user trust.

How to use this result: treat this as directional evidence, not final truth. Synthetic sampling may not fully match real-user device/network variability. First, confirm the issue in live output: verify directly in live production output with browser/network tools Then ship one controlled change: Use hashed/immutable asset filenames for JS/CSS/media. Finally, re-scan the same URL to confirm the result improves.

TL;DR: Cache-Control and Expires headers are missing or set too low, forcing returning visitors to re-download assets they already have.

Google recommends a minimum cache lifetime of 30 days for all cacheable subresources, with one week as the absolute minimum and one year recommended for static assets (Chrome DevTools Lighthouse). Without caching headers, every return visit downloads your CSS, JavaScript, images, and fonts from scratch — wasting bandwidth and making your site feel slow for your most engaged users.

What Scavo checks (plain English)

Scavo samples first-party static assets discovered in page HTML (scripts, styles, images), up to 8 assets, and probes headers.

A sampled asset is considered strongly cacheable when:

  • Cache-Control has max-age >= 86400 (1 day), or
  • Cache-Control includes immutable, or
  • Expires is sufficiently far in the future

It also treats no-store / no-cache as weak for static assets.

How Scavo scores this check

Result behavior:

  • Pass: >=70% sampled assets have strong caching
  • Warning: 40-69% strong caching (mixed)
  • Fail: <40% strong caching
  • Info: sampling inconclusive or no eligible first-party assets

In your scan report, this appears under What failed / What needs attention / What is working for caching, followed by Recommended next steps and Technical evidence (for developers) when needed.

  • Scan key: caching
  • Category: PERFORMANCE

Why fixing this matters

Weak caching increases repeat page-load cost, bandwidth, and render delays, especially on mobile/constrained networks. Good cache policy is one of the fastest practical performance wins.

Operationally, strong caching also stabilizes delivery under load because fewer repeat requests hit origin for unchanged versioned assets.

Common reasons this check flags

  • Static files served with no cache headers.
  • Shared default header middleware sets short or no-store policies globally.
  • Unversioned asset URLs force conservative cache settings.
  • CDN policy differs between file types or path prefixes.

If you are not technical

  1. Ask your dev team whether static files use versioned filenames/hashes.
  2. Confirm repeat visits should not redownload unchanged JS/CSS/images.
  3. Prioritize high-traffic page templates first.
  4. Re-run Scavo and watch strong-cache percentage trend upward.

Technical handoff message

Copy and share this with your developer.

Scavo flagged Browser Caching (caching). Please apply strong cache directives to versioned first-party static assets (max-age >= 86400 and/or immutable), and share before/after header evidence.

If you are technical

  1. Use hashed/immutable asset filenames for JS/CSS/media.
  2. Set long-lived cache headers for versioned assets.
  3. Keep HTML/document cache policy separate from static-asset policy.
  4. Avoid no-store for versioned static files unless absolutely required.
  5. Verify CDN and origin policies are aligned by path/type.

How to verify

  • Inspect response headers for sampled first-party assets.
  • Confirm Cache-Control is strong on versioned assets.
  • Ensure caching rules differ appropriately between HTML and static files.
  • Re-run Scavo and confirm strong-cache ratio improves.

What this scan cannot confirm

  • It does not verify cache hit ratio in your CDN analytics.
  • It samples only a subset of first-party assets per page.
  • It does not evaluate third-party asset cache strategy.

Owner checklist

  • [ ] Assign owner for static-asset cache policy.
  • [ ] Standardize cache headers by asset type/path.
  • [ ] Add regression tests for cache headers in release checks.
  • [ ] Recheck after CDN migrations or build-pipeline changes.

FAQ

Is one day (max-age=86400) enough?

It is the minimum "strong" threshold in this check. Versioned assets often benefit from much longer lifetimes with immutable.

Should HTML pages also be long-cached?

Usually no. HTML often needs faster revalidation; static assets can be far more aggressive.

Why can this be inconclusive?

Some probes are blocked or return insufficient header data, reducing confidence.

What should we fix first?

Start with JS/CSS bundles and hero/media assets on key landing pages.

Sources


Need a path-based cache policy template (HTML vs static vs API) for your stack? Send support your routing pattern.

More checks in this area

minification

CSS and JavaScript Not Minified

Minification strips whitespace, comments, and unnecessary characters from code without changing functionality — typically saving 20-30% on file size. Every visitor downloads your development comments and formatting. Build tools like Terser (JS) and cssnano (CSS) handle this automatically, and most CDNs offer it as a toggle.

Open guide
core_web_vitals

Core Web Vitals Failing — LCP, INP, or CLS Issues

Google officially confirmed on March 12, 2024 that Core Web Vitals are used as a ranking factor (Google Search Central). After the March 2024 core update, sites with poor CWV experienced 20-40% traffic drops while those that improved saw 15-30% gains (BrightVessel). Pages at position 1 are 10% more likely to pass CWV than pages at position 9 (BKND).

Open guide
estimated_full_page_load

Page Too Heavy — Estimated Load Time Too High

Bounce probability increases 32% when page load time goes from 1 to 3 seconds, and 123% at 10 seconds (Google/Huckabuy). Conversion rates drop by 4.42% for each additional second of load time (WP Rocket). The average page loads in 2.5s on desktop but 8.6s on mobile (ToolTester, 2026) — meaning mobile users are already at the edge of abandonment before your page finishes.

Open guide