Cache'owanie dla SEO

Jak cache'owanie w przeglądarce i na serwerze z użyciem Cache-Control, ETagów i CDN poprawia wydajność oraz Core Web Vitals, a także pułapki cache'owania, które wpływają na indeksowanie.

Opublikowano po raz pierwszy: 2 lip 2026 · Ostatnia aktualizacja: 9 sie 2026 · Advanced
Języki

Cache'owanie przechowuje kopię strony lub zasobu — w przeglądarce, na brzegu sieci CDN lub we własnym cache'u crawlera — dzięki czemu nie trzeba jej ponownie generować ani pobierać. Nie jest to bezpośredni czynnik rankingowy, ale wpływa na dwie rzeczy, które mają znaczenie: szybkość strony / Core Web Vitals (poprzez TTFB i LCP) oraz efektywność indeksowania. Crawler Google honoruje tylko ETag i Last-Modified (oraz max-age jako wskazówkę do ponownego indeksowania) — preferuje ETag, a 'inne dyrektywy cache'owania HTTP nie są wspierane'. Najbardziej ryzykowne błędy cache'owania to nie długie czasy przechowywania, ale błędne konfiguracje CDN i nieaktualne cache, które blokują lub wprowadzają w błąd boty.

TL;DR — Cache’owanie działa na trzech warstwach istotnych dla SEO: w przeglądarce, na brzegu CDN i we własnym cache żądań warunkowych crawlera. Nie jest czynnikiem rankingowym, lecz wpływa na TTFB, LCP, powtórne nawigacje i efektywność crawlowania. Robot Google preferuje ETag względem Last-Modified, traktuje max-age tylko jako wskazówkę i stwierdza, że “other HTTP caching directives aren’t supported.” (tłumaczenie) „Inne dyrektywy cache’owania HTTP nie są obsługiwane”. CDN pomaga po rozgrzaniu cache; ryzykiem są zimne wdrożenia oraz błędne reguły CDN lub WAF.

Evidence for this claim Google's crawler documentation supports ETag/If-None-Match and Last-Modified/If-Modified-Since, prefers ETag when both are present, and says other HTTP caching directives are unsupported; Google's separate max-age advice is a recrawl-timing hint, not proof it follows browser cache semantics. Scope: Google crawling Confidence: high · Verified: Crawling December: HTTP caching Evidence for this claim HTTP caching uses Cache-Control and validators to control reuse and revalidation. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching Evidence for this claim Browser caches can reuse stored responses according to HTTP caching semantics. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching

Trzy warstwy cachowania

Caching dla SEO to nie jedna rzecz — to trzy, każda kontrolowana nieco inaczej:

  1. Pamięć podręczna przeglądarki — urządzenie odwiedzającego przechowuje pliki, dzięki czemu ponowne odwiedziny pomijają sieć. To o tym mówi PageSpeed Insights w komunikacie „Serve static assets with an efficient cache policy.”
  2. Pamięć podręczna CDN / edge — sieć dostarczania treści przechowuje kopie w węzłach brzegowych na całym świecie (pełne omówienie znajdziesz w artykule o CDN i SEO). Własny opis Google: CDN to pośrednik między Twoim origin a użytkownikiem, a historycznie ich największym celem jest buforowanie — przechowywanie zawartości URL-a, aby Twój serwer nie musiał przez jakiś czas ponownie serwować tego pliku.
  3. Pamięć podręczna po stronie crawlera — Googlebot i Bingbot prowadzą własny zapis tego, czy treść się zmieniła, używając żądań warunkowych. To dźwignia budżetu indeksowania, a mechanika należy do artykułu o żądaniach warunkowych; tutaj pozostanę na poziomie podsumowania.

„Pamięć podręczna przeglądarki” powyżej to skrót dla więcej niż jednego mechanizmu. Według przewodnika po buforowaniu HTTP od MDN, warto rozróżniać: prywatną pamięć podręczną HTTP (per-przeglądarkową, kluczowaną żądaniem, a w nowoczesnych przeglądarkach podzieloną według witryny najwyższego poziomu, aby ograniczyć śledzenie między witrynami), pamięć podręczną w pamięci RAM używaną dla bieżącej sesji, bfcache omówione poniżej oraz — osobno — Cache Storage w service workerze, którą kontroluje własny JavaScript witryny i której nagłówki Cache-Control nie zarządzają bezpośrednio. „Sprawdź pamięć podręczną przeglądarki” może oznaczać cztery różne kroki debugowania, w zależności od tego, który mechanizm faktycznie działa nieprawidłowo.

Dlaczego buforowanie wpływa na Core Web Vitals

Pobieranie zasobów przez sieć jest wolne i kosztowne. Buforowanie usuwa opóźnienie sieciowe i koszt transferu dla wszystkiego, co się nie zmieniło. To bezpośrednio przekłada się na dwie metryki powiązane z vitals: TTFB (odpowiedź z pamięci podręcznej pomija regenerację na origin) i LCP (obrazy/CSS/czcionki z pamięci podręcznej renderują się szybciej).

Cache-Control, w dyrektywach, które mają znaczenie

Cache-Control to główny nagłówek. Te, które warto znać:

  • max-age=<seconds> — jak długo świeża kopia jest ważna. Dla niezmiennych, wersjonowanych zasobów dokumentacja Lighthouse od Chrome zaleca buforowanie przez rok lub dłużej — np. Cache-Control: max-age=31536000.
  • no-cachenie „nie buforuj”. Oznacza „przechowaj, ale przed ponownym użyciem zweryfikuj z serwerem”. Nadal umożliwia lekki przepływ 304.
  • no-store — to ten, który faktycznie oznacza nieprzechowywanie żadnej kopii w pamięci podręcznej HTTP. To dyrektywa buforowania, a nie ogólny przełącznik prywatności — według RFC 9111 nie jest niezawodnym sposobem na wyczyszczenie historii przeglądarki i nic nie mówi o własnym Cache Storage w service workerze.
  • public / private — czy współdzielone pamięci podręczne (takie jak CDN) mogą przechowywać odpowiedź, czy tylko przeglądarka końcowego użytkownika.
  • immutable — całkowicie pomiń rewalidację dopóki odpowiedź jest nadal świeża. Nie oznacza „nigdy nie traci ważności” — gdy max-age się skończy, znów obowiązują normalne zasady świeżości.
  • must-revalidate — przeciwny koniec osi czasu: ma znaczenie tylko po tym, jak odpowiedź straci świeżość, i mówi pamięci podręcznej, że musi zweryfikować z origin, zamiast serwować nieświeżą kopię.
  • s-maxage, stale-while-revalidate, stale-if-error — bardziej precyzyjne sterowanie głównie dla CDN i innych współdzielonych pamięci podręcznych (osobny czas świeżości dla współdzielonych pamięci podręcznych, ograniczone ponowne użycie nieświeżych danych podczas działania pobierania w tle oraz ograniczone ponowne użycie nieświeżych danych w przypadku błędu origin). Wsparcie różni się w zależności od przeglądarki/CDN, więc przed poleganiem na nich sprawdź aktualne wsparcie — a żadna z tych dodatkowych dyrektyw nie jest honorowana przez crawlera Google, jak zobaczymy.

Przełamywanie pamięci podręcznej za pomocą wersjonowanych nazw plików

Sztuczka, która pozwala agresywnie buforować i aktualizować natychmiast: umieść hash treści w nazwie pliku — style.x234dff.css. Ponieważ URL jest kluczem pamięci podręcznej, zmiana pliku zmienia URL, więc pamięci podręczne pobierają nową wersję natychmiast, podczas gdy stare wersje pozostają w pamięci podręcznej tak długo, jak chcesz. Zarówno przewodnik po buforowaniu HTTP web.dev Google, jak i opis inżynierii front-endu Binga opisują ten sam wzorzec — Bing hashuje zawartość plików do URL, tak że “the URL acts as the cache key,” (tłumaczenie) „URL pełni funkcję klucza pamięci podręcznej”, co utrzymuje spójność cache i pozwala na długie czasy wygaśnięcia.

Pułapka bfcache — gdzie no-store po cichu szkodzi CWV

Oto mało znany temat. Pamięć podręczna wstecz/do przodu (bfcache) sprawia, że kliknięcie „wstecz” przywraca stronę natychmiast. Przywrócenie z bfcache całkowicie pomija pomiar LCP/CLS/INP, więc to czysta korzyść dla danych terenowych CrUX. Ale zgodnie z przewodnikiem po bfcache Google, ustawienie Cache-Control: no-store na samym dokumencie strony historycznie powodowało, że przeglądarki odmawiały przechowywania tej strony w bfcache. Jeśli potrzebujesz świeżości dokumentu HTML, ale nie chcesz rezygnować z kwalifikowalności do pamięci wstecz/do przodu, sięgnij po no-cache lub max-age=0 zamiast no-store.

Jak pamięć podręczna decyduje, czy treść jest „wystarczająco świeża”

Zanim jakikolwiek walidator wejdzie do gry, pamięć podręczna sprawdza świeżość: czy wiek przechowywanej odpowiedzi przekroczył czas świeżości, który nadało jej Cache-Control (lub, w przypadku braku jawnego czasu życia, heurystyczny czas, który pamięć podręczna może zgadywać)? Nagłówek odpowiedzi Age informuje, jak długo współdzielona pamięć podręczna już przechowuje odpowiedź, co pozwala — w DevTools lub z logu CDN — określić, ile czasu świeżości pozostało. Świeża treść oznacza, że pamięć podręczna może jej użyć natychmiast, bez żadnego żądania. Nieświeża oznacza, że powinna zweryfikować przed ponownym użyciem, co jest dokładnie tym, gdzie ETag/If-None-Match i Last-Modified/If-Modified-Since pokazują swoją wartość — opisane dalej, dla węższej wersji tego ogólnego mechanizmu HTTP używanego przez Googlebota.

Jak Googlebot używa buforowania (kąt efektywności indeksowania)

Google w grudniu 2024 roku opublikowało niezwykle bezpośredni apel w poście Crawling December: HTTP caching: włącz buforowanie, aby jego roboty mogły pominąć ponowne pobieranie niezmienionych stron. Uderzający dany punkt w tym poście jest taki, że liczba buforowanych pobrań spadaokoło 0,026 % wszystkich pobrań było buforowanych 10 lat temu, a dziś ta liczba wynosi 0,017 %. Małe liczby, ale Google wyraźnie chce, aby zmierzały w przeciwnym kierunku.

ETag vs. Last-Modified — który Google woli

Infrastruktura indeksowania Google obsługuje dwa standardowe walidatory: ETag (z If-None-Match) i Last-Modified (z If-Modified-Since). Google zdecydowanie zaleca ETag, ponieważ jego wartość jest nieustrukturyzowana, a przez to mniej podatna na błędy parsowania, do których zaprasza ciąg daty — a jeśli oba są obecne, jego roboty używają wartości ETag zgodnie z wymogami standardu HTTP. Google nadal sugeruje ustawienie obu, ponieważ inne aplikacje, takie jak systemy CMS z nich korzystają. Jeśli używasz Last-Modified, data musi być zgodna z formatem HTTP (na przykład Fri, 4 Sep 1998 19:15:56 GMT), w przeciwnym razie nie zostanie sparsowana.

Gdy zapisany walidator robota wciąż pasuje, Twój serwer zwraca 304 Not Modified bez treści — o to właśnie chodzi. Jak ujmuje to Google, brak treści oznacza, że Twój serwer nie zużywa mocy obliczeniowej na generowanie treści i nie zużywa przepustowości na jej przesyłanie. (Ten mechanizm 304 to element budżetu indeksowania omówiony szczegółowo w artykule o żądaniach warunkowych; tutaj wystarczy wiedzieć, że istnieje i oszczędza pieniądze po obu stronach.)

Niuanse, które prawie wszyscy pomijają

Robot Google nie działa na pełnym zestawie dyrektyw Cache-Control w taki sposób jak przeglądarka czy CDN. Zgodnie z oficjalnym przeglądem robota, poza ETag/Last-Modified, “inne dyrektywy buforowania HTTP nie są obsługiwane.” Jedynym częściowym wyjątkiem jest to, że Google mówi, iż możesz opcjonalnie ustawić max-age, aby pomóc robotom określić, kiedy ponownie indeksować URL — to wskazówka dotycząca ponownego indeksowania, a nie twardy limit. Więc no-cache, s-maxage, stale-while-revalidate i inne wciąż kształtują zachowanie przeglądarek i CDN, ale nie zmieniają sposobu buforowania przez Googlebota. A rada Google dotycząca tego, kiedy unieważniać, jest rozsądna: wymagaj odświeżenia pamięci podręcznej przy znaczących zmianach — aktualizacja tylko daty praw autorskich w stopce nie jest znacząca.

CDN a indeksowanie

CDN daje Ci więcej niż tylko szybkość. Infrastruktura indeksowania Google jest zaprojektowana tak, aby umożliwiać wyższe tempo indeksowania witryn obsługiwanych przez CDN, wnioskowane na podstawie adresu IP serwującego URL-e — zakłada, że źródło za CDN-em może obsłużyć więcej równoczesnych żądań.

Ale jest pewien haczyk, który warto zaplanować: zimna pamięć podręczna. Przy pierwszym dostępie do URL-a pamięć podręczna CDN jest “zimna” — nikt jeszcze o niego nie prosił, więc Twoje źródło musi go obsłużyć przynajmniej raz, aby ogrzać pamięć podręczną. Google ostrzega, że uruchomienie wielu URL-i naraz jest zatem realnym obciążeniem dla budżetu indeksowania, z wysokim tempem indeksowania przez kilka dni. Jeśli planujesz duże uruchomienie lub migrację witryny, zaplanuj, że źródło przyjmie pełne obciążenie na każdy URL, zanim CDN zacznie pomagać.

Błędna konfiguracja CDN to ryzyko dla indeksowania

Najstraszniejsze problemy związane z buforowaniem to nie wolne czasy życia cache — to konfiguracje CDN i WAF, które blokują boty. Wpis Google o CDN jest jednoznaczny: w przypadku tymczasowych blokad wysyłanie kodów 503/429 jest preferowanym sposobem ich sygnalizowania, podczas gdy przekroczenia czasu sieci są traktowane jako terminalne, „twarde” błędy, które mogą spowodować usunięcie adresów URL z indeksu. Podstępny jest miękki blok: strona pośrednia z weryfikacją bota. Crawler widzi tylko stronę wyzwania, a nie Twoją witrynę — dlatego Google zdecydowanie zaleca zwracanie kodu 503 klientom zautomatyzowanym. Najłatwiejszy sposób sprawdzenia, czy CDN po cichu nie blokuje Google, to narzędzie URL Inspection w Search Console — spójrz na wyrenderowany obraz; jeśli pokazuje wyzwanie dla bota lub pustą stronę, porozmawiaj ze swoim dostawcą CDN.

Przenoszenie przekierowań na poziom CDN to technika, którą bardzo lubię. W podcaście Marketing Speak opisałem ją jako “One of my personal favorites that I don’t think it’s used enough, it’s actually just off loading your redirects to the CDN level.” (tłumaczenie) „Jedna z moich osobistych ulubionych technik, która moim zdaniem nie jest wystarczająco wykorzystywana, to po prostu przeniesienie przekierowań na poziom CDN.” (Przejdź do cytatu)

Pułapki buforowania, które szkodzą indeksowaniu i crawlingowi

To jest aspekt, który większość artykułów o „buforowaniu dla SEO” pomija. Cache nie tylko przyspiesza działanie — zły cache może serwować botowi niewłaściwe bajty i zakłócić crawling lub indeksowanie.

Prawdziwy przykład: współdzielony cache serwujący blokujący robots.txt. Zbadałem przypadek sporadycznego blokowania Googlebota, który prowadził do współdzielonego cache CDN między środowiskiem testowym a witryną produkcyjną. Jak napisałem w Indexed, though blocked by robots.txt: “One possible cause would be a shared cache between a test environment and a live environment. When the cache from the test environment is active, the robots.txt file may include a blocking directive.” (tłumaczenie) „Jedną z możliwych przyczyn może być współdzielony cache między środowiskiem testowym a produkcyjnym. Gdy cache ze środowiska testowego jest aktywny, plik robots.txt może zawierać dyrektywę blokującą.” Rozwiązaniem było rozdzielenie cache — lub wykluczenie plików .txt z cache w środowisku testowym. Błędna konfiguracja buforowania bezpośrednio spowodowała awarię crawlingu; to kategoria ryzyka, która naprawdę boli.

Inne pułapki z tej samej rodziny:

  • Nieaktualny cache CDN serwujący botom przestarzałe treści. Jeśli Twój cache brzegowy przechowuje starą wersję długo po opublikowaniu zmiany, boty nadal widzą starą. Czyść cache po publikacji lub powiąż czas życia cache z tym, jak często strona faktycznie się zmienia.
  • Fragmentacja cache przez Vary / User-Agent. Klucz współdzielonego cache to zwykle tylko URL; Vary dodaje do tego klucza nagłówki żądań (takie jak User-Agent czy Accept-Language), aby różne warianty były przechowywane osobno. Jeśli pominiesz nagłówek, który faktycznie zmienia odpowiedź, jeden żądający może otrzymać wariant innego — pomylenie wersji mobilnej/desktopowej lub bot/człowiek. Dodanie zbyt wielu nagłówków do Vary fragmentuje cache na tyle podobnych kluczy, że ledwo poprawia współczynnik trafień. Osobno, nowoczesne przeglądarki dzielą również własne cache według witryny najwyższego poziomu ze względu na prywatność, więc zasób zapisany w cache podczas osadzenia na jednej witrynie zwykle nie jest ponownie używany, gdy jest osadzony na innej — to inny mechanizm niż Vary, którego nie warto mylić podczas debugowania zgłoszenia „dlaczego to nie jest buforowane”.

Moja ogólna zasada dotycząca czasu trwania pochodzi z prac nad LCP: jak to ująłem w moim przewodniku Ahrefs o największym wyrenderowaniu treści: “Your cache time should be as long as you are comfortable with” (tłumaczenie) „Ustaw czas cache tak długi, jak uznasz za bezpieczny” — oraz “An ideal setup is to cache for a really long period of time but purge the cache when you make a change to a page.” (tłumaczenie) „Idealnie cache działa bardzo długo, ale jest czyszczony po zmianie strony”. Długi cache i natychmiastowe czyszczenie sprawia, że jesteś zarówno szybki, jak i aktualny.

Czy cache jest czynnikiem rankingowym?

Nie — nie bezpośrednio. Nie ma sygnału rankingowego za posiadanie ustawionych ETagów ani za dobrą politykę Cache-Control. To, co robi cache, to zasilanie dwóch rzeczy, które mają znaczenie dla widoczności: szybkości strony / Core Web Vitals (jawne kryterium doświadczenia strony) oraz wydajności indeksowania (która reguluje, jak szybko nowe i zaktualizowane treści są odkrywane i odświeżane, pośrednio wpływając na wyniki wrażliwe na świeżość). Skonfiguruj to, ponieważ sprawia, że Twoja strona jest szybka i łatwa do indeksowania — nie dlatego, że oczekujesz bezpośredniego wzrostu pozycji.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.