canonical标签本身只表达“这一组重复或近似页面中,哪个URL是首选”,它既不阻止抓取,也不保证被索引。要区分访问抓取与索引结果,应把日志里的抓取记录、页面返回内容中的canonical声明、以及搜索结果的收录状态分开核对:抓取是爬虫来过并取走内容,索引是搜索引擎把某个URL作为可展示结果保存下来。canonical标签影响的是后者中的URL选择,而不是前者是否发生。
判断某个URL处于什么状态,至少要看三类互相独立的信号:
site:类查询、URL检查类工具或站长平台提供的索引状态查看该URL是否被收录。收录状态可能滞后,也可能因质量判断被排除。<link rel="canonical">指向哪个URL,以及该声明是否与页面自身URL一致、是否被搜索引擎实际采用。三者不一致时,问题往往出在“抓取了A,但canonical指向B,而索引里出现的是C”。只有把这三列并排比对,才能定位是抓取问题、声明问题还是索引选择问题。
如果已有页面或项目,可以按下面的步骤做一次可执行的核对:
curl -I或浏览器开发者工具查看该URL返回的HTTP头,确认是否有重定向、是否返回200、是否有X-Robots-Tag限制索引。<link rel="canonical">,记录它指向的绝对URL,并与当前URL逐字符比较,包括协议、主机名、路径、末尾斜杠和大小写。判断规则可以这样用:日志有200记录、页面canonical自指、索引中出现的也是该URL,说明抓取与索引一致;日志有200记录但索引中显示的是另一个URL,且那个URL正是canonical目标,说明canonical声明被采用,属于正常的URL归并;日志有200记录、canonical自指,但索引中查不到,则更可能是索引层因质量、重复或抓取预算等原因未收录,而不是canonical阻止了抓取。
下面几种情况容易把抓取和索引混为一谈:
noindex类指令,并确认该页面能被抓取到,否则指令读不到。当多个解释同时存在时,不要只凭一个现象下结论。例如“日志里没有该URL”可能是从未被抓取,也可能是被抓取但日志未保留或已被轮转覆盖,需要结合时间范围和日志策略判断。
改动canonical或抓取配置后,可以观察这些信号:目标URL在日志中持续出现200响应;页面返回的canonical与预期首选URL一致;索引状态查询中重复URL逐步归并到首选URL;搜索结果展示的URL与canonical目标一致。若一段时间后索引中仍出现非首选URL,应优先检查canonical目标是否可抓取、是否被其他指令冲突,以及两个URL内容是否差异过大导致搜索引擎不采纳归并。
下一步可以选一个重复URL组,按上面的对照表记录抓取、canonical与索引三列数据,再决定是调整canonical声明、修正抓取限制,还是处理索引层的质量问题。