搜索抓取

robots.txt 与 meta robots:屏蔽抓取和禁止收录对 URL 发现的影响

robots.txt 的 Disallow 与 meta robots 的 noindex 经常被当成一回事,但一个管抓取请求,一个管收录结果。本文梳理两种指令在 URL 发现与抓取队列中的实际表现,给出容易踩坑的配置组合和上线前的核对清单。

搜索抓取

robots.txt 与 meta robots:屏蔽抓取和禁止收录对 URL 发现的影响

在站点运营里,robots.txt 和 meta robots 是两条最常被混用的指令。它们看起来都在说“别抓这个”,但作用的位置完全不同:一个拦在请求前,一个作用在抓取之后。搞混这两者,URL 发现和抓取队列的状态就会出现和预期相反的走向。

Disallow 拦的是请求,不是发现

URL 的发现主要来自页面链接、sitemap、外链和提交入口。robots.txt 里的 Disallow 并不会阻止这些渠道把地址记录下来,它只是让搜索蜘蛛在准备请求时放弃抓取。结果是:地址进了已知队列,但长期停在“已发现、未抓取”的状态。

这种状态本身没有害处,但如果被屏蔽的地址恰好是站长希望收录的内容,问题就出现了——不是没被发现,而是发现之后走不下去。

noindex 需要蜘蛛真的抓到页面

meta robots 的 noindex 依赖蜘蛛成功抓取页面并读到这行标签。如果同一路径同时被 robots.txt 屏蔽,蜘蛛拿不到 HTML,自然看不到 noindex,页面仍可能以“无描述”的形式出现在结果里。这是最常见的自相矛盾配置。

  • 只想去掉收录、保留链接传递:只用 noindex,不要 Disallow。
  • 只想省抓取额度、不介意是否收录:可以 Disallow,但要接受可能出现的无摘要结果。
  • 既 Disallow 又 noindex:两者互相抵消,通常是最差组合。

几种常见配置的实际后果

整站 Disallow: /

测试环境常用这一条防止被外部看到。风险在于上线时忘记改回。此时 sitemap 继续投递、外链继续产生,URL 发现照常进行,但没有任何页面能被抓取,站点在抓取队列里基本停摆。

屏蔽参数与筛选路径

对筛选参数、排序参数做屏蔽,确实能减少无效抓取,但这些路径往往也在传递链接关系。如果被屏蔽的目录里还有需要被发现的正规页面,链接路径会一起断掉。更稳妥的做法是把参数收敛成静态化路径,而不是直接一刀切。

非 HTML 资源

PDF、图片、视频这类文件没有 meta 标签,要用 HTTP 响应头里的 X-Robots-Tag 控制。写错位置是常见失误:标签写进了 HTML,文件本身却没有任何限制。

上线前的核对清单

  1. 确认 robots.txt 是正式环境的版本,没有残留测试规则。
  2. 把 sitemap 中提交的地址和 robots.txt 的屏蔽规则对一遍,避免自相矛盾。
  3. 抽查关键页面的 meta robots,确认没有通过模板或脚本被统一注入 noindex。
  4. 对不该收录但不介意被抓的页面,优先用 noindex;对纯粹消耗额度的路径,再用 Disallow。
  5. 非 HTML 资源检查响应头,而不是页面源码。
判断一条规则是否正确,可以问自己:我是希望蜘蛛别来,还是希望它来了但不要留下记录?答案不同,用的指令就不同。

用日志回头看效果

规则上线一段时间后,可以在服务器日志里找被屏蔽的路径,看是否仍有请求、返回什么状态码。如果某个被 Disallow 的目录长期占据抓取额度,说明规则没有生效或者被其他入口绕开;如果本该收录的页面一直停在“已发现未抓取”,则要回到 robots.txt 和 sitemap 的一致性上检查。

这类调整不需要频繁改动,但每次改版、换域名或上线新频道时都应该重新核对一遍,因为模板和配置文件往往就是在那几个时间点被顺手改坏的。