运维用记事本改 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,中文注释看着正常,实际会让整行乃至整个文件解析失败。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
