蜘蛛池知识

蜘蛛池页面上的 canonical 与 noindex:指令没对齐,投放容易白跑

投放没反应,未必是通路问题,也可能是目标页面自己的指令在拦路。canonical 指向他站、noindex 忘记移除、robots meta 与 robots.txt 打架,都会让蜘蛛抓到了却留不下东西。本文梳理几类常见的指令冲突,并给出投放前的自查顺序。

蜘蛛池知识

蜘蛛池页面上的 canonical 与 noindex:指令没对齐,投放容易白跑

蜘蛛池把 URL 投出去之后,蜘蛛能不能顺着通路走进目标页面,除了线路本身,还取决于目标页面自己给出的指令。canonical、noindex、robots meta 这些写在 HTML head 里的标签,看起来是细枝末节,但它们直接决定蜘蛛进来之后是继续抓、放弃抓,还是把注意力转移到别处。不少投放看起来“没反应”,问题其实出在这一层。

页面级指令为什么会干扰投放

蜘蛛池的作用是制造入口、增加 URL 被发现的概率。但发现只是第一步,蜘蛛真正抓取页面时,还会读取页面自身给出的信号。如果这些信号和投放意图相反,就会出现一种尴尬状态:日志里明明有蜘蛛来过,流量和状态却都停在原地。

三类常见的指令冲突

canonical 指向了别的地址

canonical 的作用是告诉搜索引擎“这个页面的正式版本在哪”。如果目标页面的 canonical 指向了另一个域名、另一个栏目,甚至一个打不开的地址,蜘蛛就会认为当前 URL 不是需要独立对待的版本,投放出来的入口价值被稀释。反过来,如果希望这个 URL 被当作独立落地页看待,canonical 应当指向自身。

批量建站时最容易出问题的是模板:一套模板被复制到多个域名上,canonical 却仍然是同一个写死的地址。上架前逐个核对不现实,但至少要抽查几种模板,确认 canonical 的取值逻辑跟实际部署一致。

noindex 没有清掉

测试阶段为了避免页面提前被公开,很多人会加 noindex,或者通过响应头下发 x-robots-tag。上线时忘了移除,就会出现“蜘蛛照常来抓,页面却不进入索引”的情况。此时监控数据里抓取量是正常的,很容易被误判为通路没问题,从而把排查方向带偏。

这类问题的麻烦之处在于:它不会报错,也不会让服务器返回异常状态码,页面就是普通的 200。

robots meta 与 robots.txt 规则打架

常见的误解是:robots.txt 里禁止抓取,可以用页面上的 noindex 来兜底。实际上,robots.txt 一旦禁止抓取,蜘蛛通常不会去读取页面内容,自然也就看不到 meta 指令,结果是 URL 有可能仍以其他方式被收录,页面却完全没有可控信号。

另一种反向情况是 robots.txt 放行、页面 meta 却写了 noindex,蜘蛛白跑一趟。两种规则应当分工明确:robots.txt 管“能不能抓”,meta 与响应头管“抓了之后怎么处理”,不要让它们互相代替。

投放前的自查顺序

  1. 看响应状态:目标 URL 是否稳定返回 200,是否有多跳 301 链。
  2. 看响应头:是否下发 x-robots-tag、canonical 之类的 HTTP 级指令,优先级通常高于 HTML 内的同名标签。
  3. 看 head 内容:meta robots、canonical、meta refresh 的具体取值。
  4. 看跳转链:JS 跳转、meta refresh 与 301 混用时,链条越长,中途被放弃的概率越高。
  5. 看模板批量情况:抽样检查不同模板生成的页面,确认没有写死的指令残留。

一点使用建议

  • 把页面级指令纳入上架检查项,和域名解析、证书一样当成基础配置。
  • 保留一份指令变更记录,改过 canonical 或移除过 noindex 的批次单独标注。
  • 批量扫描比逐页人工看更可靠,尤其是有多套模板并行的时候。
  • 发现抓取正常但毫无沉淀时,先怀疑指令层,再怀疑通路层。
蜘蛛池解决的是“让 URL 被看见”,页面指令解决的是“看见之后怎么处理”。这两件事分属不同环节,谁都不能替谁兜底。