同一URL在不同设备或登录状态下返回不同内容时,百度收录规则下最稳妥的做法是先固定一个可复现的请求条件,再对照另一条件,而不是直接判断哪份内容会被收录。缺少日志、索引接口或后台权限时,仍可执行的最小动作是:用同一URL分别记录未登录移动端与已登录桌面端的可见文本、状态码和跳转链,再检查差异是否由服务端主动返回。若差异仅来自前端渲染或本地缓存,收录结论不能从这次对照中推出。
百度抓取通常以未登录、无个性化Cookie的客户端为基准,但这不是绝对规则,站点需要根据自己的服务端逻辑判断。若站点对未登录用户返回精简页、对登录用户返回完整页,那么默认抓取看到的是精简页;反之,若未登录返回完整页、登录后因权限隐藏部分模块,则默认抓取看到的是完整页。两种情况下,收录判断的起点完全不同。
可执行动作是:在无痕窗口或清除Cookie后的浏览器中访问目标URL,记录HTTP状态码、最终URL、页面标题和正文首段;再在已登录状态重复同一动作。若两次的状态码不同,例如一次200、一次302,优先处理跳转链,因为百度收录规则下302指向的目标才是可能被索引的地址。若状态码相同但正文不同,进入下一步对照。
对照结果一般落在两类:服务端根据User-Agent、Cookie或登录态返回不同HTML;或者服务端返回同一HTML,差异由JavaScript、本地存储或缓存造成。两类选择的处理方向不同。
curl或类似工具分别带移动端User-Agent和桌面端User-Agent请求同一URL,比较响应体。若响应体不同,说明差异在服务端。此时应确认百度默认抓取使用的User-Agent会拿到哪一份,并检查该份内容是否包含核心正文。若默认抓取拿到的是空壳或提示页,收录结果通常会偏离预期。选择依据可以简化为一条:先看响应体是否不同,再看初始HTML是否包含核心文本。前者决定是否需要改服务端逻辑,后者决定是否需要改渲染方式。
没有日志、没有索引查询权限、没有服务端配置权限时,仍可做三件事,并明确各自不能推出的结论。
robots.txt是否对两种条件返回不同规则。若未登录请求被允许、登录请求被禁止,或反之,需要先统一抓取路径。但robots.txt的抓取限制不等于可靠的索引移除,已索引的URL仍可能因其他信号保留在结果中。完成上述动作后,下一步取决于差异位置:差异在服务端响应体,优先修服务端;差异在脚本注入,优先考虑服务端渲染或静态化;差异只在缓存,清除缓存后复测即可,不必改动收录相关配置。
即使两种条件返回不同内容,也不能直接推出“百度会收录其中一份”或“百度不会收录任何一份”。合理原因至少包括:百度可能尚未抓取该URL;可能抓取了但未索引;可能索引的是历史版本;可能因站点地图或内链信号选择了另一地址。站点地图不保证收录,提交与否只影响发现路径,不决定索引结果。
另一个例外是登录态内容。若核心内容只在登录后可见,而未登录返回登录提示页,那么百度默认抓取看到的是提示页。此时不应通过伪装User-Agent向百度返回登录后内容,而应把可公开的核心信息放在未登录可访问的HTML中。若业务上无法公开,则接受该部分不被收录,而不是用不一致的返回制造收录假象。
假设一个短例子:某页面未登录返回标题“产品介绍”加一段简介,登录后返回同一标题加完整参数表。两种条件下状态码均为200。对照后确认默认抓取拿到简介版,完整参数表只在登录后出现。此时可执行的调整是把参数表的关键字段以静态文本形式加入未登录HTML,而不是把登录后页面直接暴露。调整后复测同一URL的未登录响应体,若核心字段已出现,再观察后续抓取与索引变化;若未出现,说明改动未生效或缓存未更新,应回到响应体对照这一步,而不是继续猜测收录规则。