304 Not Modified to kod odpowiedzi HTTP należący do klasy 3xx (przekierowania), który informuje przeglądarkę lub innego klienta, że żądany zasób nie zmienił się od czasu ostatniego pobrania — i może zostać wczytany bezpośrednio z lokalnej pamięci podręcznej (cache) zamiast być ponownie przesyłany przez serwer. To mechanizm warunkowego pobierania, który ogranicza zbędny ruch sieciowy i przyspiesza ładowanie stron.
- Kod 304 pojawia się tylko przy żądaniach warunkowych — przeglądarka musi wysłać nagłówek
If-None-MatchlubIf-Modified-Since. - Odpowiedź 304 nie zawiera treści (body) — serwer zwraca wyłącznie nagłówki.
- Prawidłowe działanie 304 redukuje zużycie przepustowości i skraca czas odpowiedzi serwera.
- Mechanizm ma bezpośredni wpływ na crawl budget i Core Web Vitals.
Jak 304 Not Modified działa w praktyce
Mechanizm warunkowego żądania HTTP
Gdy przeglądarka pobiera zasób po raz pierwszy, serwer odsyła go wraz z nagłówkami ETag (unikalny identyfikator wersji pliku) lub Last-Modified (data ostatniej modyfikacji). Przy kolejnym żądaniu tego samego zasobu przeglądarka dołącza do zapytania nagłówek If-None-Match z wartością ETag lub If-Modified-Since z datą. Serwer porównuje te wartości ze stanem aktualnym pliku — jeśli nic się nie zmieniło, odpowiada kodem 304 i nie przesyła żadnych danych. Przeglądarka wczytuje zasób z własnego cache.
Przepływ komunikacji — krok po kroku
Poniżej uproszczony schemat wymiany nagłówków między klientem a serwerem przy odpowiedzi 304:
| Etap | Klient (przeglądarka) | Serwer |
|---|---|---|
| Pierwsze żądanie | GET /style.css | 200 OK + plik + ETag: "abc123" |
| Kolejne żądanie | GET /style.css + If-None-Match: "abc123" | 304 Not Modified (brak body) |
| Plik zmieniony | GET /style.css + If-None-Match: "abc123" | 200 OK + nowy plik + ETag: "xyz789" |
Czym różni się 304 od 200 i 301?
Kod 200 oznacza pełną odpowiedź z przesłaniem zasobu, 301 to trwałe przekierowanie do innego URL-a, a 304 sygnalizuje jedynie, że kopia w cache jest aktualna — bez przesyłania jakichkolwiek danych. W odróżnieniu od 301, kod 304 nie zmienia adresu URL i nie wymaga od klienta pobrania zasobu z nowego miejsca. Mylenie tych kodów to częsty błąd przy diagnostyce wydajności i SEO.
Konfiguracja po stronie serwera
Obsługa 304 wymaga, by serwer prawidłowo generował nagłówki ETag lub Last-Modified. W Apache wystarczy upewnić się, że moduł mod_headers jest aktywny. W Nginx natywna obsługa ETag jest włączona domyślnie od wersji 1.7.3. W środowiskach PHP lub Node.js deweloper musi ręcznie implementować logikę porównywania nagłówków — frameworki takie jak Express.js mają tę funkcję wbudowaną. Warto też skonfigurować nagłówek Cache-Control, który współpracuje z mechanizmem 304 i precyzuje, jak długo klient może przechowywać zasób bez ponownego odpytywania serwera.
Znaczenie dla SEO i widoczności
Prawidłowa obsługa kodu 304 wpływa na SEO co najmniej trzema kanałami. Pierwszym jest crawl budget — Googlebot, jak każdy klient HTTP, obsługuje warunkowe żądania. Gdy serwer odpowiada 304 dla niezmienionego zasobu, bot nie musi pobierać go ponownie, co pozwala mu przeznaczyć budżet crawlowania na indeksowanie nowych lub zaktualizowanych podstron. Ma to znaczenie szczególnie dla dużych serwisów — sklepy internetowe z tysiącami produktów mogą znacząco zyskać na sprawnej konfiguracji cache’owania. Szczegółową diagnozę w tym zakresie umożliwia audyt SEO.
Drugi kanał to Core Web Vitals, a konkretnie metryki LCP (Largest Contentful Paint) i TTFB (Time to First Byte). Gdy statyczne zasoby — arkusze CSS, skrypty JS, czcionki, obrazy — są serwowane z cache dzięki mechanizmowi 304, czas ładowania strony wyraźnie się skraca. Google od 2021 roku uwzględnia Core Web Vitals jako sygnał rankingowy, więc każda milisekunda ma znaczenie przy konkurencyjnych frazach.
Trzeci kanał to stabilność sygnałów E-E-A-T. Szybka, technicznie poprawna strona buduje lepsze doświadczenie użytkownika, co przekłada się na niższy współczynnik odrzuceń i dłuższy czas sesji — pośrednie sygnały jakości istotne dla algorytmów Google. W ramach pozycjonowania stron optymalizacja nagłówków cache jest jednym z elementów audytu technicznego, który często przynosi szybkie, mierzalne efekty.
ETag lub niepoprawna konfiguracja Cache-Control: no-store, która całkowicie wyłącza mechanizm 304. Sprawdź zachowanie swojego serwera narzędziem curl: curl -I https://twojadomena.pl/style.css — jeśli w odpowiedzi nie ma nagłówka ETag ani Last-Modified, serwer nigdy nie zwróci poprawnego 304, a Googlebot będzie pobierał każdy zasób od zera przy każdej wizycie.FAQ
Czy kod 304 jest dobry czy zły dla SEO?
Kod 304 jest jak najbardziej pożądany — oznacza, że mechanizm cache’owania działa prawidłowo. Jego obecność w logach serwera to sygnał, że zasoby są efektywnie przechowywane po stronie klienta i nie są niepotrzebnie pobierane przy każdym żądaniu. Problemem byłby brak odpowiedzi 304 tam, gdzie zasoby się nie zmieniają, co generuje zbędny ruch i obciąża serwer.
Jak sprawdzić, czy moja strona poprawnie obsługuje 304?
Najprościej użyć zakładki „Sieć” (Network) w Narzędziach deweloperskich Chrome lub Firefox — po odświeżeniu strony zasoby pobierane z cache powinny mieć status 304 lub „from cache”. Można też użyć narzędzia curl z flagą -H "If-None-Match: [wartość ETag]" i sprawdzić, czy serwer odpowiada kodem 304. Bardziej kompleksową analizę logów serwera oferuje audyt SEO.
Co zrobić, gdy serwer nigdy nie zwraca 304?
Należy upewnić się, że serwer generuje nagłówki ETag lub Last-Modified dla serwowanych plików oraz że nagłówek Cache-Control nie blokuje cache’owania dyrektywą no-store. W przypadku CDN (np. Cloudflare) mechanizm 304 może być obsługiwany przez sieć dostarczania treści zamiast przez serwer źródłowy — warto sprawdzić konfigurację reguł cache’owania w panelu dostawcy.
Czy Googlebot obsługuje kod 304?
Tak — Googlebot obsługuje warunkowe żądania HTTP i rozumie odpowiedź 304. Gdy bot przechowuje w swojej pamięci podręcznej wersję zasobu wraz z ETag, przy kolejnej wizycie może wysłać żądanie warunkowe. Serwer odpowiadający 304 oszczędza w ten sposób crawl budget, który bot może przeznaczyć na indeksowanie innych zasobów w serwisie.
304 Not Modified — mały nagłówek, realna różnica w wydajności
Właściwa obsługa kodu 304 to jeden z tych elementów technicznych, które nie rzucają się w oczy, ale mają mierzalny wpływ na szybkość strony, efektywność crawlowania i finalnie na widoczność w Google. Jeśli chcesz sprawdzić, czy Twój serwer i konfiguracja cache działają optymalnie, skontaktuj się z ekspertami Webiti — w ramach audytu technicznego analizujemy m.in. nagłówki HTTP, budżet crawlowania i Core Web Vitals.











