搜尋抓取

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 决定走到之後要不要留下。把這两句话分清,大部分“屏蔽了還在”和“寫了没生效”的問题都能自己定位。