⭐ 推荐:社区规则条款 V1.0

如何通过日志判断蜘蛛是否遵守网站的 robots.txt 规则?

chinaz
chinaz 归队站长新人站长
发布于 2026-10-14 01:54 ·3 浏览 ·0 回复
内容摘要

判断蜘蛛是否遵守 robots.txt 不能只看其是否请求过该文件,还需核查日志中被 Disallow 的路径是否被抓,并通过反向 DNS 验证 User-Agent 真实性,排除伪造和工具抓取后才能认定违规。

判断蜘蛛是否遵守 robots.txt,核心看三件事:日志里有没有它对 /robots.txt 的请求记录、被 Disallow 的路径有没有被它抓过、以及抓取行为与你写的规则是否矛盾——三条都查完,才能下结论。

为什么不能只看“它请求过 robots.txt”?

结论:请求过 robots.txt 不等于遵守 robots.txt,那只是“读了规则”,关键看它读完之后有没有绕开被禁路径。

标准爬虫的流程是:抓取页面前先 GET 一次 /robots.txt,拿到规则后决定哪些 URL 不抓。所以日志里出现这两条记录是正常信号:


grep "/robots.txt" access.log | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn

# 看某个蜘蛛拿到的状态码($9 是状态码)
grep -i "Googlebot" access.log | grep "/robots.txt" | awk '{print $9}' | sort | uniq -c

状态码含义要分清:200 表示规则文件正常返回;404 表示“没有 robots.txt”,按 RFC 9309 的规定等同于“全部允许”,爬虫继续抓页面不算违规;5xx 则相反,Googlebot 在遇到 robots.txt 返回 5xx 时会暂停抓取,48 小时后重试。

被 Disallow 的目录出现在日志里,就一定是违规吗?

结论:不一定,日志里出现被禁 URL 有三种可能,其中只有“真实蜘蛛用真实 UA 抓取”才算违规。

第一种是 UA 伪造——别人拿 Googlebot 这个字符串去扫你的站,日志里看起来一模一样。第二种是你自己人干的:Google Search Console 的网址检查、robots.txt 测试工具都会真实发起抓取,请求也会落进日志。第三种才是真违规,通常出现在一些自称是搜索引擎、但反查域名对不上的小爬虫身上。

排查时先列出 robots.txt 里所有 Disallow 路径,再去日志里反查:

grep -E "GET /(admin|tmp|api/internal)/" access.log | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn

如果命中的 UA 集中在几个陌生名字上,基本可以判定是这些爬虫不守规矩;如果命中 Googlebot,先去做 IP 反查再下结论。

User-Agent 写着 Googlebot,就是 Google 吗?

结论:不是。UA 是客户端自己填的字符串,必须用反向 DNS 验证,这是唯一可靠的区分手段。

Googlebot 的正规验证方式是双向解析:先反查 IP 得到主机名,再正向解析该主机名确认能回到同一 IP。

dig +short -x 66.249.66.1
# 应返回 crawl-66-249-66-1.googlebot.com.
dig +short crawl-66-249-66-1.googlebot.com
# 应返回 66.249.66.1

主机名后缀必须是 googlebot.com 或 google.com;Bingbot 对应 search.msn.com;Baiduspider 对应 baidu.com。批量验证可以写个循环:

grep "Googlebot" access.log | awk '{print $1}' | sort -u | while read ip; do \
  echo -n "$ip -> "; dig +short -x $ip; done

Google 还公开了完整的 Googlebot IP 段 JSON(developers.google.com/static/search/apis/ipranges/googlebot.json),可以直接对比。

哪些“违规”其实是误判?

结论:Crawl-delay 不被遵守、以及 robots.txt 缓存导致的延迟生效,都不算违规。

Crawl-delay 不是 RFC 9309 的正式指令,Googlebot 完全不支持这条,只在 Search Console 的抓取速率设置里调频率;Bingbot 和 Yandex 支持。所以你在 robots.txt 里写 Crawl-delay: 10,看到 Googlebot 请求间隔只有 1 秒,不能算它违规。

另外按 RFC 9309 的要求,爬虫缓存 robots.txt 的时间不应超过 24 小时。也就是说你今天新加的 Disallow,最迟 24 小时内生效,这段时间内旧路径仍被抓取属于正常现象——判断时把日志时间点和 robots.txt 的修改时间对齐再看。

一条命令快速筛查不守规矩的爬虫

结论:把“请求过 robots.txt 的 UA”和“抓过被禁路径的 UA”两个列表做差集,剩下的就是可疑对象。

grep "/robots.txt" access.log | awk -F'"' '{print $6}' | sort -u > read.txt
grep -E "GET /(admin|tmp)/" access.log | awk -F'"' '{print $6}' | sort -u > hit.txt
comm -13 read.txt hit.txt   # 抓了禁抓路径、却从没读过 robots.txt

comm -13 输出的那些 UA,就是既没读规则又抓了敏感路径的爬虫,再逐个做 IP 反查确认身份,最后在 Nginx 层用 if ($http_user_agent ~* "xxx") { return 403; } 或 WAF 规则封掉。

总结:判断顺序是“先看有没有请求 robots.txt → 再看被禁路径有没有被抓 → 最后用反向 DNS 确认对方身份”。只凭 UA 字符串或单条日志下结论,最容易把伪造者和自己人误判成违规蜘蛛。

如何通过日志判断蜘蛛是否遵守网站的 robots.txt 规则?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1931.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 0

还没有回复,来抢沙发~