robots.txt 是站点对外发布的第一份抓取说明,位置固定、语法简单,所以经常被顺手改动。它的影响面却不小:一条写错的 Disallow,可能让蜘蛛在很长一段时间里不再进入站内。下面这份自查清单,适合在每次上线、改版、迁移前后过一遍。
先确认文件本身能被正常读取
在谈规则之前,先确认文件没坏:
- 地址必须是根目录下的 /robots.txt,放在子目录里无效;
- HTTP 状态码返回 200,内容类型为 text/plain;
- 如果返回 404,蜘蛛会当作没有任何规则,全站默认可抓;如果是 5xx,多数蜘蛛会暂时放缓或停止抓取,等你恢复;
- 保存时去掉 BOM,避免出现中文标点或全角冒号,这类字符会让整条规则失效。
最常见的坑:一条规则屏蔽全站
测试环境遗留的 Disallow: / 被带到线上,是发生频率最高的事故。它不需要错别字,也不需要语法错误,一行就能生效。
上线前先打开 /robots.txt,把每一行 Disallow 念一遍,确认它屏蔽的路径确实是你要屏蔽的,而不是复制粘贴留下的历史配置。
搞清通配符和匹配优先级
规则冲突时,按匹配长度决定,而不是按书写顺序:
- * 代表任意字符,$ 代表地址结尾;
- Allow 和 Disallow 同时命中时,匹配字符串更长的那条生效;
- 长度相同时,Allow 优先。
例如 Disallow: /search/ 与 Allow: /search/help 同时存在时,/search/help 会被放行,因为它更长。想屏蔽带参数的地址,可以用带 * 的写法覆盖一批路径,但要先在小范围验证,避免顺手误伤正常栏目。
别把 CSS、JS、图片一起挡住
不少模板会把 /static/、/assets/、/uploads/ 直接写进 Disallow,理由是这些不算内容页。但蜘蛛需要读取这些资源才能还原页面样貌,资源被挡之后,它看到的可能是一个残缺页面,对内容判断并不友好。屏蔽资源目录前,先确认站点有没有替代方案,或者只屏蔽其中体积明显异常的部分。
Sitemap 声明与多组 UA 规则
- Sitemap 使用完整绝对地址,写一行即可,不必在每个规则组里重复;
- 针对不同 UA 写多组规则时,同一个 UA 只会读取第一组匹配到的规则;
- 除非清楚后果,不建议对主流搜索引擎做差异化屏蔽。
上线前怎么验证
- 用站长平台自带的 robots 检测工具,输入几条真实 URL,看结果是允许还是屏蔽;
- 用命令行请求一次文件,确认响应头和正文都没有异常;
- 从被屏蔽的目录里抽一个地址,确认它确实不该被抓;
- 改动后观察一到两周的抓取日志和索引量,不要指望立刻看到结果。
最后提醒一句:robots.txt 管的是能不能来,不管要不要收录。真正不希望出现在结果里的页面,还是应该用 noindex 处理,因为被屏蔽的页面,蜘蛛也读不到你写在页面里的 noindex。