结论先行:同一URL在服务器端返回多套HTML时,想让百度抓到“你希望被收录的那一版”,不能只看浏览器里看到的内容,而要对无Cookie、无登录态、固定UA的请求做逐字节对照。这个结论只在“差异由服务端渲染分支产生”时成立;如果差异来自前端JS执行、CDN边缘缓存或A/B分流,对照方法需要换一种,否则会得出错误判断。
用同一URL分别请求三次:无Cookie、带登录Cookie、带移动端UA。比较三份响应体的Content-Length与正文首屏文本。若三份HTML的差异集中在头部、导航或列表项,且无Cookie版与登录版正文不同,说明是服务端依据会话或UA分支渲染。若三份HTML完全一致,差异只出现在浏览器渲染后,则问题在客户端,百度抓取到的仍是同一份HTML。这个区分决定了后续是改渲染逻辑还是查缓存。
完成一次对照后,记录哪一版包含目标正文、哪一版被noindex或canonical指向别处。如果无Cookie版缺少目标正文或带有指向登录页的canonical,百度很可能按无Cookie版处理,此时“加快收录”的动作应优先修复该分支,而不是提交更多URL。
假设你发现无Cookie请求返回完整正文,登录请求返回精简版,于是判断百度能抓到完整版。但如果站点在边缘节点对无Cookie请求做了缓存,而该缓存恰好是登录用户触发生成的精简版,那么无Cookie请求拿到的也可能是精简版。此时“无Cookie等于完整版”不成立。判断依据是:同一URL换不同出口IP请求,若响应体在节点间不一致,说明差异来自缓存而非渲染分支。这种情况下,先清缓存或调整缓存键,再重新对照,否则后续所有收录判断都建立在错误样本上。
确定是服务端分支问题后,把无Cookie分支的HTML调整为包含目标正文,并确保其canonical指向自身;登录分支可保留精简版,但不要让它成为缓存默认值。改完后用同一组固定变量重新请求,确认无Cookie版正文与目标一致。若一致,再提交该URL并观察抓取记录中的响应体是否与对照结果吻合。若抓取记录仍显示精简版,检查是否是CDN缓存未刷新或UA判断逻辑覆盖了无Cookie分支。注意:提交站点地图或使用抓取诊断不保证收录,只用于验证抓取到的版本是否正确。
这套对照只适用于服务端返回差异的情况。若差异由前端JS在客户端替换内容产生,百度抓取到的初始HTML可能不含目标文本,此时需要检查渲染后的DOM是否可被抓取,而不是继续对照HTTP响应。若差异由A/B测试工具在客户端注入,同样不适用。另外,robots.txt限制抓取某路径不等于该URL会被移除索引,两者不能互相替代。HTTPS也不解决内容分支问题。先判断差异层级,再选择对照方式,才能避免把客户端问题当成服务端问题处理。