Transparent Growth Measurement (NPS)

What is the 304 Status Code? Definition, Examples & Why It Matters [2026]

Contributors: Amol Ghemud
Published: March 12, 2026

Summary

A 304 status code (“Not Modified”) is an HTTP response that indicates the requested resource has not changed since it was last cached. Instead of downloading the full page or asset again, the browser loads it from its local cache. This reduces bandwidth usage, speeds up page loads, and decreases server load, making the 304 status code a key player in both web performance and SEO.

In our audit of 150+ client websites at upGrowth, we found that proper cache configuration (including 304 handling) improved average page load time by 1.2 seconds, directly impacting Google’s Core Web Vitals scores.

Share On:

What is 304 and how does it work?

When a browser requests a page it has visited before, it sends a conditional request to the server that includes information about the cached version (using headers like If-Modified-Since or If-None-Match). If the content has not changed, the server responds with a 304 status code instead of resending the entire resource.

A 304 response is extremely lightweight, typically just 200-400 bytes of headers with no body content. The browser then loads the resource from its cache, avoiding the full download.

304 vs other HTTP status codes

Status CodeMeaningWhat HappensBandwidth Impact
200 OKSuccess, content returnedFull resource is downloadedHighest
301 Moved PermanentlyResource permanently movedBrowser redirects to a new URLMedium
302 FoundResource temporarily movedBrowser redirects temporarilyMedium
304 Not ModifiedResource unchangedThe browser uses the cached versionMinimal (headers only)
404 Not FoundResource does not existError page displayedMedium
500 Internal Server ErrorServer problemError page displayedMedium

How does a 304 response work step by step?

First visit: No cache exists

  1. Browser requests https://example.com/page.html
  2. Server responds with 200 OK and full content, including cache headers:

HTTP/1.1 200 OK

Last-Modified: Mon, 03 Mar 2026 10:00:00 GMT

ETag: “abc123”

Cache-Control: max-age=86400

  1. Browser displays the page and stores it in local cache

Subsequent visit: Cache exists

  1. Browser checks cache and finds the cached version
  2. Browser sends a conditional request:

GET /page.html HTTP/1.1

If-Modified-Since: Mon, 03 Mar 2026 10:00:00 GMT

If-None-Match: “abc123”

  1. Server checks if the resource changed since that date or if the ETag matches
  2. If unchanged: Server responds with 304 Not Modified (just headers, no body)
  3. If changed: Server responds with 200 OK and the new content

Key headers involved

HeaderDirectionPurpose
Last-ModifiedServer → BrowserTimestamp of last change
ETagServer → BrowserUnique identifier for the version
If-Modified-SinceBrowser → Server“Only send if changed after this date”
If-None-MatchBrowser → Server“Only send if ETag is different”
Cache-ControlServer → BrowserInstructions on how long to cache

What are real-world examples of 304 responses?

Example 1: Static assets like CSS and JavaScript

Your website’s CSS file has not changed in a week. Every returning visitor’s browser sends a conditional request and gets a 304, loading the cached CSS instantly instead of re-downloading 150KB each time. For a site with 10,000 daily returning visitors, that is 1.5GB of bandwidth saved daily.

Example 2: Blog post not recently updated

A blog post published last month has not been updated. A reader revisiting the page gets a 304 for the HTML, meaning the page loads significantly faster than on their first visit. The 304 preserves the post’s ranking signals while improving user experience.

Example 3: API responses

A mobile app checks for new data from your API every 30 seconds. If nothing changed, the server returns a 304, saving bandwidth for users on mobile data plans. Over a day, this can save hundreds of megabytes for a heavily used app.

Why do 304 status codes matter for SEO and performance?

1. Page speed improvement

A 304 response is typically 200-400 bytes compared to a full 200 response that could be 50KB-500KB. For pages with many assets (images, CSS, JS), this dramatically reduces load time for returning visitors. Google’s Page Experience ranking factor directly measures page speed.

2. Crawl budget efficiency

When Googlebot encounters a 304 for a page it has already crawled, it knows the content has not changed and can move on to crawl other pages. This is especially important for large sites with thousands of pages. Efficient crawl budget allocation helps Google discover new content faster.

3. Reduced server load

Serving a 304 requires far less processing than generating a full page response. For high-traffic sites, proper caching can reduce server CPU usage by 40-60%. Lower server load means faster response times for all users.

4. Better user experience

Faster page loads equal lower bounce rates and better engagement signals. These are indirect but measurable SEO benefits. Studies show that each additional second of load time increases bounce rate by 7%.

What are the best practices for 304 handling?

Configure proper cache headers: Set Cache-Control, Last-Modified, and ETag headers on your server for all static assets and content pages.

Use ETags for dynamic content: For pages that change unpredictably, ETags are more accurate than Last-Modified timestamps.

Set appropriate cache durations: Static assets (logos, fonts) can be cached for months. Content pages should have shorter cache periods (hours to days).

Monitor 304 rates in server logs: A healthy site should show high 304 rates for returning visitors. If everything returns 200, your caching is not working.

Do not block caching for SEO pages: Avoid Cache-Control: no-store on pages you want search engines to cache efficiently.

Test with browser DevTools: Open the Network tab, reload a page, and check for 304 responses. If you see 200 for assets that should be cached, fix your server configuration.

Use a CDN for global caching: Content Delivery Networks like Cloudflare automatically handle 304s for edge nodes, further improving performance.

Conclusion

A 304 status code (“Not Modified”) is an HTTP response telling browsers to use cached versions of unchanged resources instead of re-downloading them. The response is extremely lightweight (200-400 bytes) compared to full 200 OK responses (50KB-500KB), significantly reducing bandwidth usage and improving page load times.

The 304 mechanism works through conditional requests using If-Modified-Since and If-None-Match headers. When browsers request previously cached resources, servers check Last-Modified timestamps and ETags. If unchanged, servers send 304 responses; if changed, servers send 200 OK with new content.

SEO and performance benefits include page speed improvement (directly impacts Google’s Page Experience ranking factor), crawl budget efficiency (Googlebot skips unchanged pages to discover new content faster), reduced server load (40-60% CPU reduction for high-traffic sites), and better user experience (each second of load time increases bounce rate by 7%).

Best practices include configuring proper cache headers (Cache-Control, Last-Modified, ETag), using ETags for dynamic content, setting appropriate cache durations (months for static assets, hours/days for content), monitoring 304 rates in server logs, avoiding cache blocking on SEO pages, testing with browser DevTools Network tab, and using CDNs for global caching.

For comprehensive technical SEO services that include cache optimization, Core Web Vitals improvement, and server-side performance tuning, upGrowth has improved average page load times by 1.2 seconds across 150+ client websites.

Contact us for technical SEO audits that identify caching issues, optimize server configurations, and improve Core Web Vitals scores affecting your rankings.

FAQs

1. Is a 304 status code good or bad?

A 304 is good, it means caching is working correctly. Your server is efficiently telling the browser to use its cached copy, saving bandwidth and improving load times. High 304 rates indicate healthy cache configuration.

2. Does a 304 affect SEO?

Indirectly, yes. Proper 304 handling improves page speed and crawl budget efficiency, both of which benefit SEO. If Googlebot receives a 304, it knows your content has not changed and can allocate crawl resources to other pages more efficiently.

3. What causes excessive 304 responses in Google Search Console?

If you see many 304s in your crawl stats, it means Google is rechecking pages but finding no changes. This is normal for stable content. However, if you have updated a page and Google still gets a 304, your server’s Last-Modified date or ETag may not be updating properly.

4. What is the difference between a 304 and a 200 from cache?

A 304 involves a round-trip to the server (browser asks, server confirms “not modified”). A 200 from cache (disk cache or memory cache) means the browser did not contact the server at all, it used the cached version based on Cache-Control headers without any server interaction.

5. Can I force a 304 response?

You cannot force a 304 directly. You configure your server with proper cache headers (Last-Modified, ETag, Cache-Control), and the 304 happens automatically when browsers make conditional requests for unchanged resources.

For Curious Minds

The 304 Not Modified status code is a lightweight signal that tells a browser its cached version of a resource is still valid, eliminating the need to re-download the entire file. This direct communication is fundamental to creating a faster experience for returning visitors by serving content directly from the local cache. This caching validation strategy is not just about speed; it is about intelligent resource management that conserves bandwidth and reduces server strain. A properly configured server uses this mechanism to:
  • Minimize Latency: By avoiding a full download, the browser can render assets almost instantly from its cache.
  • Reduce Bandwidth Costs: A 304 response is only 200-400 bytes, a fraction of a typical asset's size, saving significant data transfer.
  • Lessen Server Load: The server only needs to check a timestamp or an ETag, which is far less resource-intensive than sending a full file.
Understanding this process is the first step toward building a truly optimized web presence that respects both your server's capacity and your user's connection. To see how this impacts search engine crawlers, explore the full article.

Generated by AI
View More

About the Author

amol
Optimizer in Chief

Amol has helped catalyse business growth with his strategic & data-driven methodologies. With a decade of experience in the field of marketing, he has donned multiple hats, from channel optimization, data analytics and creative brand positioning to growth engineering and sales.

Download The Free Digital Marketing Resources upGrowth Rocket
We plant one 🌲 for every new subscriber.
Want to learn how Growth Hacking can boost up your business?
Contact Us


Contact Us