做入口页时,很多人会顺手在 robots.txt 里加一条 Disallow,想低调一点,别让入口页本身被收录。但这样做的同时,往往会连带影响目标 URL 的发现。这篇把机制说清楚。
先说结论
如果 robots.txt 明确禁止搜索蜘蛛抓取入口页,蜘蛛就不会下载这个页面的 HTML,也就没有机会解析里面的 a 标签,目标 URL 自然不会被从这条路径发现。robots.txt 挡的是抓取动作,不是索引结果,这一点常被混淆。
为什么禁止抓取会直接断掉链接路径
URL 发现依赖的是一个链条:蜘蛛先拿到入口页的响应体,再去解析 HTML 里的链接。如果第一步被 robots.txt 拦住,蜘蛛只能看到一份禁止访问的规则状态,页面内容对它来说是不存在的。
注意区分两种情况:
- 入口页被 Disallow:蜘蛛不抓内容,页面里的链接不会被解析。
- 入口页返回 404 或 403:蜘蛛尝试过抓取但失败,同样拿不到链接。
两者的共同点是,链接发现的链条都断在了入口页这一环。
它和 noindex、nofollow 不是一回事
meta robots 的 noindex 需要蜘蛛先把页面抓下来读一遍才起作用;robots.txt 的 Disallow 是抓取前的拦截。顺序不同,结果也不同:
- 只写 noindex:蜘蛛仍会抓取页面,能读到里面的目标链接,只是该入口页本身可能不进索引。
- 只写 Disallow:蜘蛛根本不读页面,页面里的链接也读不到。
- 两者同时写:如果页面被 Disallow,爬虫就不会看到 noindex,noindex 基本失效。
想让入口页自己不进索引、但保留链接发现能力,通常更适合用 noindex 而不是 Disallow。
几种常见的误伤写法
- 整站写成 Disallow: /,本意是屏蔽后台,结果把入口页和站内正常页面一起挡了。
- 规则写成 Disallow: /pool,但入口页路径是 /pool-entry/xxx,前缀不匹配或匹配过头都可能出问题。
- CDN 或 WAF 返回了一份默认 robots.txt,站长没留意,规则和源站的不一致。
- robots.txt 里没写 Disallow,但写了很长的 Crawl-delay,蜘蛛进站频率被压得很低,URL 发现速度明显变慢。
这些写法不一定让蜘蛛完全发现不了链接,但会让发现效率变差,或者把本来该抓的页面挡在外面。
如果确实想限制入口页,怎么做更稳妥
- 先确认目的是入口页别被收录,还是入口页别被抓取。前者用 noindex,后者才考虑 robots.txt。
- robots.txt 的屏蔽范围尽量写细,只针对具体目录,不要用全站通配。
- 用 Search Console 的 robots.txt 测试工具或抓取日志确认规则的实际命中结果。
- 入口页上保留可被解析的普通 a 标签,避免完全依赖 JS 渲染或表单提交。
- 目标 URL 另外通过 sitemap 等常规渠道声明,不要把发现路径全押在入口页上。
自查清单
- robots.txt 里有没有意外覆盖入口页目录的 Disallow 规则。
- 入口页返回的状态码是否正常,有没有出现 403、429 这类被拦截的响应。
- 入口页的 HTML 里是否存在可抓取的静态链接。
- 蜘蛛抓取日志里,入口页的抓取记录是否还在持续出现。
小结
robots.txt 屏蔽入口页,等于把链接发现的第一环剪断。蜘蛛既不会读到入口页内容,也不会顺着它找到目标 URL。真正需要限制的往往是入口页的收录状态,而不是抓取权限,这两件事分开处理,很多问题就不会互相牵连。具体能发现多少、多久发现,还取决于抓取预算、链接结构和蜘蛛的调度,实际效果要通过日志和站点数据去观察。