Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Rozmowa o zabezpieczeniach zwykle nie należy do zadań osoby odpowiedzialnej za widoczność w wyszukiwarce — do momentu, w którym po wdrożeniu ochrony liczba zaindeksowanych podstron zaczyna spadać. Wtedy okazuje się, że nikt nie sprawdził, jak nowe reguły traktują roboty wyszukiwarek, bo w zespole od bezpieczeństwa robot to po prostu ruch nieludzki.
Widzę to na większości serwisów, które przejmuję po incydencie: ochrona została włączona w pośpiechu, ustawiona możliwie szeroko i nikt jej potem nie poluzował. Efekt bywa taki, że atak trwał dwa dni, a jego konsekwencje w wynikach wyszukiwania kilka miesięcy.
Poniżej praktyczne rozdzielenie tych spraw: co jest jakim rodzajem zagrożenia, jak upewnić się, że blokujesz podszywającego się bota, a nie prawdziwego, i jaką odpowiedzią sygnalizować przeciążenie, żeby nie wypaść z indeksu.
Zanim cokolwiek ustawię, ustalam, z czym mam do czynienia, bo środki zaradcze są rozłączne.
Rozróżnienie ma znaczenie, bo tylko pierwszy przypadek wymaga radykalnych środków. Dwa pozostałe rozwiązuje się precyzyjnie i bez skutków ubocznych dla indeksowania — o ile ktoś w ogóle rozdzieli je w zgłoszeniu.
Ten fragment jest fundamentem wszystkiego dalej, a bywa pomijany, bo wydaje się oczywisty.
Nagłówek identyfikujący klienta może zawierać dowolny tekst. Znaczna część ruchu podpisanego jako robot wyszukiwarki nim nie jest — to skanery i scrapery liczące na to, że nazwa da im przepustkę przez zapory. Reguła „przepuszczaj wszystko, co ma w nazwie Googlebot” jest więc regułą otwierającą drzwi.
Weryfikacja odbywa się dwoma sposobami. Pierwszy to odwrotne zapytanie DNS: sprawdzasz nazwę hosta przypisaną do adresu IP i potwierdzasz ją zapytaniem w drugą stronę. Drugi, wygodniejszy w automatyzacji, to porównanie adresu z listami zakresów publikowanymi przez Google w plikach JSON — osobno dla robotów indeksujących, osobno dla robotów specjalnych i osobno dla pobrań uruchamianych działaniem użytkownika. Listy się zmieniają, więc pobieram je regularnie, a nie raz przy wdrożeniu.
Praktyczny wniosek dla konfiguracji: wyjątki buduję na zweryfikowanej tożsamości, nie na nazwie. Jeśli korzystasz z gotowej usługi ochronnej, sprawdź, czy ma mechanizm weryfikowanych botów i czy jest on włączony — zwykle jest to jedno pole, o którym nikt nie pamięta.
Zebrałem to z konfiguracji, w których musiałem szukać przyczyny spadku indeksowania.
Blokada geograficzna jest najczęstsza i najmniej oczywista. Robot indeksujący pobiera strony przede wszystkim z adresów w Stanach Zjednoczonych, więc sklep sprzedający tylko w Polsce, który „dla bezpieczeństwa” ogranicza ruch do Europy, odcina się od indeksowania w całości. Zdarzyło mi się to zobaczyć kilka razy i za każdym razem autor reguły był absolutnie pewien, że nie ma to nic do rzeczy.
Drugi mechanizm to zagadki i wyzwania wymagające wykonania skryptu w przeglądarce. Robot ich nie rozwiązuje. Zamiast treści dostaje stronę pośrednią, którą w najlepszym razie zignoruje, a w gorszym zaindeksuje jako zawartość podstrony.
Trzeci to zbyt agresywne ograniczanie liczby żądań. Robot potrafi pobierać wiele adresów w krótkim czasie i przy limicie ustawionym pod zachowanie człowieka wpadnie w niego natychmiast. Limity ustawiam dla adresów kosztownych, nie globalnie, i z progiem wyraźnie powyżej naturalnego tempa indeksowania.
Czwarty to wymaganie ciasteczek, nagłówków językowych albo poprawnego adresu strony odsyłającej. Robot ich nie dostarcza i nie ma powodu, żeby to robić.
To jedna z niewielu rzeczy w tym temacie, w których dokumentacja Google jest jednoznaczna, a i tak wdrażana jest źle.
Gdy serwer nie wyrabia, właściwą odpowiedzią jest kod 429 albo 503, najlepiej z nagłówkiem wskazującym, po jakim czasie ponowić próbę. Roboty rozumieją to jako sygnał do zwolnienia i faktycznie zwalniają, zwykle bardzo szybko. Adresy pozostają w indeksie, bo błąd jest odczytany jako przejściowy.
Czego unikać. Kod 403 sugeruje, że dostęp jest zabroniony na stałe. Kod 404 mówi, że strony nie ma — i przy dłuższym utrzymaniu tego stanu adresy zaczynają wypadać z indeksu. Najgorsze jest podawanie strony z komunikatem o blokadzie w odpowiedzi z kodem 200, bo wtedy wyszukiwarka dostaje informację, że wszystko jest w porządku, i zapisuje treść komunikatu jako zawartość serwisu.
Ważny warunek czasowy: sygnalizowanie przeciążenia jest bezpieczne, dopóki jest krótkotrwałe. Utrzymywane przez dłuższy czas — mowa o dniach, nie godzinach — prowadzi do usuwania adresów z indeksu. Ochrona włączona w trybie awaryjnym „do wyjaśnienia” i zostawiona na dwa tygodnie to najdroższy sposób poradzenia sobie z atakiem.
Bywa, że robot faktycznie obciąża serwis nadmiernie, zwłaszcza przy dużych katalogach z filtrowaniem. Kiedyś dało się to po prostu ograniczyć suwakiem w Search Console — narzędzie zostało wycofane w styczniu 2024 roku i dziś tempo reguluje się inaczej.
Podstawowa metoda jest opisana wyżej: serwer odpowiada wolniej albo zwraca kod przeciążenia, a robot ogranicza tempo samodzielnie. Metoda lepsza polega na tym, żeby nie generować mu zbędnej pracy. W praktyce oznacza to zamknięcie w robots.txt adresów z parametrami sortowania i filtrowania, które produkują nieskończoną liczbę kombinacji, uporządkowanie odnośników wewnętrznych tak, by nie prowadziły do tych kombinacji, i wystawienie sensownej mapy witryny.
Warto też sprawdzić w statystykach indeksowania, co robot pobiera najczęściej. Regularnie okazuje się, że większość jego wysiłku idzie na warianty tej samej listy produktów, a nie na podstrony, o które nam zależy. Wtedy problemem nie jest tempo, tylko struktura adresów — i to ona kosztuje serwer.
Ochrona na brzegu sieci nie zwalnia z porządku po stronie serwisu, a ten porządek jest tańszy niż jakakolwiek usługa.
Kolejność jest tu ważna: najpierw serwis, który wytrzymuje normalny ruch, potem ochrona przed nietypowym. Odwrotna kolejność kończy się zaporą tłumiącą objawy problemu wydajnościowego.
Każdą zmianę w ochronie traktuję jak zmianę mogącą wpłynąć na indeksowanie i weryfikuję ją w ten sam sposób.
Pierwsze źródło to statystyki indeksowania w Search Console. Patrzę na rozkład kodów odpowiedzi w dniach po wdrożeniu: pojawienie się odpowiedzi 403, wzrost udziału 5xx albo nagły spadek liczby żądań to jednoznaczny sygnał. Zestawiam to z dokładną datą włączenia reguł, bo bez tego dyskusja o przyczynie nie ma końca.
Drugie to test pobrania konkretnego adresu na żywo i podejrzenie tego, co robot dostał w odpowiedzi. Jeśli w zwróconym kodzie widać stronę wyzwania albo komunikat zapory, sprawa jest rozstrzygnięta bez dalszej analizy.
Trzecie to logi. Filtruję ruch po zweryfikowanych zakresach adresów wyszukiwarki i sprawdzam, czy nie wpadł w żadną regułę oraz jakie kody dostaje. Jeżeli korzystasz z zewnętrznej usługi ochronnej, ten sam przegląd zrób w jej rejestrze zdarzeń — tam widać wprost, która reguła zadziałała.
I rzecz proceduralna, bez której reszta ma krótki żywot: zapisujcie, kto i kiedy włączył dane ustawienie. W ochronie najwięcej szkody robią zmiany wprowadzone „na chwilę” w nocy podczas incydentu, o których pół roku później nikt już nie pamięta.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |