先分清两件事:发现 URL 和抓取 URL
蜘蛛的工作大致分两步:先把地址放进待抓队列,再按队列逐条去取。robots.txt 管的是第二步。它拦不住别人把链接写进页面、写进 Sitemap,也拦不住蜘蛛在别处看到这个地址。所以一个 URL 被 Disallow 掉,通常只是处在「已知但没抓」的状态。
蜘蛛读 robots.txt 的时机
每次准备抓取某个 URL 之前,蜘蛛会先核对对应站点的 robots.txt。这份文件会被缓存一段时间,不会每条请求都重新下载。如果路径命中 Disallow 规则,它就跳过这次抓取。跳过的是一条 URL 的抓取动作,不是这条 URL 的存在。
Disallow 的语义更接近「别来取内容」,而不是「当作这个地址不存在」。
被屏蔽目录里的链接,蜘蛛走得到吗
走不到。链接要被发现,前提是有人抓取了承载它的那个页面。如果一个目录整体被 Disallow,蜘蛛取不到目录里的页面,自然也读不到页面中的内链。这是很常见的连锁问题:本想屏蔽某个参数化目录,结果把挂在里面的正常文章入口一起切断了。
能绕过这一层的只有站外来源,比如其他站点的链接、社交平台上的分享、Sitemap 里直接列出的地址,以及历史上已经被抓过、留在记录里的地址。
Sitemap 里列了被屏蔽的 URL 会怎样
- 地址会被读取,但抓取环节仍被 robots.txt 拦住,多半是白列。
- 如果站点地图里大量都是这类地址,会挤占提交额度,也让抓取统计难以判断。
- 比较稳妥的做法是让 Sitemap 只放希望被抓的规范地址,屏蔽目录下的地址不要同时出现在两边。
用 robots.txt「清理」页面是常见误操作
有些站点希望某些页面从搜索结果里消失,就直接在 robots.txt 里屏蔽整个目录。实际结果往往是:页面不再被抓,但早先抓到的版本可能还留着;外站链接仍在持续把 URL 送进队列,只是内容无法更新。想让它真正退出,一般要允许抓取后用 noindex,或者返回 404、410 明确告知内容已不存在。这两条路都需要蜘蛛能取到响应,屏蔽反而把它挡在门外。
robots.txt 本身不稳定,代价会放大
它是抓取的前置文件,服务器对它不稳定时,影响会扩散到全站:
- 返回 5xx:多数蜘蛛会保守处理,短暂降低甚至暂停抓取,等情况恢复。
- 返回 404:通常按「没有限制」处理,等于放开了原本想挡的路径。
- 返回一长串重定向:多一次无谓往返,规则也可能失效。
- 被 CDN 或 WAF 拦下、返回 HTML 登录页:同样会被当作无效规则。
建议把它当作一个静态小文件维护:放在根目录、直接返回 200、别挂复杂逻辑、别依赖容易超时的后端接口。
日常维护的几个检查点
- 屏蔽规则尽量精确到具体路径或参数,不要一屏蔽就是整个目录。
- 被屏蔽的路径,不要同时出现在内链、Sitemap 和站内推荐位里。
- 希望从索引中移除的页面,优先考虑 noindex,或者明确的 404 / 410。
- 改完规则后翻几天访问日志,看蜘蛛是否还在反复请求被挡的地址。
- 把 robots.txt 的可用性纳入监控,和首页同等看待。