E1 · The sample
10 minRun the analysis on the mock sample and find in the report the fake bots and the page that no bot read.
Done when: you noted which bots had fake hits and which sitemap page went unread.
Lesson 6 · 17 min
The robots.txt tells you what you allow; the server log tells you who showed up. botlog reads the access log, sorts the AI bots by purpose (search, user request, training), checks each one's IP against the company's official list, and shows you the fake ones. And it filters the log before you store or show it, because a person's IP is personal data.
Start the lesson
Goal: sort the AI bots in the log by purpose, spot the fake ones, and filter the log before storing or sharing it.
Each log line goes through four questions. Tap each one.
The log shows who requested the page, not whether the AI used the content. For citation, lesson 5.
Tap each point.
Blocking AI search = disappearing from that assistant's answers with sources. Blocking the user's agent = the AI doesn't open the page when someone asks.
Blocking training takes the site out of the training of future models, without disappearing from search.
Anyone can write GPTBot in the User-Agent. Without checking the IP, the count inflates.
The report shows the IP only for the fake bots, so you can block them if you want.
An authentic AI bot getting a 403 is usually a CDN or WAF block, not robots.txt.
Since 09/15/2026, free Cloudflare blocks training bots and agents by default on pages with ads: check your site's dashboard.
The IP of someone who is not a bot is personal data. Before you show, publish, or keep a log for a long time, run filtrar: only the bot lines with an official IP stay.
An old list makes a false "fake": the Bing one in the folder is from Jan 2024. Update the listas/ folder.
Run it from the ferramentas/botlog folder. The MONTADO sample uses official User-Agents and IPs from documentation ranges (RFC 5737), which belong to nobody.
cd ferramentas/botlog python3 botlog.py analisar ../../exemplos/botlog/entrada/MONTADO_access.log ../../exemplos/botlog/entrada/MONTADO_cloudflare.jsonl \ --sitemap ../../exemplos/botlog/entrada/MONTADO_sitemap.xml --saida saida/montado
ssh root@YOUR_SERVER 'cd /var/log/nginx; zcat -f access.log.*.gz; cat access.log.1 access.log' > /tmp/site.log python3 botlog.py analisar /tmp/site.log --sitemap https://yoursite.com/sitemap.xml --saida saida/site
python3 botlog.py filtrar /tmp/site.log --saida /tmp/bots-only.log rm /tmp/site.log # the full log doesn't need to stay
26 lines, 22 from bots (training 6, search 5, search engine 4, user 3); fake 4; never visited 1/6 → saida/montado/relatorio.html
From robos.csv (mock sample):
bot purpose hits genuine fake errors GPTBot training 5 3 2 2 ClaudeBot training 3 3 0 2 Googlebot search engine 3 2 1 0 OAI-SearchBot search 3 3 0 0 PerplexityBot search 2 1 1 0
ClaudeBot's 2 errors simulate a CDN block (403).
nginx log from desenho.inema.pro, Oct 5 to Oct 19, 2026, already run through filtrar (the original had 3,082 lines; 8 were left, only bots with an official IP):
8 lines, 8 from bots (training 6, search 2); fake 0; never visited 0/1 → saida/real/relatorio.html
And filtrar on the mock sample:
16 of 23 line(s) kept (only bots with an official IP) → /tmp/bots-only.log
No access to the server log? Do E1 and ask your CDN or host for the log for E2.
Run the analysis on the mock sample and find in the report the fake bots and the page that no bot read.
Done when: you noted which bots had fake hits and which sitemap page went unread.
Copy your server's log (read-only), run analisar and then filtrar; delete the full log.
Done when: you have the report by purpose, the "N of M line(s) kept" line from filtrar, and the full log deleted.
The explanation shows up after your answer.
Question 1 of 4
The log shows 50 hits from "GPTBot". What else do you need before you believe it?skill
Question 2 of 4
You block GPTBot and ClaudeBot. What happens?
Question 3 of 4
A genuine ClaudeBot gets a 403 in the log. Most likely cause?
Question 4 of 4
Why run filtrar before keeping the log?
Pick an option. The explanation appears after you try.