先给结论:当同一网址的静态响应里没有目标内容、脚本渲染后才出现,不要立刻判定“没收录”或“被降权”。第一步应当固定一个可复现的渲染条件,把静态HTML、渲染后DOM、百度实际抓取结果三者分开记录,再判断差异来自服务端输出、脚本执行还是抓取策略。只有确认差异层级后,才决定是保留现状、改写输出方式,还是退出这条排查路径。
很多排查失败,是因为把不同层的结果混在一张表里。建议至少记录三类证据:
如果静态响应缺少正文,而渲染后DOM完整,差异属于输出方式差异;如果两者都完整,但百度抓取到的版本仍为空,差异更可能属于抓取与执行差异;如果渲染后DOM也不稳定,时而完整时而缺失,则先处理脚本执行时序,不要急着改收录策略。
三种做法都成立,但适用条件不同。
当内容本身依赖用户交互、个性化数据或必须实时计算,且静态输出完整正文的成本很高时,可以保留脚本渲染。代价是:你需要额外验证百度抓取时是否执行脚本、执行到什么程度。若抓取诊断长期只拿到空壳,保留就意味着接受这部分内容不被稳定读取的风险。
当目标内容对收录和摘要很重要,且它不依赖用户交互时,优先让静态响应就包含正文。常见动作是把关键文本改为服务端渲染,或在构建阶段生成预渲染HTML。这个动作的结果会直接影响下一步:如果改完后静态响应已含正文,后续排查就应从“脚本是否执行”转向“抓取频次与索引状态”;如果静态响应仍为空,说明问题在模板或数据获取层,而不是渲染层。
如果差异只出现在次要模块,比如推荐位、评论分页或非核心装饰内容,而核心正文在静态响应中已完整,那么继续追查脚本渲染差异的收益很低。此时应退出该路径,把精力放在抓取日志和索引状态上。退出不是放弃,而是承认这部分差异不影响主要判断。
假设某文章页的静态响应只有导航和页脚,正文由前端脚本请求接口后插入。你做了两件事:第一,关闭脚本请求该网址,确认正文确实不在原始HTML中;第二,在允许脚本的环境中等待接口返回后保存DOM,确认正文存在。此时还不能得出“百度不收录”的结论,因为百度抓取时可能执行脚本,也可能不执行。
下一步动作应是查看抓取诊断中百度拿到的版本。若百度拿到的版本同样只有导航和页脚,那么把正文改为服务端输出就是合理选择;改完后重新请求静态响应,若正文出现,再观察抓取诊断是否更新。若百度拿到的版本已包含正文,则差异不在输出层,应转向检查索引状态和查询口径。这个顺序能避免在错误层级上反复修改。
请求量、抓取量或某项统计归零,不能单独证明处理正确。它还可能来自日志采样、抓取频次波动、URL参数变化或统计口径调整。同理,robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。这些事实只说明:不要把某一层的结果直接当成另一层的结论。
另外,静态响应与渲染结果不同,并不必然意味着百度不支持脚本。更稳妥的做法是分别核查:百度实际抓取到的是哪个版本、该版本是否包含目标内容、索引状态是否与抓取版本一致。只有把这三项对齐,才能决定保留、改写还是退出。