搜索抓取

robots.txt 与 meta robots 的分工:不抓取和不索引是两回事

robots.txt 管的是蜘蛛能不能把 URL 抓回来,meta robots 与 X-Robots-Tag 管的是抓回来之后要不要放进索引。本文梳理这两类指令的作用环节、常见的错配场景、屏蔽 CSS 与 JS 的连带影响,以及从抓取预算角度设置规则时值得核对的几个细节。

搜索抓取

robots.txt 与 meta robots 的分工:不抓取和不索引是两回事

在抓取与索引这条链路上,robots.txt 和 meta robots(以及响应头里的 X-Robots-Tag)经常被当成同一类工具使用。它们管的环节其实不一样:robots.txt 决定蜘蛛能不能把 URL 抓回来,meta robots 决定抓回来之后要不要放进索引。把这两件事混在一起,就会出现“明明屏蔽了,结果里还有”和“明明写了 noindex,页面还是被收录”这类反复出现的困惑。

两条指令分别在哪个环节生效

Disallow 作用在抓取层面。蜘蛛先请求 robots.txt,读到规则后就不去请求对应路径。因为不请求,页面内容、页面里的 meta robots 标签、响应头里的 X-Robots-Tag,蜘蛛都没机会读到。所以 Disallow 并不等于“从索引中删除”,它只是让蜘蛛无法确认这个 URL 当前的状态。

noindex 作用在索引层面。蜘蛛必须先把页面抓下来,才能读到这条指令,然后决定不把它放进索引。也就是说,noindex 生效的前提是允许抓取。这两条指令的先后关系,决定了大多数配置错误的方向。

最常见的两种错配

用 Disallow 挡住不想被索引的页面

如果目的只是“这个页面不要出现在搜索结果里”,更稳的做法通常是允许抓取加上 noindex。改成 Disallow 之后,蜘蛛读不到 noindex,而页面又可能因为外链、历史记录或其他站点的引用,继续以 URL 的形式出现在结果中,标题和摘要则来自别处的信息。等到想收尾的时候,反而更麻烦。

给 noindex 页面同时加上屏蔽

这是上一种情况的镜像:页面里写着 noindex,robots.txt 里又把路径屏蔽了。结果是蜘蛛根本读不到 noindex,这条指令等于没写。如果 robots.txt 和页面模板由不同的人维护,这种冲突很容易悄悄存在很久,谁也不觉得有问题。

顺带屏蔽 CSS、JS 和图片的代价

robots.txt 里一条宽泛的规则,比如屏蔽某个目录下所有 js、css,看起来只是省流量,实际会影响渲染与判断。蜘蛛需要拿到样式和脚本,才能看清渲染后的结构和其中的链接;拿不到时,它对页面的理解会退回到原始 HTML,依赖脚本插入的内链、异步加载的内容都可能漏掉。图片、字体的抓取同样关系到它对页面完整度的判断。如果只是不想让某些资源出现在图片搜索里,用针对性更强的规则或指令,比整目录屏蔽更可控。

非 HTML 文件的指令放在哪里

PDF、图片、音视频这类文件里写不了 meta 标签,控制方式要放在 HTTP 响应头,用 X-Robots-Tag。它的取值和 meta robots 基本一致,可以带 noindex、noarchive、nosnippet 等。同一份内容既有 HTML 版又有 PDF 版时,两处的指令要一起看,否则容易出现某一个版本还在索引里的情况。

从抓取预算角度看屏蔽规则

  • 被 Disallow 的 URL 如果还留在站点地图里,等于同时发出两个相反的信号,蜘蛛会反复来确认规则,却不产生有效抓取。
  • robots.txt 中可以写 Sitemap 位置,这一行和屏蔽规则并不冲突,值得保留。
  • 筛选、排序、分享追踪这类参数路径,适合整段屏蔽,减少蜘蛛在大量组合上消耗的时间。
  • 屏蔽规则要写具体路径,避免一条过于宽泛的规则把站点地图、栏目页一起关掉。
  • 后台、购物车、登录后页面这类不需要索引、也不影响前端展示的路径,屏蔽掉通常没有副作用。

可以照着核对的一组检查

  1. 列出 robots.txt 里所有 Disallow 规则,逐条确认屏蔽目的:是省抓取,还是不想被索引。
  2. 对“不想被索引”的页面,确认它们能被抓取,并且页面或响应头里确实有 noindex。
  3. 确认 CSS、JS、图片没有被整目录屏蔽,尤其是导航和首屏相关的资源。
  4. 检查站点地图中是否包含被屏蔽的 URL,把这个矛盾清掉。
  5. 改动后按目录分批观察日志与索引状态,不要一次性大范围调整。
robots.txt 决定蜘蛛走不走这条路,noindex 决定走到之后要不要留下。把这两句话分清,大部分“屏蔽了还在”和“写了没生效”的问题都能自己定位。