很多站点的 robots.txt 是在上线那天随手写下的,之后再也没打开过。等到某天发现新栏目迟迟没有动静,回头一看,往往就是这几十行文本里的一条规则出了问题。它不是「写完就安全」的配置文件,更像是给蜘蛛划的一条通道:写宽了没意义,写窄了会直接挡路。
先看它到底返回了什么
排查的第一步不是读内容,而是看响应。直接在浏览器访问 /robots.txt,确认三件事:状态码是 200,而不是 404 或 302;返回的是纯文本,而不是套了模板的站点页面(有些程序会把 404 页面带着导航和页脚一起返回,蜘蛛读到的是一屏标签);文件没有被服务器规则跳转到别的域名或路径。
如果站点同时存在 www 与非 www、http 与 https 多个入口,每个入口下的 robots.txt 都要能正常打开。抓取工具会按主机名和协议分别取文件,只在一处放好了,另一处可能长期是空白或错误页。
几类常见的写错
- User-agent 写得不规范。漏掉短横线、大小写混乱,或者把多个蜘蛛名硬塞进同一条,规则容易被整块忽略或落到别的蜘蛛身上。
- 把 Disallow 的空值理解反了。Disallow 后面留空表示放行全部,Disallow: / 才是全站禁止,两者只差一个斜杠,结果完全相反。
- 规则之间互相打架。多数主流蜘蛛按最长匹配来判断,但不同实现的细节仍有差异。与其依赖优先级,不如把条目写清楚,别留下彼此矛盾的规则。
- 顺手屏蔽了静态资源目录。把 CSS、JS、图片所在目录整段 Disallow,会让蜘蛛无法渲染页面,最后抓到的就是一个空壳。
- Sitemap 写成相对路径。Sitemap 指令通常需要完整的绝对地址,相对路径很多解析器并不认,写了等于没写。
别把 robots 当成隐藏内容的工具
Disallow 的语义是「不建议抓取」,并不等于「不会被索引」。页面依然可能被外链指向,被别的渠道收录。真正想让页面不出现在结果里,应该用 noindex,而 noindex 又需要蜘蛛能抓到页面才读得到。于是就形成一个固定搭配:对不想收录的页面,先在 robots.txt 里放行抓取,再在页面里加 noindex。
最容易做反的一点是:越是想藏起来的页面,越要让它被抓到,只是别让它进索引。robots 里禁抓、页面里写 noindex,两边都会失效。
改完之后怎么验证
- 重新访问 /robots.txt,确认返回内容与预期一致,没有残留的测试规则。
- 挑一个被放行的目录,用抓取工具或日志确认蜘蛛确实访问到了其中的页面。
- 挑一个被禁止的目录,确认对应地址不会再出现在访问日志里。
- 检查 Sitemap 指令里的地址能正常打开,且文件本身没有语法错误。
- 把改动时间、原因和负责人记录下来,方便日后回溯。
把它纳入例行自查
robots.txt 的影响面很大,建议只在确有需要时调整,改动要克制。可以每季度看一眼,或者在上线新栏目、切换域名、做大改版之后单独检查一次。配合服务端访问日志一起看,观察蜘蛛是否还在正常访问关键目录,比单看文件本身更能说明问题。
说到底,这个文件的作用是告诉蜘蛛哪些地方不必去,而不是替你做收录决定。把它当成一份需要偶尔复核的说明,而不是配置一次就永远忘掉的开关,站点在抓取和 URL 发现上会少很多莫名其妙的问题。