蜘蛛池知识

蜘蛛池入口頁的索引指令:noindex、canonical 與 X-Robots-Tag 用错會怎样

入口頁被蜘蛛抓到,不代表會被收錄。robots.txt、meta robots、X-Robots-Tag 與 canonical 這几類索引指令,寫错时不會报错,只會让整批頁面安静地被排除在索引之外。本文梳理它們的生效顺序、常见誤配场景,以及上线前可以逐條核對的自检項。

蜘蛛池知识

蜘蛛池入口頁的索引指令:noindex、canonical 與 X-Robots-Tag 用错會怎样

蜘蛛池的入口頁能不能被收錄,抓取只是前半段。蜘蛛爬到了、下载了 HTML,不等于這一頁會進索引——中間的判断依據,很大一部分来自你自己發出的索引指令。這些指令寫在 robots.txt、HTTP 响應头和 HTML 的 meta 标簽里,改動成本极低,但寫错的代價是整批入口頁被主動排除,而且在日誌里看不到任何报错。

先分清:抓取指令和索引指令是两套東西

robots.txt 管的是“蜘蛛能不能来讀”,meta robots 和 X-Robots-Tag 管的是“讀完之後要不要收”。很多入口頁被排除,不是因為蜘蛛没来,而是来了之後被 noindex 拦下。日誌里會出現正常的 200 抓取记錄,看起来一切正常,索引里却始终没有這一頁。

抓取量是過程指标,索引量才是结果指标。指令寫错时,過程看起来完好無损。

三類最常寫错的指令

robots.txt:Disallow 不等于刪除

  • Disallow 只是請求蜘蛛不要抓,頁面仍可能因為外鏈存在而出現在索引里,只是没有摘要。
  • 用 Disallow 挡住某個目錄,同时又在別處放連結,是入口頁最常见的自相矛盾。
  • 通配符和目錄结尾的寫法容易寫反,比如 /entry//entry 覆盖范围並不相同。
  • robots.txt 文件本身返回 5xx 或超时,不同蜘蛛的處理策略不一样,有的會暫停抓取整個站。

meta robots 與 X-Robots-Tag:索引指令

HTML 頁面用 meta 标簽,非 HTML 资源(图片、PDF、接口返回)只能靠 HTTP 头里的 X-Robots-Tag。两者作用相同,同时存在时以更嚴格的那個為准。

  • noindex:不要把這一頁放進索引。
  • nofollow:不跟踪頁面里的連結。用在入口頁上,等于自己切断了通往目标頁的路。
  • noindex 和 Disallow 一起用是典型誤配:蜘蛛看不到 noindex,反而可能只凭外鏈收錄一條空记錄。

canonical:告诉蜘蛛哪一版算數

canonical 是一個建议,不是强制指令,但它會明顯影响權重和索引版本的归並。模板化批量生成入口頁时,最容易出的事就是把 canonical 寫死指向首頁或某個固定 URL,结果所有入口頁都被当成副本,蜘蛛不再單獨抓取,也不再有單獨索引。

  • 自引用 canonical 是常規做法,指向自身即可。
  • 已经确定要合並的重复頁面,用 301 比 canonical 更干脆。
  • 分頁列表頁不要把每一頁都 canonical 到第一頁,這會丢掉後几頁的發現價值。

生效顺序:先抓取,再索引

  1. robots.txt 决定蜘蛛這次能不能讀。
  2. HTTP 响應头里的 X-Robots-Tag 先于 HTML 内容被解析。
  3. HTML 中的 meta robots 在解析頁面後生效。
  4. canonical 在索引阶段被參考,用于决定保留哪個版本。

顺序意味着:如果第一步就挡住了,後面所有指令蜘蛛都讀不到。想用 noindex 下架頁面,就不要同时用 Disallow 挡住它。

几個典型的誤配场景

  • 上线前的全站 noindex 測試,上线後忘了撤,整批入口頁安静地不進索引。
  • CDN 或反向代理缓存了带 noindex 头的舊响應,源站已经改回,蜘蛛拿到的還是舊头。
  • sitemap 里提交了一批带 noindex 的 URL,等于自己给蜘蛛發無效任務。
  • 入口頁的 nofollow 加在了正文連結上,只留下導航連結可跟,連結深度被動拉長。

上线前的自检清單

  • curl -I 直接看响應头,確認没有意外的 X-Robots-Tag。
  • 抽查几條入口頁的 HTML 源碼,確認 meta robots 與 canonical 符合预期,而不是模板預設值。
  • 確認 robots.txt 没有誤伤入口頁目錄,也没有出現 Disallow 與 noindex 叠加。
  • 改動索引指令後,通過日誌观察蜘蛛的抓取是否恢复,不要只看一天的資料。

索引指令的特点是“寫對了看不出功劳,寫错了很安静”。對蜘蛛池這種批量生成、批量上线的场景,把這几項做成固定的上线检查,比事後從日誌里倒推原因要省力得多。