在蜘蛛池和日常站点运营里,robots.txt 往往是最先被读取的文件之一。不少站长为了“减少抓取、保护入口页”,直接给入口页加上 Disallow,结果过了一段时间发现:入口页里的目标 URL 一条都没动静。问题出在一个容易混淆的地方——robots.txt 管的是“能不能抓”,不是“知不知道”。
一、先把“发现”和“抓取”拆开看
搜索引擎处理一个 URL,通常是两步:先知道它存在(发现),再实际去请求它(抓取)。
- 发现渠道:其他页面的链接、XML sitemap、URL 提交接口、外部链接、重定向等。
- 抓取许可:由 robots.txt、服务器响应、访问频率限制等共同决定。
robots.txt 只参与第二环。它不阻止搜索引擎“知道”某个地址存在,但它能阻止爬虫去把这个地址打开——包括打开入口页去解析里面的链接。
一个 URL 可以被发现,却长期不被抓取;也可以被允许抓取,却没人知道它存在。入口页被屏蔽,属于后一种问题的反面。
二、入口页被 Disallow 之后,实际会怎样
如果入口页所在的整段路径都被 robots.txt 禁止,主流搜索蜘蛛通常不会再请求这个页面。既然页面没被读取,里面的链接就不会被解析,指向的目标 URL 也就失去了一条引用来源。
- 目标 URL 不会因为这个入口页而被发现,除非它在别处也被链接或提交过。
- 已经抓取过的目标 URL 不受入口页屏蔽影响,仍可能保留在索引里。
- 入口页自身的收录状态会逐步变化,被屏蔽的页面一般不会正常参与索引。
三、三个很常见的误解
1. “屏蔽入口页省抓取,目标 URL 照样会被发现”
不成立。链接写在爬虫读不到的页面里,对爬虫而言就等于不存在。省下来的抓取配额并不会自动转移到目标 URL 上。
2. “把入口页写进 sitemap 就能补回来”
sitemap 只是提交线索。如果该 URL 本身被 robots.txt 禁止抓取,爬虫通常不会为了它破例去请求,所以把被屏蔽的入口页塞进 sitemap,作用很有限。真正有意义的是把目标 URL 本身提交出去。
3. “Disallow 加 meta noindex 双保险”
这是一个经典冲突:页面被禁止抓取后,爬虫读不到页面里的 meta noindex,noindex 也就无法生效。要让 noindex 起作用,前提是允许抓取。两者混用,往往哪个目标都达不到。
四、确实要屏蔽入口页时,目标 URL 怎么办
- 把指向目标 URL 的链接放到至少一个可抓取的页面上,保证发现路径不断。
- 单独提交目标 URL,而不是提交被屏蔽的入口页。
- 检查 robots.txt 的路径写法和通配符,避免误伤到目标 URL 所在目录。
- 用服务器日志确认爬虫实际请求了哪些路径,而不是凭感觉判断。
五、怎么验证规则有没有生效
比较可靠的做法是看日志:观察搜索蜘蛛的 UA、请求路径、返回状态码。同时确认 robots.txt 本身返回 200 且语法正确;注意部分规则会被缓存,修改后不一定立刻被采用。另外,不同爬虫对 robots.txt 的支持程度不完全一致,规则分组写得不严谨时容易误伤自己的目标路径。
robots.txt 更像一份约定,它决定了主流搜索蜘蛛的抓取行为,但不会替你把 URL 传播出去。
六、小结
入口页被 robots.txt 屏蔽后,里面的目标 URL 基本不会被通过这条链路发现。想让目标 URL 持续被看到,关键不是“屏蔽了还能不能发现”,而是保证至少有一条可被爬虫读取的引用路径,再配合提交和日志验证来判断效果。屏蔽入口页和曝光目标 URL,很多时候是两件互相矛盾的目标,需要先想清楚优先哪一个。