运营蜘蛛池时,robots.txt 经常被当成一个开关:想藏页面就 Disallow,想被抓就放开。实际使用中,它管的只是抓取调度,和页面能不能进入索引是两件事。把这两件事混在一起,就容易出现“明明屏蔽了还被收录”“明明放开了却抓不到”的困惑。
robots.txt 管的是抓取,不是收录
robots.txt 告诉搜索蜘蛛哪些路径不必来抓。它既不承诺、也不阻止某个 URL 出现在搜索结果里。一个 URL 如果被外部链接指向、被提交或以其他方式被发现,即使所在路径被 Disallow,也可能以无摘要的形式进入索引,因为搜索方没有抓到页面内容,只能依据链接信息做判断。
反过来,允许抓取也不代表一定会抓。抓取还受配额、优先级、站点整体质量和响应速度影响。所以用 robots.txt 去“控制收录”,方向从一开始就偏了。
蜘蛛池运营里最常见的几个误区
误区一:用 Disallow 藏入口页
入口页被 Disallow 后,蜘蛛不会抓取这个页面,也就看不到里面的目标链接。想借屏蔽让入口页安静地存在,同时靠它传递 URL,这两个目标本身是冲突的。
误区二:屏蔽了还去提交 URL
URL 提交和 robots.txt 屏蔽是相互抵消的动作。提交的 URL 落在一个被屏蔽的目录下,抓取请求会被拦下,日志里通常只能看到被拒绝的痕迹,而不是一次正常的内容抓取。
误区三:前缀写得太宽,误伤目标路径
robots.txt 的前缀匹配比直觉更宽。写 Disallow: /tmp 会同时命中 /tmpfile、/templates 这类路径。如果目标 URL 恰好落在被误伤的目录下,链接页抓到了,目标 URL 却进不来。
误区四:指望 Crawl-delay 精细控制节奏
Crawl-delay 字段在不同搜索方的支持程度并不一致,如今更多依赖服务器返回的 429、503 以及站点整体响应表现来调节抓取。与其写一条 Crawl-delay 求平安,不如先把响应时间压一压。
误区五:把 CSS、JS 一起屏蔽
屏蔽样式和脚本会让渲染结果与用户看到的页面不一致。如果目标链接是脚本动态插入的,屏蔽脚本之后,蜘蛛拿到的 HTML 里根本没有这条链接。
实际怎么设比较稳
- 入口页和放链接的路径保持可抓取,不要 Disallow,也不要加 noindex。
- 后台、管理路径、站内搜索结果页、重复的筛选参数路径,可以按前缀屏蔽,减少无效抓取。
- 屏蔽规则写窄一点,能写完整目录就别用容易误伤的短前缀。
- 每次改完 robots.txt,隔几天翻日志,看目标 URL 的抓取请求是变多还是变少。
- 关键页面用普通 a 标签直接给出链接,不要依赖跳转或脚本生成。
判断标准很简单:如果日志里搜索蜘蛛访问入口页的次数正常,但目标 URL 一直没出现抓取请求,先去看 robots.txt 的匹配范围,再去看入口页里的链接是不是真的写在 HTML 里。
一个容易忽略的细节
robots.txt 的更新不会立刻全面生效。有些蜘蛛会缓存旧版本一段时间,改完之后短期内看到的抓取行为和文件内容不一致,属于正常现象。此时反复改文件,只会让后续观察更难判断,建议改一次,等一个观察周期再决定下一步。
把 robots.txt 当成抓取调度的工具,而不是收录的开关,蜘蛛池里很多看起来像玄学的问题,都会变得可以直接排查。