抓取许可和 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 的地址。这两类内容会稀释清单的可信度,让真正需要被发现的页面排在后面。
调整时的操作顺序
- 先导出当前规则,逐条标注“为什么存在”,没有理由的先列为待删。
- 用抓取测试工具验证几条代表性 URL 的许可状态,确认通配符的实际命中范围。
- 把“不该索引”和“不该抓取”分开处理:前者用 noindex 并允许抓取,后者才用 Disallow,比如后台、搜索结果页、无限参数组合。
- 同步更新 Sitemap,删掉被禁止或已失效的地址。
- 检查内链,把指向被禁路径的链接换成有效的规范地址。
- 观察一段时间抓取日志,看被挡路径的访问量是否下降、有效页面的抓取是否回升。
robots.txt 是一道门禁,不是一块橡皮。它决定抓取器能走进哪些房间,却管不了这些房间是否被人提起。想让一个 URL 彻底消失,做法常常正好相反:放它进来,再明确告诉抓取器不要索引。
如果站点规模不大,规则保持简单、只挡必要路径就好。规则越少,改完之后越容易判断问题出在哪里。