常见问题

蜘蛛池入口页的 robots.txt 屏蔽了部分路径,目标 URL 还能被发现吗

入口页能打开、目标 URL 却迟迟不被抓,很多时候是 robots.txt 规则写得过宽。本文区分入口页被屏蔽、目标路径被屏蔽、跨域三种情况,说明搜索蜘蛛遇到 Disallow 时的实际行为,并给出核对规则、抓取测试、查服务器日志的排查顺序。

常见问题

蜘蛛池入口页的 robots.txt 屏蔽了部分路径,目标 URL 还能被发现吗

做蜘蛛池的时候经常遇到这种情况:入口页能正常打开,里面指向的目标 URL 却迟迟没有被抓。排查到最后,问题出在 robots.txt 上——有人为了挡住后台、站内搜索这类无价值路径,写了一条很宽的 Disallow 规则,顺手把目标 URL 也一起挡了进去。这篇文章把这条链路上的几个关键点拆开说清楚。

先确认被屏蔽的到底是哪一层

robots.txt 的生效范围是「同一个协议 + 同一个主机名 + 同一个端口」,也就是常说的同源。所以要先分清三种情况:

  • 入口页本身被屏蔽:搜索蜘蛛根本不会请求入口页,页面里有多少条链接都读不到,链路在第一层就断了。
  • 入口页可抓,目标 URL 所在路径被屏蔽:入口页能被读取,蜘蛛也能看到链接,但走到目标 URL 时会被规则拦住,不会去请求正文。
  • 目标 URL 在另一个域名:入口页的 robots.txt 管不到对方,这时候要看目标站自己的 robots.txt 有没有屏蔽搜索蜘蛛。

搜索蜘蛛遇到 Disallow 时具体会做什么

需要区分「发现 URL」和「抓取 URL」两件事。搜索蜘蛛在别的页面看到一条被 Disallow 的链接时,通常仍可能把这个 URL 记录下来,但它不会去请求这个 URL 的内容。对蜘蛛池来说,后果很直接:

  • 目标 URL 的内容读不到,页面里的下一层链接也就无从发现;
  • 入口页里如果大量链接都落在被屏蔽的路径下,入口页本身的抓取价值会被明显稀释;
  • robots.txt 不是保密工具,它只是抓取指令,不保证 URL 不出现。想要内容不被看到,应该用权限控制,而不是 Disallow。

几个常见的误判

  • 规则顺序误区:很多人以为 robots.txt 是从上往下匹配第一条。实际生效的是匹配程度,规则更具体、更长的通常优先,所以不要靠调换顺序来「覆盖」。
  • 通配符误伤:像 /go/* 这种写法会把所有以 go 开头的路径全挡住,包括你本来想放行的目标 URL。
  • robots.txt 本身异常:如果这个文件返回 5xx,多数搜索引擎会保守处理,可能短时间内减少对该主机的抓取;返回 404 一般视为没有限制;但如果返回 200、内容却是一个错误页,解析结果就不可预料了。
一条实用经验:写完 robots.txt 别只看语法对不对,要实际拿目标 URL 去跑一遍抓取测试,看结果里有没有「被 robots.txt 屏蔽」的提示。

想保留入口页、只屏蔽无关目录,怎么做

  1. 先列出真正无价值的路径,比如后台、站内搜索、参数化筛选页,只对这些路径写规则。
  2. 逐条核对目标 URL 的完整路径,确认不在任何 Disallow 的前缀里,尤其注意结尾有没有通配符。
  3. 用搜索引擎提供的抓取测试工具,分别测入口页和目标 URL,确认两者都不被拦。
  4. 过几天回到服务器日志里,搜目标 URL 的请求记录,看是否有来自搜索蜘蛛的访问。日志比任何推测都可靠。

目标 URL 在别的域名时

跨域的情况下,两边的 robots.txt 各自独立。入口页放行不等于目标站放行,反过来也一样。实际排查时经常见到入口页一切正常、目标站自己写了 Disallow,或者整站被 WAF 拦掉,抓取断点其实在后面那一段。所以跨域投放时,两边的 robots.txt 和访问控制都要过一遍。

怎么快速验证

  • 直接访问 你的域名/robots.txt,确认返回 200 且内容是规则文本,不是首页也不是错误页。
  • 把目标 URL 粘进抓取测试工具,看是否提示被 robots 屏蔽。
  • 检查服务器日志里入口页的抓取次数与目标 URL 的请求次数,两者的差距往往就是断点位置。
  • 如果入口页被大量抓取而目标 URL 一条请求都没有,优先怀疑 robots 规则、重定向链以及目标站的拦截策略。

小结一下:robots.txt 决定的是「能不能抓」,不是「会不会被收录」。入口页与目标 URL 之间只要有一层被 Disallow,发现与抓取的链路就会断开。排查顺序建议是:robots.txt 规则 → 抓取测试工具 → 服务器日志 → 目标站自身的访问控制,一层层往下定位,比盲目堆链接有效得多。