蜘蛛池知识

蜘蛛池入口頁的 meta 與 canonical:別让頁面自己把信号抵消

入口頁除了狀態碼和跳轉,head 里的 meta robots、X-Robots-Tag 和 canonical 也在给爬虫下指令。這些信号互相打架时,前面铺垫的抓取机會會被白白浪費。本文梳理几组常见冲突,给出一套相對稳妥的預設配置,以及上线前的检查方法。

蜘蛛池知识

蜘蛛池入口頁的 meta 與 canonical:別让頁面自己把信号抵消

入口頁能做什么,除了狀態碼、跳轉方式和連結位置,HTML 的 head 里還有一组话更多的标簽:meta robots、X-Robots-Tag、canonical。它們不决定頁面能不能被抓,但會决定爬虫抓完之後怎么處理這個頁面和頁面上的連結。用错不會立刻出事,却會让前面做的铺垫打折扣。

meta robots:先弄清楚它管什么

meta robots 里的 noindex 並不阻止抓取,它只是告诉搜尋引擎這個頁面別進索引。真正拦住抓取的入口是 robots.txt。很多人把這两件事混在一起,结果入口頁既没被抓,也没被索引。

對蜘蛛池的入口頁来说,常见的有三種组合:

  • index, follow:入口頁自己也參與索引,連結正常传递。适合入口頁本身有一定内容量、打算長期留着的池子。
  • noindex, follow:入口頁不進索引,但連結照常被發現。适合纯粹做中轉、内容單薄、留着反而拉低整体质量的頁面。
  • noindex, nofollow:既不入索引,也不传递連結。放在入口頁上基本等于自断通道,除非你确實要废弃這個頁面。

需要留意的是,nofollow 更像提示而不是硬性阻断,不同搜尋引擎的执行力度並不一致。把它当成保證,容易失望。

canonical:別让入口頁自己抵消自己

canonical 的作用是告诉搜尋引擎,這個頁面的代表版本是谁。入口頁上如果用错,通常會出現几種情况:

  • canonical 指向目标頁:等于说入口頁只是目标頁的副本,入口頁自身很可能不進索引。如果入口頁只承担引路作用,這未必是坏事,但要清楚代價。
  • canonical 指向一個不存在的 URL:信号落空,搜尋引擎會自行判断,往往按重复内容處理。
  • 批量模板里所有入口頁的 canonical 都指向同一個地址:這是最典型的批量痕迹,頁面之間的獨立性直接被抹掉。

跨域 canonical 的生效程度一直不稳定,不适合当作合並信号的主力手段,尤其在入口頁和目标頁内容差异很大时。

几组常见的信号打架

  • robots.txt 允许抓取 + meta noindex:頁面會被抓,但不進索引。這是合理组合,前提是你知道自己在做什么。
  • meta noindex + canonical 指向別的頁面:一個说別索引我,一個说索引另一個版本,處理優先級因引擎而异,结果通常不是你想要的。
  • HTTP 头里的 X-Robots-Tag 與頁面 meta 矛盾:一個说 index,一個说 noindex。以更嚴格的一方為准是常见做法,但這不是可以依赖的規則。

一套相對稳妥的預設值

如果没有特別的理由,可以這样起步:

  1. 入口頁預設 index, follow,不額外叠加 noindex。
  2. 内容确實單薄、只想做中轉的入口頁,可以试 noindex, follow,让連結繼續被發現。
  3. 入口頁不加 canonical,或者 canonical 指向自身。
  4. 目标頁保持正常的 index, follow,不要顺手加 nofollow。
  5. 批量生成时,把 head 里這几行当成模板變量逐個检查,別让整個池子共用一個值。

上线前怎么驗證

  • 挑几個入口頁,直接看服務端返回的 HTML 源碼,而不是只看渲染後的頁面。
  • 注意有些 meta 是 JS 注入的,抓取时不一定能被讀到;能寫在服務端返回的 HTML 里,就別放到脚本里。
  • 用抓取工具批量掃一遍,把 head 中出現 noindex、nofollow、canonical 的頁面單獨列出来,確認是不是你主動加的。
入口頁的信号是叠加生效的,不是越多越好。少下几條互相冲突的指令,往往比多下几條所谓的優化指令更有效。

最後還是那句:meta 标簽影响的是頁面被處理的方式,它本身不解决内容质量、抓取频率和收錄结果的問题。把這些指令理顺,只是让已经到来的抓取机會不被自己浪費掉。