确认动态页面在搜索引擎索引中的可见内容,核心方法是:用“禁JS抓取”和“执行JS渲染”两种方式分别获取页面,对比两次结果中正文、链接、标题的差异。如果禁JS时正文为空或只有加载占位符,说明可见内容依赖客户端渲染;如果执行JS后正文出现但与用户所见不一致,则可能是渲染超时或接口被拦截。下面用一个假设例子说明完整步骤。
假设某项目有一个商品列表页,URL 形如 /list?cat=1,页面打开后先显示“加载中”,再由 JavaScript 请求接口填充商品名称、价格和分页链接。要确认搜索引擎能索引到什么,不能只看浏览器里最终看到的内容,而要看抓取工具拿到的原始响应。
第一步,用 curl 或抓取工具直接请求该 URL,不执行 JavaScript,保存为 A 版本。第二步,用支持渲染的工具请求同一 URL,等待网络空闲后保存 DOM,作为 B 版本。第三步,分别提取标题、正文文本、可点击链接,逐项对比。
判断结果时要注意:两次结果不同,不代表搜索引擎一定不索引。它说明内容是否在初始 HTML 中可见,以及渲染是否稳定。不同搜索引擎对 JavaScript 的抓取和渲染支持程度不同,必须分别用各自提供的抓取测试方式核查,不能用一个引擎的结果推断另一个。
看到 B 版本有内容,只证明“渲染后可见”,不等于“已被索引”。还需要检查渲染结果是否被当作页面正文处理。常见检查项包括:
body 内且未被 display:none 隐藏。隐藏文本可能被忽略。iframe 引入。跨域 iframe 中的文本通常不会被当作主页面正文。如果渲染后正文出现,但页面标题、描述仍由前端异步写入,也要单独确认这些字段在渲染后是否正确。标题和描述影响索引展示,但它们的生成方式与正文可见性是两件事。
有些项目发现动态页没被索引,第一反应是改 robots.txt 或补站点地图。这里需要分清:robots.txt 的抓取限制不等于可靠的索引移除。被禁止抓取的 URL 仍可能因外部链接被索引,只是没有抓取内容。反过来,放开抓取也不保证页面一定被索引。
站点地图的作用是提示可抓取 URL,不保证收录。对于动态页面,站点地图里写的是带参数的 URL,还是静态化后的 URL,会影响抓取工具实际请求的地址。应确保站点地图中的 URL 与页面实际返回内容的 URL 一致,避免重定向链或参数顺序不同导致同一内容多个地址。
针对“初始 HTML 无正文、依赖 JS 渲染”的动态页,可以按以下顺序处理,每步都保留前后对比记录:
<a href>,而不是仅用按钮加 JS 事件。判断结果:禁 JS 抓取时能发现指向后续页面的链接。常见错误是只验证浏览器里的最终效果,不验证抓取工具拿到的初始响应和渲染快照。另一个错误是把“已提交站点地图”当成“已索引”,忽略页面本身是否需要 JS 才能看到正文。
下一步,选取一个动态页面,分别保存禁 JS 响应和渲染后 DOM,对比正文与链接差异。若差异集中在正文,优先处理服务端输出;若差异集中在链接,优先把导航和分页改为可抓取的 <a> 链接。