What is a 304 Not Modified response?
When a browser already has a copy of a page, it can ask the server a cheaper question than "send me the page": it asks "has this changed since the version I have?" It does that by sending the date it last fetched the file or a fingerprint of the content called an ETag. If nothing has changed, the server replies with a 304 and no body at all, and the browser uses the copy it already holds. The response is a few hundred bytes instead of a full page.
It is a 3xx code, which puts it in the redirect family, but it does not send anyone anywhere. It is closer to a nod: you already have this, carry on.
Why it matters
Why 304 Not Modified matters
Speed and bandwidth, mostly. Repeat visitors get pages, images, scripts and stylesheets from local cache without downloading them again, so the site feels faster on the second visit than the first. For a media-heavy brand site, where the hero film and the campaign imagery are the biggest files on the page, the saving is real.
It matters for crawling too. Googlebot sends conditional requests, and a server that answers 304 correctly lets the crawler confirm that an unchanged page is unchanged without downloading it. On a large site that frees crawl budget for the pages that actually moved. A server that always answers 200, even when nothing changed, makes the crawler do all the work every time.
In practice
How 304 Not Modified works in practice
- 01
It is configured, not written. The web server, the CDN or the hosting platform sets caching headers on each type of file: how long it can be cached, whether it carries an ETag, whether it should be revalidated. Most modern hosting does a reasonable job by default for images and static assets, and a poorer job for HTML pages, which often ship with headers that forbid caching entirely.
- 02
The check is in the browser's developer tools. Load a page twice and look at the network panel: assets returning 304 on the second load, or served from memory cache without a request at all, are working. Assets returning 200 with the full file size every time are not being cached, and someone should ask why.
Watch out
What people get wrong about 304 Not Modified
Treating it as an error because it is not a 200. A page audit that flags every 304 as a problem has misread the code; it is the sign of a server and a browser cooperating. The actual mistake runs the other way: caching so aggressively that an updated page keeps serving the old version, which is why cache headers on HTML need a shorter life than headers on a logo that has not changed in years.
Forgetting the crawler. Caching is usually tuned for visitors, but the conditional request from Googlebot is the one that affects indexing. If your server cannot answer it, every crawl of your site is a full download.





