简短回答:canonical 不是抓取指令,只是「内容归一」的提示。搜索蜘蛛在入口页看到指向目标 URL 的 canonical,不一定会因此去抓目标 URL。目标地址能不能被发现,主要还是看页面上有没有可抓取的链接、以及目标 URL 本身是否允许抓取。
先分清 canonical 和链接的区别
很多人把 canonical 当成入口页的「指路牌」,这是一个常见的误解。canonical 回答的是「这一页和哪一页属于同一内容、应该优先收录哪个版本」;而正文里的 a 标签回答的是「这里还有一个可访问的地址」。搜索引擎处理这两类信号的方式并不一样。
- 普通链接:属于 URL 发现路径,在抓取预算和 robots 规则允许时,蜘蛛会顺着抓。
- canonical:属于索引阶段的归纳信号,通常在页面被抓取之后才被评估,本身不承担「发现新 URL」的职责。
- 如果入口页正文一条链接都没有,只写了一个 canonical,目标 URL 被发现的机会会明显变小。
蜘蛛看到 canonical 之后,一般会怎么处理
结果取决于上下文,很难一概而论。比较常见的几种情况:
- 同一站点内、内容确实高度相似:可能把两个版本归并到一个地址上。
- 跨域指向:搜索引擎通常只把它当建议,很多情况下会直接忽略,尤其是两个域名之间看不出关联时。
- 入口页和 canonical 指向的页面内容完全不同:容易被判为错误的 canonical,反过来影响入口页自身的索引状态。
- canonical 指向 404、需要登录或被 robots.txt 拦截的地址:这个提示基本无效,还可能带来额外的抓取异常。
把它当「指路」用,容易踩的几个坑
- 入口页只是一段聚合文字,canonical 却直接指向内容无关的目标 URL,信号自相矛盾。
- 同一个入口页上写多个 canonical,或者 canonical 与 noindex、hreflang 混着用,蜘蛛可能一个都不采信。
- 频繁更换 canonical 指向,相当于反复推翻自己之前的声明,会削弱整站的信号可信度。
- 目标 URL 本身返回 404、5xx 或被 robots.txt 屏蔽,canonical 指过去也没有意义。
想让目标 URL 被发现,更靠得住的做法
- 在入口页正文里用正常的 a 标签写出目标地址,锚文本尽量说清这一页是什么。
- 保证入口页本身可被抓取:不被 robots 屏蔽、返回 200、正文不是空壳或软 404。
- 把 sitemap 或站长平台的提交入口当补充手段,而不是唯一的发现路径。
- 通过服务器日志核对蜘蛛实际访问了哪些 URL,确认入口页是否真的被爬过。
一个简单的自查清单
- 入口页里有没有至少一条真实的 a 标签指向目标 URL?
- canonical 指向的地址能不能正常打开、是否允许抓取?
- 入口页和目标 URL 的内容差异,是否大到让人一眼看出「不是同一个页面」?
- 服务端日志里,蜘蛛最近有没有访问过入口页和目标 URL?
- 如果只依赖 canonical、不放链接,是否还有 sitemap、内链等其他兜底路径?
canonical 解决的是「收录哪一个版本」,不是「发现新地址」。要不要用、怎么用,建议先回到它原本的职责上想清楚。