Last-Modified present

Whether responses carry Last-Modified validators.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · Phone field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Last-Modified present

Whether responses carry Last-Modified validators.

0.0%
Adoption
0 of 0
With (median INP)
Without (median INP)
The State of Web Vitals · Q2 2026 · 189,915 sites · phone field datacorewebvitals.io/state-of-cwv
2

Last-Modified present sites that have it vs sites that don't

Last-Modified present
0%

0.0% of sites send Last-Modified headers (0 of 0). With send: INP —, 0.0% pass. Without: INP —, 0.0% pass. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · phone field datacorewebvitals.io/state-of-cwv
3

Why this matters for the Core Web Vitals, and where to start fixing it

Last-Modified is the older validator. The browser sends the timestamp back (If-Modified-Since) and the server answers 304 Not Modified when nothing changed, saving the re-download of an expired cache entry.

It is weaker than an ETag: one-second resolution, and deploys often touch timestamps without changing content, which breaks the match. But any validator beats none. A response with no validator and a short TTL is re-downloaded in full on every revisit.

Related signals HTTP protocol → HTML size (kB) → Connection hints → HTML compression → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (1) — admin only
Query #1: 18.3 ms
SELECT m.headers.has_last_modified AS val, COUNT(*) AS n,
            quantile_disc(crux."phone".inp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL AND crux."phone".inp <= 200) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL), 0) AS good,
            COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL AND crux."phone".inp > 200 AND crux."phone".inp <= 500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL), 0) AS ni,
            COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL AND crux."phone".inp > 500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".inp IS NOT NULL), 0) AS poor
            FROM sites WHERE 1=1 GROUP BY m.headers.has_last_modified;
JSON file lookups (4)
20260625/meta.json 0.04 ms
20260625/types.json 0.93 ms
20260625/loaf-scripts.json 0.70 ms
20260625/menu.json 0.21 ms