先别急着改配置。把同一个URL在“未登录的移动端”和“已登录的桌面端”各取一次响应,如果正文、canonical、跳转目标三项里任意一项不同,你面对的就不是单纯缓存问题,而是规范化信号被分成了两套。此时正确动作是先把两套响应各自存档,再判断哪一套才是你希望被当作规范版本的信号,而不是直接删掉其中一套。
对照的前提是两次请求只有“设备或登录状态”这一个变量不同。做法是:用同一个URL、同一时间窗口、同一个网络出口,分别发起一次无登录态的移动UA请求和一次带登录态的桌面请求,把完整响应头、状态码、最终落地URL、正文首屏文本、canonical标签、hreflang标签全部原样保存。不要只截图页面,截图会漏掉响应头和跳转链。
保存后先比状态码和最终URL。如果未登录移动端返回200,登录桌面端返回302到另一个地址,那么两套规范化信号已经分叉。这个分叉本身不是错误,错误在于你只看了其中一套就下结论。
未登录版canonical指向A,登录版canonical指向B。先确认B是不是登录后才存在的个性化地址。如果是,那么登录态的canonical不应被当作规范信号,因为它只对已登录用户成立。可执行动作:在服务端对已登录请求也输出指向A的canonical,或在登录态页面加noindex并确认该状态不会被外部链接引用。做完后重新取一次登录态响应,确认canonical已回到A;若没变,说明输出逻辑在别的层被覆盖,下一步要查模板或中间件,而不是继续改页面。
这种情况常见于按设备返回精简版或完整版正文。canonical相同意味着你告诉处理方这是同一页,但实际正文不同。取舍点在于:移动精简版是否包含与完整版等价的核心信息。若等价,保留分叉可接受;若移动版缺失关键正文,那么被当作规范版本时可能只看到精简内容。动作:把移动版缺失的段落补回,或让移动版也输出完整正文再用CSS控制展示。补完后对比两次正文的纯文本长度和关键段落是否一致,不一致就说明还有一层设备判断没走到。
未登录移动端留在原URL,登录桌面端跳到带会话参数的地址。会话参数地址不应成为规范目标。动作:确认跳转是否由登录逻辑而非规范化逻辑触发;若是,保留跳转但在目标页输出指向原URL的canonical。改完后用未登录状态访问目标页,确认它不会把未登录用户也带进登录流程,否则你只是把分叉从一处挪到了另一处。
把两次取样整理成一张表,每行一个信号,每列一个状态,只填“相同/不同/缺失”。信号至少包括:状态码、最终URL、canonical、hreflang、正文首段、分页链接、站点地图中出现的URL。填完后看哪一列的不同项最多,优先修正差异集中的那一侧。这个顺序的依据是:差异越集中,越可能由同一个输出条件造成,改一处就能收敛多个信号。
假设一个例子:未登录移动端在站点地图里出现的是不带参数的URL,登录桌面端页面里分页链接带上了会话参数。此时差异集中在登录态一侧,优先处理登录态的分页链接输出,而不是去改站点地图。改完后重新取登录态响应,确认分页链接不再带会话参数;若仍带,说明参数是在更早的环节注入的,下一步应查请求进入应用前的重写规则。
改完配置后,抓取量或某状态请求量下降,不能单独证明你处理正确,因为设备判断、缓存分层、登录过期都可能造成同样现象。可复查的证据是:同一组取样条件重跑后,两次响应的canonical、最终URL、正文主体三项是否已经对齐。对齐了才进入下一步——检查站点地图和内部链接是否都指向你选定的规范版本。站点地图不保证收录,它只表达你的偏好;robots.txt的抓取限制也不等于可靠的索引移除。若你还需要处理已存在的另一版本,应分别核查不同搜索引擎对移除工具的支持情况,而不是假设一处配置对所有入口都生效。
最后确认一件事:你选定的规范版本,在未登录和已登录两种状态下都能被稳定访问,且返回同一套规范化信号。做不到这一点,就先不要提交任何移除或合并请求,否则你只是在两个不稳定状态之间来回切换。