robots.txt 是站点和搜索蜘蛛之间最基础的约定文件。它本身不复杂,却经常被一次改版、一次临时测试改得面目全非。很多抓取上的异常并不是服务器挂了,而是这份文件里的某一行规则,正好挡住了本来不该挡的目录。
为什么这份文件需要定期自查
站点结构在变,栏目在加,测试目录在建,而 robots.txt 往往是最少被打开的文件。上线时写好的规则,过半年可能已经和实际情况对不上:已经删除的目录还挂在 Disallow 里,新上线的栏目忘了放开,临时屏蔽的测试路径一直没恢复。这些改动都不会报错,只会安静地让蜘蛛少走一些路。
第一步:确认文件本身能被正常访问
- 直接在浏览器打开 域名/robots.txt,确认返回 200,而不是 404、403 或跳转到首页。
- 检查服务器是否对 robots.txt 做了登录校验、UA 限制或防火墙拦截。
- 确认文件编码为 UTF-8,没有多余的 BOM 或编辑器保存时带出的异常字符。
- 如果站点有多个域名或子域,每个域下都要有对应文件,不要只维护主站那一份。
常见容易写错的几处规则
- 把整站拦死:Disallow: / 是最危险的一行,多用于测试环境,迁移到正式环境后容易忘记删除。
- 路径写法不一致:规则按前缀匹配,写 /news 会同时影响 /news 和 /news-old,需要更精确时记得补上斜杠。
- 误伤静态资源:屏蔽 js、css、图片目录后,蜘蛛拿不到渲染所需的文件,对页面内容的判断可能失真。
- Allow 与 Disallow 冲突:通常以更具体、更长的那条为准,但不同实现细节有差异,最好的做法是不要制造冲突。
- 多写或少写注释符:行首差一个 #,规则就从生效变成无效,反之亦然。
robots.txt 与 noindex 的分工
robots.txt 控制的是“能不能抓”,页面上的 noindex 控制的是“能不能留”。两者不能互相替代。如果某个页面已经用 robots.txt 禁止抓取,蜘蛛就读不到页面里的 noindex 标签,这个地址仍可能因为外链而以缺少描述的形式出现在结果中。对确实不该出现的页面,更稳妥的组合是:允许抓取,但让页面返回 noindex。
和站点地图、服务器日志配合看
robots.txt 里可以声明 Sitemap 地址,方便蜘蛛找到 URL 清单。声明之后建议顺手核对一下:站点地图里提交的目录,是否有哪一类正好被 Disallow 挡住了。这种自相矛盾很常见,蜘蛛按规则不去抓,清单又反复提交,双方都白费力气。
自查时也可以结合服务器日志,看看被拦截的请求中是否包含搜索蜘蛛。如果某段时间蜘蛛访问量突然归零,先别急着怀疑站点出了问题,打开 robots.txt 看一眼往往更快。
一份可执行的自查清单
- 打开文件,确认状态码和内容正常。
- 逐行读一遍,标出每条规则对应的真实目录。
- 检查是否存在 Disallow: / 或整目录封禁。
- 确认静态资源、图片目录未被误伤。
- 确认需要被发现的栏目没有被拦住。
- 确认 Sitemap 地址正确且可访问。
- 确认没有把不该暴露的临时目录写进文件。
- 改动留档,注明时间和原因。
robots.txt 不是一次写完就完事的配置,它更像一张门禁说明。每次结构调整后顺手看一眼,比事后排查抓取异常省事得多。