- Jak odtworzyć przeciążenie w kontrolowanych warunkach
- Weryfikacja tożsamości robota i zakresu testów
- Ustalenie stanu bazowego i metryk
- Techniki wywołania przeciążenia
- Bezpieczne ograniczanie ryzyka na produkcji
- Zbieranie i analiza logów HTTP
- Konfiguracja logowania po stronie serwera
- Segmentacja botów i identyfikacja wariantów
- Wskaźniki i progi alarmowe
- Narzędzia analityczne i przykłady pracy z danymi
- Reakcje Googlebota na błędy i sterowanie tempem crawl
- Semantyka statusów: 5xx, 429, 503 i Retry-After
- Empiryczne progi i algorytm backoff
- Robots.txt, crawl-delay i ustawienia Search Console
- Cache, CDN i strategie odpowiedzi
- Projekt eksperymentu i interpretacja wyników pod kątem SEO
- Hipotezy, zmienne i plan
- Korelacja z raportem Crawl Stats i innymi danymi
- Wpływ na indeksowanie, kanonikalizację i ranking
- Runbook, automatyzacja i dobre praktyki
Badanie, jak zachowuje się Googlebot pod presją ograniczonych zasobów, to praktyka łącząca inżynierię wydajności i SEO techniczne. Świadoma symulacja przeciążenia, precyzyjny zapis i analiza logów oraz poprawna sygnalizacja błędów pozwalają zrozumieć mechanizmy ograniczania tempa crawl i minimalizować ryzyko utraty pokrycia indeksu. Poniżej znajdziesz metody krok po kroku: od przygotowania środowiska testowego, przez metryki, aż po interpretację wpływu na indeksowanie.
Jak odtworzyć przeciążenie w kontrolowanych warunkach
Weryfikacja tożsamości robota i zakresu testów
Zanim zaczniesz, upewnij się, że ruch faktycznie pochodzi od Google. Zweryfikuj adresy IP metodą odwrotnego DNS (rDNS) z weryfikacją zwrotną: najpierw uzyskaj nazwę hosta z IP, a potem sprawdź, czy wskazuje ono ponownie na to samo IP. Pozwoli to odróżnić prawdziwego Googlebota od imitacji. Jeśli korzystasz z CDN/WAF, włącz reguły przepuszczające zweryfikowane boty (np. tryb “Verified Bots”), aby nie zafałszować wyników testów.
Określ zakres: czy badamy wariant smartfonowy, desktopowy, czy specjalistyczne roboty (Images, Video, AdsBot, Google-InspectionTool). Wybór wpływa na intensywność i rozkład żądań. Zadbaj też o stabilne okno obserwacji poza sezonowymi szczytami ruchu użytkowników, by nie mylić zmian zachowania botów z naturalną zmiennością obciążenia.
Ustalenie stanu bazowego i metryk
Przed symulowaniem problemów zbierz stan bazowy: średnie żądania na minutę (RPM) od Googlebota, p95 czasu do pierwszego bajtu (TTFB) oraz czasu pełnej odpowiedzi (TTLB), udział statusów 2xx/3xx/4xx/5xx, liczba równoległych połączeń, rozkład po ścieżkach i typach zasobów (HTML, JS, CSS, obrazy). Zanotuj też częstotliwość i głębokość crawl na podstawie Search Console (Crawl Stats) oraz wielkość efektywnego budżet crawlingu.
Stan bazowy powinien obejmować co najmniej kilkadziesiąt godzin, najlepiej tydzień. Dzięki temu odfiltrujesz anomalie dnia i nocy oraz cykle publikacji treści. Zapisz konfigurację serwera (wersje, limity workerów, keep-alive, HTTP/2/3), aby móc odtworzyć testy później.
Techniki wywołania przeciążenia
Przeciążenie możesz symulować kilkoma wektorami, najlepiej rosnąco i pojedynczo, aby móc izolować skutki:
- CPU: ogranicz limity CPU (cgroups), uruchom procesy obliczeniowo kosztowne, obniż priorytety workerów serwera.
- I/O i baza: wprowadź opóźnienia na zapytaniach (np. slow query log i celowe wolne zapytania), dław cache, wyczyść ciepły cache.
- Sieć: użyj narzędzi typu tc/netem do zwiększenia RTT, loss lub ograniczenia pasma.
- Zasoby aplikacji: sztucznie wydłużaj generowanie HTML dla losowego procenta żądań.
W krytycznych punktach zwracaj świadomie 503 Service Unavailable z nagłówkiem Retry-After, 429 Too Many Requests lub 5xx, aby sprawdzić reakcję botów. Wariant 503 z Retry-After jest preferowany do sygnalizacji chwilowych problemów: komunikuje “wróć później” bez trwałych konsekwencji dla indeksacji.
Bezpieczne ograniczanie ryzyka na produkcji
Jeśli testujesz na produkcji, ogranicz powierzchnię ryzyka. Uruchamiaj przeciążenie w krótkich oknach, najlepiej o niskim ruchu. Stosuj filtrowanie po IP, aby dotyczyło tylko Googlebota, lub wybierz izolowany host testowy (np. subdomena kontrolowana przez robots.txt i bez linków wewnętrznych). Miej przygotowany runbook: przywracanie limitów, skalowanie poziome, wyłączanie reguł WAF, przepuszczenie ruchu po CIDR z weryfikacją rDNS.
Zbieranie i analiza logów HTTP
Konfiguracja logowania po stronie serwera
Aby rzetelnie badać zachowanie bota, rozszerz dzienniki serwera web. Dla Nginx użyj własnego formatu log_format, obejmującego m.in.: $remote_addr, $http_user_agent, $request, $status, $request_time, $upstream_response_time, $body_bytes_sent, $http_referer, $http_x_forwarded_for, $request_length, $bytes_sent, $connection_requests, $server_protocol. Dodaj identyfikator żądania (np. X-Request-ID) i wersjonuj konfigurację.
W Apache httpd w LogFormat dołóż %t, %a, %U%q, %s, %D i %I/%O, a w razie proxy – %{X-Forwarded-For}i. W aplikacji warto logować ETAs generowania (np. check-pointy w middleware), aby łatwiej wykrywać, gdzie powstają wąskie gardła (aplikacja vs baza vs cache vs upstreamy).
Segmentacja botów i identyfikacja wariantów
Warto zbudować reguły klasyfikacji żądań: user agent zawiera Googlebot (smartphone/desktop), AdsBot, Google-InspectionTool. Pamiętaj, że sam UA nie jest dowodem – wnioski opieraj na zweryfikowanych IP. Osobno licz ruch do ścieżek wymagających renderingu (HTML) i do zasobów statycznych (CSS/JS/obrazki), aby zrozumieć, czy spadek wydajności dotyka bardziej serwowania HTML, czy assetów – reakcja bota może być inna.
Wyodrębnij parametryzowane strony, infinite scroll, feedy i endpointy API. Googlebot na smartfony potrafi renderować i dociągać zasoby – w przeciążeniu haversy te mogą odpadać pierwsze, co zmienia obraz całości (np. spada liczba render fetches przy stałej liczbie initial fetches).
Wskaźniki i progi alarmowe
Podstawowe wskaźniki do monitorowania podczas przeciążenia:
- Intensywność: RPM/ RPS od Googlebota, liczba równoległych połączeń, rozkład w czasie (minuta, pięć minut).
- Jakość odpowiedzi: udział 5xx (w szczególności 503 i 502/504), 429, 408/499 (klient przerwał połączenie), p95/p99 TTFB i TTLB, wielkość odpowiedzi.
- Stabilność: burstiness (odchylenie standardowe RPM), średnia długość keep-alive, resetowane połączenia.
- Zachowanie bota: czas do ograniczenia crawl po pojawieniu się błędów, tempo powrotu po ustaniu problemów, zmiany w głębokości crawl.
Za sygnał ostrzegawczy uznaj rosnący udział 5xx > 1–2% w krótkim oknie i p95 TTFB > 2–3 s. W takiej sytuacji włącz kontrolowane zwracanie 503 z Retry-After, aby sterować tempem crawl i chronić UX użytkowników.
Narzędzia analityczne i przykłady pracy z danymi
Do szybkiego wglądu sprawdzi się GoAccess (widok live RPS, statusy, UA), a do głębszej analizy – ELK/Opensearch lub BigQuery. Warto budować wykresy: żądania Googlebota vs 5xx w czasie, heatmapy ścieżek i typów zasobów, wykresy korelacji TTFB a udziału 5xx. Dodatkowo skonfiguruj alerting (Prometheus/Grafana) dla progów krytycznych i regresji.
W BigQuery lub innym magazynie twórz widoki: ruch tylko ze zweryfikowanych IP Google, pivot po statusach, histogram TTFB. Dzięki temu łatwo porównisz okna baseline, przeciążenia i powrotu do normy, a następnie zbudujesz modele predykcyjne (np. kiedy grozi wysycenie workerów).
Reakcje Googlebota na błędy i sterowanie tempem crawl
Semantyka statusów: 5xx, 429, 503 i Retry-After
Google interpretuje 5xx jako problemy po stronie hosta i automatycznie ogranicza tempo crawl (backoff). 429 Too Many Requests również jest traktowane jak sygnał “za szybko” i skutkuje spowolnieniem. Z kolei 503 Service Unavailable z nagłówkiem 503 + Retry-After to najczystszy sposób na zakomunikowanie tymczasowej niedostępności wraz z preferowanym oknem powrotu.
Praktyka: dla planowanych krótkich okien prac serwisowych używaj 503 z Retry-After = 120–600 s. Dla przeciążenia dynamicznego – moduluj Retry-After adaptacyjnie (np. 60 s, 120 s, 300 s) w zależności od metryk. Unikaj niekontrolowanych 500/502/504: mieszają semantykę i wydłużają powrót bota. 4xx inne niż 429 sygnalizują problemy trwałe (np. 404), nie używaj ich do throttlingu.
Empiryczne progi i algorytm backoff
Choć Google nie publikuje dokładnych progów, praktyka pokazuje, że przy wzroście 5xx do kilku procent w krótkich oknach (minuty) Googlebot potrafi zauważalnie ograniczyć równoległość i RPS w ciągu kilkunastu–kilkudziesięciu minut. 503 z Retry-After często skutkuje szybszym i łagodniejszym backoffem niż seria niekontrolowanych 500. Powrót do normy bywa stopniowy i może zająć od godzin do dni, zależnie od historii stabilności hosta i dostępnego budżetu crawl.
Testuj różne wartości Retry-After (np. 60 s vs 300 s) oraz strategie: 503 tylko dla HTML vs dla wszystkich zasobów. Porównuj szybkość normalizacji RPM i zmiany głębokości crawl. Ograniczenie dotkliwości przeciążenia nawet o 20–30% w krytycznym oknie może zapobiec gwałtownym spadkom pokrycia indeksu.
Robots.txt, crawl-delay i ustawienia Search Console
Dyrektywa crawl-delay w robots.txt jest ignorowana przez Google, nie używaj jej do throttlingu. Blokady w robots.txt hamują indeksację i powinny być ostatecznością. Zamiast tego stosuj kontrolowane 503/Retry-After lub tymczasowe reguły w aplikacji/WAF dla niekrytycznych tras.
Panel Search Console historycznie pozwalał ograniczyć tempo crawlu, ale w większości kont ta opcja została wycofana. Jeżeli masz do niej dostęp, używaj jej oszczędnie i tylko krótkoterminowo. Kluczowe jest utrzymanie technicznej kondycji hosta – Google dostosowuje tempo na podstawie sygnałów jakości i stabilności.
Cache, CDN i strategie odpowiedzi
Agresywne cache’owanie i pre-rendering kluczowych stron zmniejszają presję na aplikację. Jeśli korzystasz z CDN, rozważ allowlist dla zweryfikowanych IP Google oraz priorytety na krawędzi dla HTML i krytycznych assetów. W przypadku przeciążenia originu – serwuj 503 z krawędzi wraz z Retry-After, by uniknąć lawinowego obciążenia połączeń zwrotnych do originu. Ustal też właściwą politykę 304 Not Modified dla zasobów wersjonowanych – redukuje transfer bez ryzyka mylnej semantyki błędów.
Projekt eksperymentu i interpretacja wyników pod kątem SEO
Hipotezy, zmienne i plan
Przygotuj hipotezy: np. “503 z Retry-After=120 s szybciej stabilizuje crawl niż spontaniczne 500 przy tym samym poziomie przeciążenia”. Zdefiniuj zmienne niezależne (typ błędu, wartość Retry-After, kanał dotkniętych zasobów, poziom throttlingu) i zależne (czas do backoffu, minimalny RPM, czas powrotu do baseline, udział 5xx, zmiana głębokości crawl). Ustal grupy: kontrolną (bez ingerencji) oraz testową (z wybraną strategią), najlepiej na równoległych hostach lub segmentach URL.
Ramy czasowe: okno przygotowania (baseline), okno przeciążenia, okno powrotu. Każde powinno być wystarczająco długie, by zebrać statystycznie istotny wolumen żądań bota (setki–tysiące). W przeciwnym razie wnioski będą obarczone dużą wariancją.
Korelacja z raportem Crawl Stats i innymi danymi
Raport Crawl Stats w Search Console pokaże dobową intensywność i średnie TTK (time spent downloading a page). Koreluj te dane z logami serwera, aby zweryfikować, czy zmiana widoczna w logach odzwierciedla się w wykresach Google (często z opóźnieniem). Sprawdzaj “Host status” – jeśli Google sygnalizuje trudności z dostępem, to potwierdza zbyt agresywne przeciążenie lub niewystarczającą sygnalizację 503/Retry-After.
Połącz to z metrykami indeksacji: tempo pojawiania się nowych adresów w indeksie, opóźnienia między publikacją a pierwszym crawlem, wskaźnik “Discovered – currently not indexed”. Długie okna przeciążenia mogą zwiększać ten kubełek, szczególnie gdy błędy dotyczą stron kanonicznych.
Wpływ na indeksowanie, kanonikalizację i ranking
Przeciążenie i wysokie 5xx obniżają zaufanie crawl do hosta, co może chwilowo zmniejszyć tempo odkrywania i re-crawlu. Upewnij się, że w krytycznych momentach kanoniczne adresy zwracają 200, a nie są objęte 503/429 – priorytetyzuj je w regułach. Nie zmieniaj kanonikali, hreflangów i map witryny w trakcie testów; zachowanie spójności ułatwia Google ocenę stabilności.
Jeżeli strona opiera się na renderingu JS, monitoruj czas i powodzenie fetchy assetów. W przeciążeniu część zasobów pomocniczych może nie być dociągana – to zafałszuje sygnały o jakości strony. Minimalizuj rozmiar HTML i krytycznego CSS, aby skrócić TTFB/TTLB i utrzymać dobrą percepcję jakości hosta przez bota.
Runbook, automatyzacja i dobre praktyki
Przygotuj automatyczne polityki: gdy udział 5xx > X% i p95 TTFB > Y s, włącz 503 z Retry-After=120 s dla wybranych ścieżek i obniż limity równoległych połączeń. Po ustąpieniu przeciążenia automatycznie skracaj Retry-After i rozszerzaj zakres 200. Loguj decyzje kontrolera (feature flagi, wartości progów), aby móc je odtworzyć w analizach.
Ustal listę krytycznych URL-i, które zawsze powinny pozostać dostępne 200 (strona główna, huby kategorii, sitemap.xml). Dla pozostałych ścieżek stosuj stopniowane 503. Dokumentuj eksperymenty w repo (data, zakres, zmienne), aby budować wiedzę organizacyjną i skrócić czas reakcji przy kolejnych incydentach.
Włącz monitoring biznesowy: wpływ przeciążenia na konwersje i ruch organiczny. Nawet jeśli crawl szybko się stabilizuje, długotrwałe okna niskiej dostępności mogą wpływać na ranking przez pośrednie sygnały jakościowe. Dąż do tego, by przeciążenie było krótkie i dobrze zakomunikowane protokołem HTTP, a nie losową mieszanką błędów.
Na koniec pamiętaj: testuj hipotezy iteracyjnie, obejmując małe segmenty URL i krótkie okna czasowe. Zacznij od miękkich interwencji (caching, priorytetyzacja, optymalizacja zapytań), a dopiero potem przechodź do twardszego throttlingu. Systematyczna, rzetelna weryfikacja danych i klarowna sygnalizacja 503/Retry-After pozwalają utrzymać kontrolę nad tempem crawlu bez ryzyka trwałej utraty pokrycia.