运维用记事本改 robots.txt,Disallow:/tmp/ 里用的是中文全角冒号,线上文件看着没问题,日志里蜘蛛照样在抓 /tmp/,抓取诊断显示未发现 robots.txt 规则。

排查方向其实有限,先把可能性排一排。全角冒号不是合法分隔符,整行被解析器丢弃;文件保存成 UTF-8 带 BOM,首行指令前面多了不可见字符;编辑器把换行存成 CRLF,个别解析器读到多余的 \r 判为非法;CDN 对 .txt 做了压缩,返回的 Content-Type 不是 text/plain。

第一件事是看线上的字节内容而不是渲染结果

curl -s https://www.example.com/robots.txt | hexdump -C | head -5

接着确认有没有 BOM 和全角字符

curl -s https://www.example.com/robots.txt | grep -nP '[^\x00-\x7F]|^\xEF\xBB\xBF'

然后用纯 ASCII 重写并去掉 BOM

printf 'User-agent: *\nDisallow: /tmp/\n' > robots.txt && file robots.txt

校准响应头

curl -sI https://www.example.com/robots.txt | grep -i content-type

同一份数据我导出了两份,一份留底,一份拿来试。

这类问题以前遇到过,但这次的触发条件和上次不一样。

别只看报错消失,验证要多做一步。hexdump 首字节不再是 ef bb bf,抓取诊断能读到 Disallow 行,日志里 /tmp/ 的抓取当天停止。

提醒一点。robots.txt 只接受 ASCII,中文注释看着正常,实际会让整行乃至整个文件解析失败。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189