Deutsch

304 Not Modified is an HTTP status code that tells a client its cached copy of a resource is still current, so the server does not send the content again. It answers a conditional GET or HEAD request.

At a glance

Status code
304
Class
3xx (redirection)
Duration
n/a (answer to a conditional request)
In Google
crawler passes on that the content is the same as at the last crawl; otherwise no effect on indexing
Request method
answer to a conditional GET or HEAD, no body

Last checked:

How does a 304 response work?

The client sends a validator from an earlier response, either If-None-Match with an ETag or If-Modified-Since with a date. If the resource has not changed, the server replies with 304 and no body. If it has changed, the server replies with 200 and the full content. MDN lists headers such as Cache-Control, ETag, Date and Vary as allowed in a 304.

Google’s crawlers support ETag and Last-Modified validators, though not every crawler uses them in each request. For a 304, Google’s documentation says the crawler passes on that the content is the same as at the last crawl. In its crawl budget guide, Google lists support for 304 among the ways to reduce server load on large sites.

Cache headers and 304 compared
Header / statusRequest counterpartWhat it doesRelevance for Google's crawlers
Cache-Control– (directives can also appear in requests)lists directives for caches, e.g. max-age (fresh for N seconds), no-cache (reuse only after revalidation), no-store (do not store)max-age is optional and helps crawlers decide when to recrawl the URL; Google does not support other caching directives
ETagIf-None-Matchidentifier for the current version of a resourcesupported and recommended by Google because it has no date formatting issues; takes precedence when both validators are present
Last-ModifiedIf-Modified-Sincedate and time at which the server believes the resource was last modifiedsupported; the date must follow the HTTP format, e.g. Fri, 4 Sep 1998 19:15:56 GMT
304 Not Modified (this term)response to a conditional GET or HEAD requestsignals that the stored copy is still valid; the response has no bodythe crawler tells the next system that the content is the same as at the last crawl; Search may recalculate signals, otherwise no effect on indexing

Google suggests setting both ETag and Last-Modified, since other applications use them too. Whether a Google crawler uses caching depends on its product: Googlebot uses it when recrawling URLs for Google Search. According to Google's December 2024 blog post, only 0.017% of all fetches could be served from cache. Sources: Google Crawling Infrastructure: Overview of Google crawlers and fetchers, HTTP caching (last updated 2026-06-12); Google Search Central Blog: Crawling December: HTTP caching (2024-12-09); Google Crawling Infrastructure: HTTP status codes, network and DNS errors (last updated 2026-02-04); MDN: HTTP caching; RFC 9111: HTTP Caching; RFC 9110: HTTP Semantics (8.8.2 Last-Modified, 8.8.3 ETag, 15.4.5 304). Last checked: .

Example

HTTP
GET /page/ HTTP/1.1
If-None-Match: "abc123"

HTTP/1.1 304 Not Modified
ETag: "abc123"

Common mistakes

A server sends 304 for every request, or a 304 for a changed page. The crawler then keeps the old version.

Sources

  1. 304 Not Modified – MDNdeveloper.mozilla.org
  2. How HTTP status codes, and network and DNS errors affect Google Search – Google Search Centraldevelopers.google.com
  3. Crawl budget management for large sites – Google Search Centraldevelopers.google.com
  4. HTTP caching of Google's crawlers – Google Crawling Infrastructuredevelopers.google.com

Last updated: