先给结论:如果百度抓取到的静态 HTML 已经包含核心内容,而脚本执行后页面内容发生变化,应优先把静态响应视为收录基线,再单独排查脚本渲染造成的差异;但如果核心内容只存在于脚本渲染之后,静态 HTML 几乎是空壳,那么基线判断就不再成立,必须转向渲染可用性排查。判断走哪条路,不靠猜,而靠对比同一 URL 在“禁用脚本”和“执行脚本”两种条件下的输出。
静态响应与脚本渲染结果不同,常见有三种性质完全不同的情况。第一种是静态 HTML 已含标题、正文主体和主要链接,脚本只是补充评论、推荐或价格浮层,这类差异通常不影响收录基线。第二种是静态 HTML 只有框架和占位符,正文、产品参数、文章主体都靠脚本注入,这类差异会直接影响百度能否拿到有效内容。第三种是两边都有内容,但标题、主段落或 canonical 指向不一致,这类差异容易让百度选错版本。
区分方法很直接:用抓取工具或浏览器开发者工具分别查看“查看源代码”和“检查元素”的结果。前者接近静态响应,后者接近脚本执行后的 DOM。如果两者主正文段落数量、首屏标题、内链数量差别很大,就属于第二类或第三类,需要继续定位;如果只是按钮状态、弹窗、懒加载图片不同,通常不必把它当成收录阻塞的主因。
不要只凭一次抓取就下结论。可以按下面顺序收集证据,每一步都能排除一类原因:
robots.txt 是否屏蔽了脚本文件或数据接口。若脚本依赖的 JS、JSON 被禁止抓取,渲染结果自然与静态响应不同。需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除,它只影响抓取,不能替代 noindex 或删除处理。如果静态响应和渲染结果都正常,只是内容不同,那么下一步应统一内容基线;如果渲染结果正常但静态响应为空,且脚本文件可被抓取,那么问题更可能在渲染等待或资源加载顺序,而不是内容策略。
假设某商品页静态 HTML 只有“加载中”和导航,价格、库存、描述都由脚本请求接口后注入。此时关闭脚本抓取,正文为空;开启脚本抓取,正文完整。这个例子里,静态响应不能作为收录基线,因为百度即使抓到了 URL,也拿不到有效内容。下一步动作应是确认脚本文件和接口是否允许抓取,并检查渲染完成前是否过早返回空壳。动作的结果会决定后续:如果允许抓取后渲染结果完整,就继续观察该 URL 的抓取频次和索引状态;如果仍为空,则要把核心内容改为服务端输出或预渲染,而不是继续调整前端加载动画。
反过来的假设是:静态 HTML 已含完整文章,脚本只是把发布时间从“3 天前”改成具体日期。此时静态响应与渲染结果不同,但不影响收录基线。若因为这点差异去大改渲染方案,反而可能引入新的抓取问题。这个反例说明,“两边不同”本身不是行动信号,差异是否触及核心内容才是。
确认差异类型后,按下面顺序处理,并让每一步都有可观察的结果:
robots.txt 或服务端规则拦截。放行后重新抓取,看渲染结果是否包含正文。若仍不包含,转向服务端渲染或预渲染。最后要提醒的是,HTTPS 不保证安全无漏洞或排名,它只解决传输层的一部分问题;不同搜索引擎对脚本渲染的支持情况须分别核查。对百度而言,最稳妥的下一步始终是:先让静态响应包含核心内容,再让脚本渲染结果与之一致,而不是反过来依赖渲染去补静态缺失。