要取得可复查的canonical状态证据,核心是同时记录三样东西:页面实际输出的canonical值、该URL被搜索引擎抓取与选择的结果、以及你做出判断时的原始时间点。只看HTML源码里写了什么,不足以证明搜索引擎采用了哪个版本;只看搜索结果展示的URL,也不足以证明canonical是否被处理。可复查意味着别人拿着你留下的记录,能在相同条件下重复检查并得到相近结论。
canonical标签是页面里的一条建议,不是强制指令。搜索引擎会把它和重定向、内部链接、站点地图、内容相似度等因素放在一起判断,最终可能采纳你指定的URL,也可能选择另一个它认为更合适的版本。因此“我写了canonical”和“canonical生效了”是两件事,证据必须覆盖这两层。
另一个误解是认为查看页面源代码就完成了取证。源码只能证明服务器返回了什么,不能证明爬虫看到了什么、更不能证明索引里选了谁。如果页面由JavaScript渲染canonical,源码和渲染后的DOM还可能不一致,这时只截源码会得到错误结论。
假设你有一个商品页A,它声明canonical指向B,但你不确定搜索引擎选了谁。可以按下面顺序做,并逐步留下记录。
curl -sI https://example.com/a 只看响应头,curl -s https://example.com/a -o a.html 保存正文。把执行时间和命令一起记下来。判断标准不是“我找到了canonical标签”,而是“我能解释搜索引擎为什么可能选这个URL”。如果响应层、渲染层、索引层三者指向一致,证据就比较完整;如果三者矛盾,矛盾本身就是线索,说明问题出在某一层,而不是canonical写错了。
还要注意区分“可能原因”和“已经定位的原因”。比如搜索结果展示的是A而不是B,可能原因包括canonical未被采纳、B不可访问、B被robots.txt限制抓取、或引擎认为A更合适。在拿到索引层证据之前,不要断言是其中某一个。robots.txt的抓取限制不等于可靠的索引移除,被限制抓取的URL仍可能出现在结果中,所以它不能作为canonical失效的确定解释。
站点地图也不保证收录,它只能作为发现URL的线索,不能证明某个URL被选为规范版本。HTTPS同样不保证安全无漏洞或排名,它和canonical选择没有直接因果关系,不必把它当作取证项。
可复查的前提是条件一致。记录时至少要写清:抓取工具和版本、是否执行JavaScript、请求时使用的User-Agent、是否登录、地理位置或语言设置、以及抓取的具体时间。少了这些,别人复现时可能得到不同结果,证据就失去可比性。
如果页面内容会随登录状态、库存或促销变化,还要记录抓取时页面处于哪种状态。canonical指向可能随这些条件改变,单次抓取只能代表那一刻。
下一步:选一个你怀疑canonical未生效的URL,按上面的步骤完整跑一遍,把响应层、渲染层、索引层三份记录放在同一个文档里,标注时间。之后每隔一段固定时间用相同命令复查一次,观察哪一层先发生变化。