对多数蜘蛛来说,抓取一个站点的第一步往往不是首页,而是根目录下的 robots.txt。它决定接下来哪些路径允许被访问。这个文件写得太随意,影响的不只是某个页面是否被抓,而是整条 URL 发现链路还能不能走通。
Disallow 拦的是抓取,不是索引
一个常见误解是:把页面 Disallow 掉,就等于不让它出现在搜索结果里。实际情况是,蜘蛛无法抓取这个 URL,但如果站外或站内别处仍有链接指向它,它依然可能以“无摘要”的形式出现在结果中。想阻止索引,应该用 noindex,而前提是该页面必须允许被抓取——否则蜘蛛读不到 noindex 这条指令。
想让页面不被索引,先得让它被抓到;不想让它被抓,就别指望 noindex 生效。
目录级封禁如何改变 URL 发现
写下 Disallow: /tag/ 这类规则后,蜘蛛不只是不进标签页,也不会再从标签页里顺着链接发现文章。列表页、筛选页、分页同理。抓取路径是串联的:中间一段被封,后面的 URL 就少了一条被发现的路。
- 被封禁目录里的内链无法继续传递发现价值,等于把这一块从抓取图里摘掉。
- Sitemap 里提交的 URL 如果同时被 Disallow,通常也无法作为有效入口,清单作用大打折扣。
- 规则按最长匹配生效,写得过宽时,可能连 CSS、JS、图片一起挡掉,渲染型页面就更容易读不完整。
通配符和结尾符,容易写宽也容易写窄
* 与 $ 的用法直接决定拦截范围。Disallow: /*?sort= 会把任何带 sort 参数的 URL 一并挡掉,包括你本来希望被发现的列表页;而 Disallow: /search 挡不住 /search/。写规则时,最好拿真实 URL 逐条对照,而不是凭印象判断。
Crawl-delay 与抓取节奏
部分蜘蛛会读取 Crawl-delay,但主流搜索蜘蛛并不完全依赖它,更多依据自身对服务器响应速度和站点质量的判断来调整频率。与其在这里设一个很大的值,不如先解决响应慢、连接不稳的问题。
robots.txt 本身返回什么状态码
这个文件自己也是被请求的 URL,它的返回状态同样会影响行为:
- 200 且内容正常:按规则执行。
- 404:多数蜘蛛会视为没有限制,按可抓取处理。
- 5xx 或超时:部分蜘蛛会暂时降低或停止抓取,等文件恢复后再继续。
- 被重定向到其他域名或登录页:行为不确定,相当于把规则的解释权交了出去。
与 Sitemap、内链的配合
Sitemap 是候选清单,不能替代抓取路径。如果清单里的 URL 恰好落在 Disallow 范围内,这份清单基本失效。内链则是发现新 URL 的主干通路,被封锁的目录意味着那些等着蜘蛛顺链接走来的页面,可能很久都等不到一次访问。两者要一起看:允许被抓的目录,才值得放进 Sitemap;放进 Sitemap 的目录,也不该被规则挡住。
一份可以照着做的自查
- 打开 robots.txt,把每条规则拿到真实 URL 上逐条验证。
- 检查是否有目录级封禁,挡住了列表页、标签页、分页这类聚合入口。
- 确认 CSS、JS、图片等渲染资源没有被误挡。
- 确认 robots.txt 返回 200,且没有跳转到别的地址。
- 对照 Sitemap,看提交的 URL 是否与 Disallow 冲突。
- 改动后观察抓取日志中对应目录的访问变化,作为验证依据,而不是当作效果承诺。
小结
robots.txt 是一道门,不是一块牌子。它不只在回答“能不能抓”,也在悄悄决定蜘蛛还能顺着哪条路走、能发现多少新 URL。规则越简洁、越贴近真实目录结构,抓取路径就越不容易在中途被截断。