What does HTTP 304 mean?
The cached copy is still valid, so the server sends no body. Browsers send If-None-Match (with an ETag) or If-Modified-Since. If nothing changed, the server replies 304 and the browser reuses its cache — saving bandwidth and time.
3xx Redirection: The client must take another step — usually follow the URL in the Location header — to complete the request.
304 and SEO
Good for crawl efficiency: Googlebot supports conditional requests, and 304 responses save crawl budget on large sites.
Example response
HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=600
How to return a 304 response
Node.js (Express)
res.status(304).json({ error: 'Not Modified' });PHP
http_response_code(304);Python (Flask)
return {'error': 'Not Modified'}, 304Go (net/http)
w.WriteHeader(304)nginx
return 304;
Related status codes
- 200 OK — The request succeeded and the response body contains the requested resource.
- 412 Precondition Failed — A condition in the request headers (If-Match, If-Unmodified-Since) was not met.
Check which status code a URL returns with the HTTP header checker, or trace a redirect chain with the redirect checker.