搜尋抓取

meta robots 與 X-Robots-Tag:抓取與索引之間的那道闸门

meta robots 常被当成一個總開關,實际上它主要作用在索引环节,對抓取只产生間接影响。本文梳理 noindex、nofollow 的作用邊界,說明它與 robots.txt 的常见冲突、X-Robots-Tag 的使用场景,以及從抓取预算角度看這類指令该怎么配置。

搜尋抓取

meta robots 與 X-Robots-Tag:抓取與索引之間的那道闸门

很多人把 meta robots 当成一個總開關:加了 noindex 就等于頁面從搜尋里消失。實际情况要复杂一些。抓取和索引是两個獨立环节,meta robots 系列指令主要作用在索引這一侧,它對抓取的影响是間接的。

先分清抓取和索引

抓取是指蜘蛛把頁面 HTML 拉回本地,索引是指系統决定這個 URL 要不要進入候選结果集。meta robots 寫在 HTML 里,蜘蛛必须先完成抓取,才能讀到它。所以一條 noindex 不會让蜘蛛不来,只會让它在讀完頁面之後,决定不把内容放進索引。

常见取值與實际邊界

  • noindex:不進索引,但仍可被抓取,頁面上的連結通常也仍會被發現。
  • nofollow:頁級使用时,表示不建议繼續追踪本頁上的連結;連結級使用时,只针對那一條連結。
  • noarchive:不提供缓存副本。
  • nosnippet / max-snippet:控制摘要展示的長度。
  • max-image-preview:控制图片预览的尺寸。

這里最容易被誤解的是 noindex 和 nofollow 的關系。一個頁面寫了 noindex,通常不需要額外再寫 nofollow。因為蜘蛛已经在抓這一頁了,頁面上指向其他 URL 的連結,依然是發現新地址的重要入口。把两者一起加,等于同时放弃這個頁面的索引價值和它作為分發入口的作用。

頁級 nofollow 與連結級 nofollow

頁級寫 meta name="robots" content="nofollow",是對整頁所有連結生效,粒度很粗。連結級的 rel="nofollow" 才是更常用的做法,只加在某一條外鏈或用戶生成内容上。遇到评论区、论坛簽名這類位置,連結級處理更合适。

X-Robots-Tag 解决非 HTML 的問题

meta 标簽只能寫在 HTML 的 head 里。PDF、图片、视频這類文件没有 head,這时候要用 HTTP 响應头 X-Robots-Tag。它的取值和 meta robots 基本一致,只是寫在服務端配置里,可以针對某個目錄、某類扩展名统一設定。

如果某類文件经常被誤抓,先看看能不能通過 X-Robots-Tag 加 noindex,而不是一刀切在 robots.txt 里屏蔽整個目錄。

最容易踩的坑:robots.txt 拦住又寫了 noindex

這是很常见的配置冲突。robots.txt 里的 Disallow 會阻止蜘蛛抓取某個目錄,但同时也意味着蜘蛛永遠讀不到那個目錄里頁面上的 noindex 标簽。结果就是 URL 仍可能因為有外部連結而被收錄,只是以無摘要的形式出現。想用 noindex 让頁面登出索引,前提是蜘蛛能抓到它。

所以顺序一般是:只想去索引,就允许抓取並加 noindex;想彻底不让抓取、也不太在乎索引狀態,才用 robots.txt。

JS 注入的指令,可能来不及生效

如果 noindex 是前端框架在客戶端渲染时插入 head 的,蜘蛛要在执行完 JS 之後才能看到。多數情况下這不影响最终判断,但會多消耗一次渲染资源,也增加了判断失敗的几率。能放在服務端輸出的指令,尽量放在服務端。

從抓取预算角度看 noindex 頁面

noindex 不省抓取。一個頁面只要可抓,蜘蛛就可能在多轮抓取中反复訪問它,尤其是它還被内鏈指向、或者内容经常更新的时候。如果一批頁面确實没有索引價值,又長期被大量抓取占用资源,可以考虑在 robots.txt 层面收口,代價是失去對索引狀態的精细控制。两者之間需要權衡,而不是简單地两個都加。

一份可以照着走的检查顺序

  1. 先確認目标:是要登出索引,還是不想被爬,還是两者都要。
  2. 需要登出索引的頁面,確認没有被 robots.txt 挡住,蜘蛛能正常讀到响應头或 head。
  3. 检查指令是否真的輸出在 HTML 源碼里,而不是只在浏览器渲染後出現。
  4. 非 HTML 资源,检查响應头是否带了 X-Robots-Tag。
  5. 用抓取日誌抽查這些 URL 的實际訪問狀態,確認返回碼正常、没有被大量重定向。
  6. 改完指令後观察一段時間,重点看内鏈分發是否受影响,別把入口頁一起收掉。

把這些指令当成抓取路径上的路标,而不是總闸,很多配置冲突會少很多。