Missing Last-Modified header: enable conditional GET
Without a Last-Modified header, Googlebot re-downloads unchanged pages every crawl. Find pages missing it and learn how to enable conditional GET and 304s.
What it means
The HTTP response for this page includes no Last-Modified header. Last-Modified tells crawlers when the content last changed, enabling a conditional If-Modified-Since request on the next visit. Without it (and without an ETag), Googlebot must download the full page body every time it crawls the URL.
Why it matters
When a page returns Last-Modified, Googlebot stores the timestamp and revalidates with If-Modified-Since; an unchanged page then returns 304 Not Modified with no body. Without any validator this negotiation is impossible and the full body is re-fetched on every crawl. Google's crawl-budget guidance names proper conditional-GET support as a server-side crawl-efficiency win; the impact compounds on large sites with many stable pages. This is a lab-proxy read from the response headers, not a measure of crawl frequency.
How to fix it
- On Apache/Nginx, static files serve
Last-Modifiedautomatically from filesystem mtime — confirm it is not stripped. - For dynamic pages, store the content's last-updated timestamp and emit it as
Last-Modifiedin RFC 7231 HTTP-date format. - On Vercel/Netlify/CDN edge functions, set the header explicitly for dynamic responses.
- If a timestamp is impractical, emit an
ETag(content hash) instead — either header enables conditional GET.
When it's not a problem
Genuinely dynamic pages — session-specific, personalised, or generated per request — cannot reliably emit Last-Modified and the absence is intentional. Pages behind auth, or proxies that strip headers, may also omit it. Suppress the finding for URL patterns where dynamic generation makes the header inappropriate.
How common is it?
10852 audited sites in our corpus currently show this issue. The breakdowns below show which platforms, gatekeepers, verticals and countries are most exposed.
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.