先给结论:当批量查询里同一批 URL 的静态响应显示“未收录”或内容缺失,而浏览器执行脚本后能看到完整内容时,差异通常出在“百度拿到的是哪一版 HTML”,而不是查询工具本身出错。定位顺序应是:先确认两版响应的字节差异,再判断差异来自服务端分流、前端注入还是抓取端执行能力,最后才决定是改渲染方式还是改提交策略。
两个解释都成立,但代价完全不同。
解释一:服务端按 UA 或请求头分流。服务器识别到非浏览器请求时,返回的是精简版或占位版 HTML,正文由脚本在客户端补齐。这种情况下,百度抓到的静态响应里根本没有目标内容,脚本再完整也无用。
解释二:服务端返回了完整 HTML,但脚本负责把内容插入 DOM。此时静态响应里可能只有骨架和一段 JSON,正文靠脚本渲染。百度是否能拿到渲染后结果,取决于它对页面的处理方式,而不是你的查询工具。
区分这两者的关键证据是:用同一 URL、同一时间,分别取“原始 HTML 源码”和“浏览器执行后的 DOM”,对比正文文本是否出现在源码里。如果源码里完全没有,属于解释一;如果源码里有但位置分散在脚本变量中,属于解释二。
不要一次改多个变量。假设你有一批 200 条 URL,先抽 5 条做对照:
这个动作的结果会直接决定下一步:若静态响应已含正文,问题更可能在抓取或索引环节;若静态响应不含正文,问题在渲染环节,应先改服务端输出或渲染策略,而不是反复提交。
证据一:源码中的文本位置。在静态响应里搜索正文中的一段独特文字。若搜不到,偏向解释一;若能在 <script> 内找到,偏向解释二。
证据二:请求头与响应头。检查服务端是否根据 User-Agent、Accept 或 Cookie 返回不同内容。若同一 URL 在不同请求头下返回的正文长度差异明显,说明存在分流。
证据三:脚本执行前后的 DOM 对比。若执行后正文才出现,而执行前只有空容器,说明内容由脚本注入。此时要判断百度是否执行了该脚本,不能仅凭批量查询的静态结果下结论。
这三类证据里,只要有一类指向服务端分流,就应先修服务端,而不是先怀疑索引。反过来,如果三类证据都指向脚本注入,才进入渲染方案的选择。
做法 A:改为服务端渲染或静态输出正文。适用于内容对收录敏感、且团队能改模板或构建流程的情况。代价是改动量较大,可能影响现有前端交互。动作上,可以先对 5 条 URL 做静态输出试点,再用批量查询观察静态响应里是否出现正文。若试点后静态响应仍无正文,说明改动未生效,应回查构建或缓存,而不是继续扩大范围。
做法 B:保留脚本渲染,依赖抓取端执行。适用于内容更新频繁、前端框架已固定、且无法快速改服务端的情况。代价是结果不稳定:同一批 URL 里,部分可能被处理,部分可能没有。此时批量查询的价值在于发现“哪些 URL 的静态响应与渲染结果不一致”,而不是直接判定收录失败。
选择条件可以简化为一句:如果静态响应里完全没有正文,而业务又依赖这批 URL 被收录,优先选 A;如果只是个别页面且内容非核心,可以暂选 B,但要用批量查询持续观察差异是否扩大。
假设某批 50 条 URL 中,有 12 条在静态响应里正文长度为 0,但浏览器执行后正文完整。先抽 3 条检查源码,发现正文文字只出现在脚本变量中,且请求头变化不影响返回内容。这指向解释二。下一步不是直接提交这 12 条,而是先确认百度是否执行了脚本;若无法确认,则对这 3 条做服务端输出试点,再对比试点前后的静态响应。若试点后静态响应出现正文,说明差异来自渲染方式,可把改动扩展到其余 9 条;若仍未出现,说明还有缓存或分流因素,需要回到证据一重新排查。
这个例子的数字仅用于说明比较方法,不代表任何真实站点数据。批量查询在这里的作用是缩小范围,而不是给出最终收录结论。