投放蜘蛛池前,很多人会检查 robots、检查状态码、检查链接有没有加 nofollow,却漏掉一个更隐蔽的东西:canonical 标签。它不会拦住搜索蜘蛛抓取,但会改变这次抓取的结果被归到哪个 URL 上。如果目标页的 canonical 指向了别处,你投的那层入口页可能白忙一场。
先说清楚 canonical 是做什么的
canonical 是页面里的一段声明,用来告诉搜索引擎“这一组相似页面里,哪个是主版本”。它是提示,不是指令:搜索引擎会参考,也可能不采纳。它和 301 跳转也不一样,301 会把用户和蜘蛛都带到新地址,canonical 只是声明,页面本身仍然正常返回 200。
三种情况,处理方式完全不同
一、自指 canonical:正常
页面 canonical 指向自己,这是最常见也最安全的写法。这类 URL 直接放进投放清单没有问题,不需要额外处理。
二、canonical 指向同站另一个 URL:先判断意图
常见于筛选参数页、分页、带追踪参数的地址。运营方希望权重集中到主版本,于是把变体页都指向主页面。这类页面投放下去,搜索蜘蛛会抓,但抓取结果可能被归到主页面,变体页自己不进入索引。
如果你的目的正是“让蜘蛛发现主版本”,那投放变体页也算间接有用;如果目标是让变体页本身被收录,就得先把 canonical 改掉,否则投了大概率也不收录。
判断标准很简单:你希望搜索结果显示哪一个 URL,就把投放清单和 canonical 对齐到同一个 URL 上。
三、canonical 指向站外域名:基本等于白投
这种情况多出现在采集站、模板站,或者从别处复制页面时源码没清干净。页面把主版本声明给了别人的域名,搜索引擎很可能把你这页当作重复内容处理。投放前必须先把 canonical 改成自指或者删掉,否则入口页再多、抓取再频繁,也很难留下有效结果。
投放前怎么快速排查
- 随机抽一批目标 URL,查看源码,搜索 rel="canonical",看它指向哪里。
- 注意协议和域名是否一致:http 与 https、带 www 与不带 www,都可能被当成不同地址。
- 确认 canonical 指向的地址能否正常访问、是否返回 200。指向一个 404 或 301 的地址,等于把信号送进死胡同。
- 清单量大时可以用脚本批量抓取源码提取标签,比人工逐个点开快得多。
- 抽查完成后,把 canonical 与目标 URL 不一致的地址单独列出来,先修再投。
几个容易踩的误区
- 以为 canonical 会自动跳转。它不会。用户和蜘蛛访问的仍是原地址,只是索引归属可能被合并。
- 以为写了 canonical 就一定生效。搜索引擎会综合内容相似度、内链、sitemap 等信号判断,canonical 只是其中一个参考。
- 写相对路径又写错层级。相对路径解析出错时指向会很混乱,建议统一写完整的绝对地址。
- canonical 和 hreflang 打架。多语言站点里两个标签要各司其职,不要把不同语言版本互相 canonical。
回到投放本身
蜘蛛池解决的是“让搜索蜘蛛更快发现这个地址”,canonical 解决的是“这个地址最终代表什么内容”。两件事不在一个层面。投放前把 canonical 理顺,等于确认了你希望被收录的那个 URL 就是清单里的 URL;顺序反了,入口页投得越多,无效抓取也越多。
如果站点规模大、URL 结构复杂,建议把 canonical 自检做成投放前的固定动作,而不是等出问题之后再回头逐个排查。