排查页面不收录时,很多人先去看内容和外链,却忽略了一个更靠前的环节:robots.txt。它决定蜘蛛能不能抓,抓不到就谈不上收录。而且规则写错一次,影响的往往是一整个目录,不是单个页面。
先分清 robots.txt 管的是哪一层
抓取和收录是两个阶段。robots.txt 处在抓取阶段,它告诉蜘蛛哪些地址不要请求。被屏蔽的 URL 连响应都拿不到,页面上的 noindex、canonical 这些信号自然也不会被读到。
如果页面既被 robots.txt 屏蔽,又标了 noindex,你看到的“没收录”其实是屏蔽造成的,先解决屏蔽再谈其他。
这也是为什么放行之后不能马上期待页面进索引:蜘蛛需要重新发现并抓取这个地址。
按这个顺序核对规则
1. 确认到底命中了哪一条
robots.txt 支持多个 User-agent 分组,蜘蛛会选取与自身最匹配的一组,再在该组内找最长匹配的规则。常见误判是只看了一眼全站 Disallow,没注意到自己写的通配符把正常目录也覆盖了。
2. 用抓取测试确认具体 URL 的判定
规则写得再清楚,也要落到具体地址上验证。搜索后台的 robots.txt 测试工具,或者直接请求 robots.txt 后逐条比对,都能确认某条 URL 是“允许”还是“被屏蔽”。测试时填完整 URL,包括协议和参数,不要只填目录名。
3. 检查静态资源有没有被一起挡住
不少站点为了省抓取预算,屏蔽了 /assets、/static、/js 这类目录,顺手把 CSS 和 JS 也挡了。蜘蛛拿不到样式和脚本,渲染出来的页面可能是残缺的,这会间接影响对内容的判断。
4. 检查有没有全站级屏蔽
上线前从测试环境复制过来的 robots.txt、临时下线时写的 Disallow: / 忘了删,是最典型的误伤。这类问题一查就清楚,但不查的话,后面所有排查都是白费。
5. 检查站点地图声明与屏蔽范围是否冲突
站点地图里提交了大量 URL,robots.txt 又把对应目录屏蔽了,两边互相打架。提交上去的地址蜘蛛会看到,但抓取时被拒绝,日志里表现为反复发现却不抓取。
几个容易误伤的写法
- 用 * 通配符时没考虑前缀相同的目录,比如屏蔽 /search 顺带挡掉了 /search-guide。
- 用 $ 结尾做精确匹配,但实际 URL 带参数,规则失效,该挡的没挡住。
- 一个 User-agent 分组下写了多行 Disallow,以为取交集,实际是并列生效。
- 把带参数的筛选页整段屏蔽,结果正常的分页参数也被一起挡住。
放行之后的处理顺序
- 先改规则,改完再验证一遍,确认目标 URL 从“被屏蔽”变成“允许”。
- 确认 robots.txt 本身可以正常抓取,返回 200 而不是 404 或 403。
- 把重要页面重新放进站点地图,并保留足够的站内入口链接,让它们有被发现的机会。
- 观察服务器日志里这些地址是否重新出现抓取记录,再看索引状态有没有变化。
长期被屏蔽的目录,即使放行了,蜘蛛也不会立刻回来。这时候站内链接和外部链接是重新发现的主要路径,站点地图只是补充。
不建议做的事
不要为了尽快让页面出去而反复修改 robots.txt,也不要用它去处理重复内容或低质页面——那是 canonical 和 noindex 的活。robots.txt 只做一件事:控制抓取范围。用途混淆,后面会越来越难排查。
最后提醒一句:以上是排查顺序,帮你先把“屏蔽误伤”这个可能性排除掉,而不是保证放行后页面一定被收录。收录与否,还要看页面质量和索引阶段的判断。