在站点运营里,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,文件本身却没有任何限制。
上线前的核对清单
- 确认 robots.txt 是正式环境的版本,没有残留测试规则。
- 把 sitemap 中提交的地址和 robots.txt 的屏蔽规则对一遍,避免自相矛盾。
- 抽查关键页面的 meta robots,确认没有通过模板或脚本被统一注入 noindex。
- 对不该收录但不介意被抓的页面,优先用 noindex;对纯粹消耗额度的路径,再用 Disallow。
- 非 HTML 资源检查响应头,而不是页面源码。
判断一条规则是否正确,可以问自己:我是希望蜘蛛别来,还是希望它来了但不要留下记录?答案不同,用的指令就不同。
用日志回头看效果
规则上线一段时间后,可以在服务器日志里找被屏蔽的路径,看是否仍有请求、返回什么状态码。如果某个被 Disallow 的目录长期占据抓取额度,说明规则没有生效或者被其他入口绕开;如果本该收录的页面一直停在“已发现未抓取”,则要回到 robots.txt 和 sitemap 的一致性上检查。
这类调整不需要频繁改动,但每次改版、换域名或上线新频道时都应该重新核对一遍,因为模板和配置文件往往就是在那几个时间点被顺手改坏的。