搜索抓取

robots.txt 与抓取路径:哪些写法会让蜘蛛在门口停下

robots.txt 决定蜘蛛能不能请求某个路径,却不决定 URL 会不会出现在结果里。把这两件事混在一起,是抓取问题反复出现的根源。本文梳理整目录误封静态资源、通配符与结尾符用错、规则冲突、noindex 与屏蔽叠加等常见写法,并说明文件返回 404、403、5xx 时蜘蛛的不同反应与改动后的验证方法。

搜索抓取

robots.txt 与抓取路径:哪些写法会让蜘蛛在门口停下

robots.txt 是站点入口处的一份规则文件,它决定蜘蛛能不能请求某个路径,但不决定这个 URL 会不会出现在搜索结果里。把这两件事混在一起,是很多抓取问题反复出现的根源。规则写错时,往往不是抓取量突然掉光,而是某些路径长期没人走,问题要过很久才在日志里显出来。

robots.txt 管的是“能不能抓”,不是“收不收”

被 Disallow 的 URL,蜘蛛不会发出请求,因此页面里的 noindex 元标签也读不到。结果是这个地址仍可能以纯 URL 的形式出现在结果中,只是没有标题和摘要。反过来,如果希望页面不出现,正确顺序是先允许抓取,等蜘蛛能读到 noindex 之后,再考虑要不要重新屏蔽。

几处常见的误封写法

整目录屏蔽静态资源

把 /assets/、/static/、/js/、/css/ 这类目录直接写进 Disallow,会让蜘蛛拿不到渲染页面所需的脚本和样式。移动优先抓取的环境下,缺资源的页面很容易只剩一个空壳,内链和正文都走不下去。

通配符与结尾符用错

/search、/search*、/search$ 的效果并不相同。带 $ 的规则只匹配到该字符串结尾的地址;不加结尾符时,凡是以前缀开头的路径都会被命中,例如 /search-help、/search-archive 也会一起被挡住。写规则前,先把站内同类前缀的 URL 列一遍。

同一段里的规则冲突

Allow 与 Disallow 同时命中某个 URL 时,通常按最长匹配优先;长度相同时 Allow 优先。与其依赖书写顺序,不如把更具体的路径写完整,减少模糊匹配的范围。

目录级屏蔽和页面 noindex 叠在一起

常见的一种组合是:Disallow: /private/,同时该目录下的页面又加了 noindex。蜘蛛根本不会去请求,noindex 自然无从生效。类似情况还有把这些 URL 一并放进 Sitemap,提交的清单里夹着不可抓取的地址,只会让清单本身变得不可信。

  • 先放开抓取,确认蜘蛛能正常读到页面内容;
  • 再通过 noindex 表达“不要收录”的意图;
  • 确认真实生效后,才决定是否需要回到屏蔽状态。

文件本身打不开时,蜘蛛怎么处理

robots.txt 返回 404,一般被视作没有规则,站点可以正常抓取;返回 403,多数情况下也按可抓取处理。返回 5xx 时,蜘蛛通常会暂停或降低该站的抓取频率,长期如此会影响到整站,而不只是某一个目录。所以不要把 5xx 当成屏蔽手段,也不要用 robots.txt 去承担限流或拦截攻击流量的职责。

改动之后怎么验证

  1. 用几类典型 URL 做一次抓取测试,覆盖首页、栏目页、被拦路径和边界前缀。
  2. 在服务器日志里看被拦目录的请求是否还在出现,是否存在本该放开却仍无请求的路径。
  3. 核对 Sitemap 中的 URL 是否都落在允许抓取的范围内,冲突项要么修正规则,要么从清单里移除。
  4. 观察一到两个抓取周期,注意抓取请求的分布是否向重要页面移动,而不是只看总量。

哪些场景适合用规则拦下来

  • 后台、结算、订单等登录后才可见的路径;
  • 会生成大量组合的排序与筛选参数;
  • 带会话 ID 或临时 token 的地址;
  • 供前端调用的数据接口和无限滚动接口。

把 robots.txt 当成一份需要长期维护的路径白名单,改动前先拿典型地址验证,再对照日志看真实请求,比一次性写死然后遗忘要稳妥得多。