Logi serwera to jedyne miejsce, w którym widać, co boty AI naprawdę robią na Twojej stronie. Google Search Console pokaże Ci ruch z wyszukiwarki, a narzędzia do monitoringu cytowań powiedzą, czy model wspomniał o marce. Ani jedno, ani drugie nie odpowie na pytanie, czy GPTBot w ogóle pobrał artykuł, który miał zostać zacytowany. Odpowiedź siedzi w surowym pliku access log i da się ją wyciągnąć w kilkadziesiąt minut.
Ten tekst jest praktycznym rozszerzeniem przewodnika llms.txt i kontrola botów AI. Tam ustalasz reguły dostępu, tutaj sprawdzasz, czy boty się do nich stosują i co z tego wynika dla widoczności w odpowiedziach generatywnych.
Skąd wziąć logi i w jakim formacie
Zacznij od ustalenia, kto trzyma logi. Na hostingu współdzielonym zwykle znajdziesz je w panelu (cPanel, DirectAdmin) w sekcji „Raw access logs”, najczęściej spakowane gzipem i rotowane co dobę. Na VPS z nginxem domyślna ścieżka to /var/log/nginx/access.log, na Apache /var/log/apache2/access.log. Jeżeli przed serwerem stoi Cloudflare, logi origin pokażą tylko żądania, które przeszły przez cache, więc pełny obraz ruchu botów daje dopiero Cloudflare Logpush albo raport Bot Analytics.
Format, który Cię interesuje, to Combined Log Format. Jedna linia zawiera adres IP, znacznik czasu, metodę i ścieżkę, kod odpowiedzi, rozmiar transferu, referer oraz user agent. Jeżeli Twój serwer loguje w skróconym formacie Common, dopisz user agent do dyrektywy log_format, bo bez niego cała analiza botów AI jest niewykonalna.
Praktyczna zasada: bierz minimum 30 dni. Krótsze okno nie pozwoli rozróżnić realnej częstotliwości odwiedzin od przypadkowego skoku. Dla witryny publikującej kilka wpisów tygodniowo 30 dni to zwykle od 200 tysięcy do 2 milionów linii, czyli plik rzędu 50–400 MB po rozpakowaniu. Da się to przerobić zwykłym grep, ale wygodniej wciągnąć wszystko do DuckDB albo pandas i pracować na tabeli.
Filtrowanie ruchu botów AI z szumu
Surowe logi w 70–90 procentach to szum: skanery podatności, monitoring uptime, feed readery, ruch przeglądarkowy. Pierwszy krok to wyciągnięcie linii, w których user agent pasuje do znanych crawlerów AI. Warto pamiętać, że część firm używa dwóch osobnych agentów: jednego do budowania korpusu treningowego, drugiego do pobierania stron na żywo w trakcie odpowiadania użytkownikowi. To rozróżnienie ma znaczenie, bo tylko ten drugi typ przekłada się bezpośrednio na cytowanie.
| User agent | Właściciel | Do czego służy |
|---|---|---|
| GPTBot | OpenAI | Zbieranie treści do trenowania modeli |
| OAI-SearchBot | OpenAI | Indeks wyszukiwania w ChatGPT |
| ChatGPT-User | OpenAI | Pobranie strony na żądanie użytkownika |
| ClaudeBot | Anthropic | Zbieranie treści do trenowania |
| Claude-User | Anthropic | Pobranie strony w trakcie rozmowy |
| PerplexityBot | Perplexity | Budowa własnego indeksu |
| Google-Extended | Zgoda na użycie treści przez Gemini | |
| Bingbot | Microsoft | Indeks zasilający Copilot |
Najprostszy filtr wygląda tak:
zcat access.log.*.gz | grep -Ei 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|PerplexityBot|Google-Extended|Bytespider|Amazonbot|CCBot' > boty-ai.log
Po tym kroku warto od razu policzyć rozkład. Jeżeli okaże się, że 95 procent trafień pochodzi od jednego agenta, a reszta ma po kilkanaście żądań miesięcznie, to nie jest błąd analizy, tylko realny obraz rynku. Rozkład ruchu botów AI jest silnie skośny i to normalne.
Weryfikacja IP i wykrywanie podszywania się
User agent to zwykły nagłówek HTTP, który każdy może ustawić dowolnie. W praktyce część ruchu deklarującego się jako GPTBot czy ClaudeBot to scrapery próbujące przejść przez reguły, które przepuszczają „grzeczne” boty. Jeżeli policzysz częstotliwość odwiedzin bez weryfikacji, dostaniesz zawyżone liczby i zbudujesz na nich błędne wnioski.
Weryfikacja przebiega dwutorowo. Pierwsza droga to listy zakresów IP publikowane przez dostawców w formacie JSON, na przykład openai.com/gptbot.json. Wystarczy sprawdzić, czy adres z loga mieści się w którymś z podanych bloków CIDR. Druga droga to reverse DNS: robisz zapytanie PTR dla adresu IP, sprawdzasz, czy nazwa hosta kończy się na domenie właściciela, a potem robisz zapytanie A dla tej nazwy i porównujesz wynik z wyjściowym IP. Ta procedura, opisana przez Google w dokumentacji weryfikacji Googlebota, działa tak samo dla pozostałych crawlerów.
for ip in $(awk '{print $1}' boty-ai.log | sort -u); do
host=$(dig +short -x "$ip" | sed 's/.$//')
back=$(dig +short "$host" | head -1)
[ "$back" = "$ip" ] && echo "OK $ip $host" || echo "PODEJRZANE $ip $host"
done
Na typowej witrynie odsetek fałszywek mieści się w przedziale 3–15 procent trafień deklarujących agenta AI. Wszystko powyżej 20 procent oznacza, że ktoś celowo scrapuje serwis pod przykrywką i warto rozważyć blokadę po zakresach IP, bo blokada po user agencie w tym przypadku nic nie da.
Które adresy są odwiedzane najczęściej
Teraz najciekawsza część. Zgrupuj zweryfikowane trafienia po ścieżce i posortuj malejąco. To, co zobaczysz na górze listy, jest realną hierarchią ważności Twojego serwisu w oczach crawlerów AI, a nie tą, którą sobie zaplanowałeś w architekturze.
awk '{print $7}' boty-ai-zweryfikowane.log | sort | uniq -c | sort -rn | head -50
Typowe wnioski z tego zestawienia:
- Strona główna i archiwa kategorii zbierają nieproporcjonalnie dużo trafień w stosunku do wartości treści, którą zawierają.
- Artykuły filarowe są odwiedzane regularnie, teksty wspierające czasem ani razu w miesiącu.
- Sitemapa jest pobierana rzadziej, niż zakładasz, czasem raz na 10–14 dni.
- Pojawiają się ścieżki z parametrami i paginacja, które marnują budżet, a nie mają szans na cytowanie.
Zestaw tę listę z listą stron, które faktycznie chcesz widzieć w odpowiedziach modeli. Rozjazd między jednym a drugim to Twoja lista zadań: podlinkowanie zaniedbanych tekstów, obcięcie parametrów w robots.txt dla botów AI, wypchnięcie ważnych adresów wyżej w strukturze linkowania.
Częstotliwość odwiedzin a świeżość cytowań
Dla każdego istotnego adresu policz odstęp między kolejnymi wizytami tego samego bota. Mediana tego odstępu mówi Ci, jak szybko zmiana w treści ma szansę trafić do korpusu, z którego model korzysta przy odpowiadaniu.
| Mediana odstępu | Co to oznacza | Reakcja |
|---|---|---|
| 1–3 dni | Treść odświeżana szybko, aktualizacje działają | Publikuj i aktualizuj normalnie |
| 7–14 dni | Stan typowy dla średnich serwisów | Planuj efekt zmian z dwutygodniowym opóźnieniem |
| 30 dni i więcej | Adres praktycznie poza obiegiem | Popraw linkowanie wewnętrzne, sprawdź blokady |
| Brak trafień | Bot nie zna adresu albo ma zakaz | Sprawdź robots.txt, sitemapę i status HTTP |
Ta liczba ma bardzo konkretne zastosowanie operacyjne. Jeżeli mediana wynosi 12 dni, to nie ma sensu mierzyć wpływu przepisanego artykułu po tygodniu, bo bot go jeszcze nie pobrał. Zestawienie odstępu pobrań z datami wykrytych cytowań pozwala rozdzielić dwa różne problemy: treść jest słaba czy treść po prostu nie dotarła. To rozróżnienie warto zautomatyzować razem z raportowaniem cytowań AIO, żeby oba szeregi czasowe leżały obok siebie w jednym arkuszu.
Obciążenie serwera i limity
Logi pokazują też koszt. Zsumuj kolumnę z rozmiarem odpowiedzi dla ruchu botów AI i porównaj z całkowitym transferem. Na serwisach treściowych boty AI generują zwykle 2–8 procent transferu, ale zdarzają się nawroty, w których jeden agresywny crawler robi kilkadziesiąt żądań na minutę przez kilka godzin.
Sprawdź trzy rzeczy. Po pierwsze rozkład kodów odpowiedzi: wysoki udział 404 oznacza, że bot chodzi po nieaktualnej mapie serwisu, a duża liczba 5xx to sygnał, że serwer nie wyrabia i część treści nigdy nie zostaje pobrana. Po drugie szczyty w ujęciu godzinowym, bo jeżeli pokrywają się z ruchem użytkowników, warto ustawić Crawl-delay albo limit po stronie serwera. Po trzecie średni czas odpowiedzi dla tych żądań, jeżeli go logujesz. Powolne odpowiedzi skracają realny budżet: przy tym samym limicie czasu bot pobierze mniej stron.
awk '{print $9}' boty-ai.log | sort | uniq -c | sort -rn
awk -F'[:[]' '{print $2":"$3}' boty-ai.log | uniq -c | sort -rn | head -20
Blokowanie warto stosować oszczędnie. Twardy zakaz dla crawlera, który zasila wyszukiwarkę generatywną, usuwa Cię z jej wyników na stałe, a nie tylko na czas incydentu. Limit żądań na minutę rozwiązuje problem obciążenia bez tej ceny.
Prosty raport miesięczny z logów
Cała analiza ma sens, jeżeli powtarzasz ją co miesiąc na tej samej próbce i porównujesz szeregi. Raport, który się sprawdza, mieści się na jednej stronie i zawiera sześć pozycji:
- Liczba zweryfikowanych trafień w rozbiciu na agenta, z porównaniem do poprzedniego miesiąca.
- Odsetek żądań odrzuconych jako podszywanie się.
- Lista 20 najczęściej pobieranych adresów i lista adresów bez ani jednego trafienia.
- Mediana odstępu między pobraniami dla zestawu 30 kluczowych stron.
- Rozkład kodów odpowiedzi, osobno dla ruchu botów AI.
- Udział botów AI w transferze i szczyt godzinowy.
Pierwsze uruchomienie zajmuje pół dnia, kolejne kilkanaście minut, jeżeli zapiszesz zapytania w skrypcie. Największą wartość widać dopiero przy trzecim, czwartym raporcie: wtedy wychodzą trendy, których pojedynczy pomiar nie pokaże. Spadek liczby trafień o połowę po wdrożeniu nowej wersji serwisu, nagłe pojawienie się agenta, którego wcześniej nie było, albo wygaszenie ruchu na adresie, który przypadkowo trafił pod noindex.
Dobrym uzupełnieniem raportu jest kolumna z datą ostatniej modyfikacji treści. Zestawienie „data edycji” obok „data ostatniego pobrania” natychmiast pokazuje, które aktualizacje wciąż czekają na odbiór. Szczegóły dotyczące samych reguł dostępu i formatu pliku znajdziesz w dokumentacji botów OpenAI, która wprost opisuje zakres działania każdego z agentów.
FAQ
Czy analiza logów zastępuje Google Search Console?
Nie, to dwa różne źródła. Search Console pokazuje wyłącznie aktywność Googlebota i dane o wynikach wyszukiwania. Logi obejmują wszystkie boty, w tym GPTBot, ClaudeBot i PerplexityBot, których w Search Console nie zobaczysz w ogóle.
Jak długi okres logów wystarczy do pierwszej analizy?
Minimum 30 dni. Krótszy okres nie pozwala policzyć wiarygodnej mediany odstępu między pobraniami, bo część adresów jest odwiedzana raz na dwa tygodnie. Do porównań rok do roku przechowuj co najmniej 13 miesięcy w archiwum.
Co zrobić, gdy bot AI w ogóle nie odwiedza mojej strony?
Sprawdź w kolejności: reguły w robots.txt, nagłówek X-Robots-Tag, blokady na poziomie WAF lub Cloudflare, obecność adresu w sitemapie oraz linkowanie wewnętrzne. Najczęstszą przyczyną jest reguła blokująca dodana kiedyś globalnie i zapomniana.
Czy blokada GPTBota wpływa na widoczność w ChatGPT?
Zależy od agenta. GPTBot zbiera dane treningowe, natomiast OAI-SearchBot obsługuje indeks wyszukiwania w ChatGPT. Blokada tego drugiego usuwa serwis z wyników przeglądania sieci, blokada pierwszego nie ma na to bezpośredniego wpływu.
Jak odróżnić prawdziwego crawlera od podszywającego się?
Przez podwójne sprawdzenie DNS: zapytanie PTR dla adresu IP, weryfikacja domeny w nazwie hosta i zapytanie A dla tej nazwy, które musi wskazać z powrotem na wyjściowy adres. Alternatywnie porównaj IP z oficjalnymi listami CIDR publikowanymi przez dostawców.
Czy warto ograniczać liczbę żądań botów AI?
Tak, jeżeli generują szczyty obciążenia pokrywające się z ruchem użytkowników. Limit żądań na minutę jest lepszy niż blokada, bo chroni serwer i jednocześnie nie usuwa serwisu z indeksów zasilających odpowiedzi generatywne.