搜索抓取

robots.txt 与 URL 发现:被 Disallow 的路径会牵连什么

robots.txt 决定抓取器能不能抓,却不决定 URL 能被谁发现。规则写错时,页面通常不会直接消失,而是内链指向被挡路径、Sitemap 申报冲突、资源文件拿不到,最终拖慢有效页面的发现节奏。本文梳理规则与实际影响的关系,并给出检查与调整顺序。

搜索抓取

robots.txt 与 URL 发现:被 Disallow 的路径会牵连什么

抓取许可和 URL 发现是两件事

不少人把 robots.txt 当成隐身开关,以为写一条 Disallow,URL 就从搜索里消失了。实际流程要分两步看:先是发现,也就是抓取器从外链、内链、Sitemap、推送等渠道拿到这个地址;再是抓取,判断允不允许取回、值不值得取回。robots.txt 管的是第二步。URL 被写进 Disallow 之后,抓取器仍可能通过站外引用知道它存在,只是不取回页面内容,因此也就无从判断页面质量、无从判断该给什么展示。

这个区别会直接改变处理方式:把不该被索引的页面统统 Disallow 掉,往往得到一个“存在但内容未知”的 URL,效果通常和预期相反。

被挡住的 URL 一般会经历什么

一种常见情况是页面本身是正常内容页,只因为参数太多、目录命名偏乱,被整段规则挡在外面。这类地址往往还被导航和正文反复引用,形成站内到处指、抓取器却进不去的矛盾状态:链接在传递路径上被消耗,页面内容始终没被评估过。

另一种情况是资源文件被误挡。CSS、JS 一旦被禁止抓取,取回的 HTML 可能无法正确渲染,页面里的链接就未必能被解析出来。这会把 URL 发现的问题伪装成渲染问题,让人往错误的方向排查。

几类容易被写坏的规则

  • 通配符放得太宽Disallow: /*? 这类写法经常把正常内容页一并挡住,生效范围要在测试工具里逐条验证。
  • 想挡目录却漏了斜杠Disallow: /tag 会同时挡住 /tags/ 这类正常路径,边界要写清楚。
  • Disallow 与 noindex 混用:想让页面彻底不出现,通常是允许抓取再加 noindex;只用 Disallow,抓取器反而看不到那条 noindex。
  • Sitemap 与 robots 互相打架:Sitemap 里申报的地址又在 robots.txt 里被禁止,是明显的矛盾信号,建议先清理掉一方。
  • 旧规则长期不清理:改版、栏目下线留下的条目越积越多,路径早就不存在,却仍在新地址上误伤。

Sitemap 和内链要跟着一起改

调整 robots.txt 只是第一步。真正影响 URL 发现的是站内链接结构:主导航、面包屑、正文内链、列表页分页,这些位置指向的地址如果和许可范围一致,抓取路径才顺。反过来,如果内链大量指向被禁止的路径,抓取器会在这条死路上反复试探,其他页面的发现节奏自然被拖慢。

Sitemap 更像一份申报清单。它不适合塞进被 Disallow 的 URL,也不适合包含大量重定向、404 的地址。这两类内容会稀释清单的可信度,让真正需要被发现的页面排在后面。

调整时的操作顺序

  1. 先导出当前规则,逐条标注“为什么存在”,没有理由的先列为待删。
  2. 用抓取测试工具验证几条代表性 URL 的许可状态,确认通配符的实际命中范围。
  3. 把“不该索引”和“不该抓取”分开处理:前者用 noindex 并允许抓取,后者才用 Disallow,比如后台、搜索结果页、无限参数组合。
  4. 同步更新 Sitemap,删掉被禁止或已失效的地址。
  5. 检查内链,把指向被禁路径的链接换成有效的规范地址。
  6. 观察一段时间抓取日志,看被挡路径的访问量是否下降、有效页面的抓取是否回升。
robots.txt 是一道门禁,不是一块橡皮。它决定抓取器能走进哪些房间,却管不了这些房间是否被人提起。想让一个 URL 彻底消失,做法常常正好相反:放它进来,再明确告诉抓取器不要索引。

如果站点规模不大,规则保持简单、只挡必要路径就好。规则越少,改完之后越容易判断问题出在哪里。