蜘蛛池知识

蜘蛛池入口页的 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 标签影响的是页面被处理的方式,它本身不解决内容质量、抓取频率和收录结果的问题。把这些指令理顺,只是让已经到来的抓取机会不被自己浪费掉。