动态页面确认可见内容,不能只看浏览器里显示了什么,而要看搜索引擎抓取到的HTML里有什么。浏览器执行JavaScript后渲染出的文字,可能并没有出现在初始HTML中;抓取工具是否执行脚本、执行到什么程度,直接决定这部分内容能否被索引。因此,判断动态内容是否可见,核心是比对“原始响应”和“渲染结果”两个版本。
很多人用浏览器打开页面,看到商品价格、评论、分页列表都正常显示,就认为这些内容已经对搜索引擎可见。问题在于,浏览器会执行JavaScript并请求接口,把数据填充进页面;而抓取工具拿到的第一份HTML可能只是一个空壳,里面只有<div id="app"></div>之类的挂载点。如果抓取阶段不执行脚本,或者执行超时、接口被robots.txt挡住,这部分文字就不存在于被抓取的文档中。
另一个误解是把robots.txt当成内容管理工具。robots.txt只能限制抓取,不能可靠地移除已经收录的页面,也不能保证被限制的接口内容不会以其他方式出现。它和“内容是否可见”是两个层面的问题。
在时间和人手有限的情况下,可以按下面顺序做一次快速核查,优先处理影响最大的模板页:
完成这五步后,你会得到一张清单:哪些内容在原始HTML中、哪些只在渲染后出现、哪些接口被限制。这张清单就是后续处理的依据。
如果关键文字在原始HTML中就能找到,说明这部分内容不依赖脚本,可见性风险较低。如果只在渲染后出现,需要进一步区分情况:
还要注意,不同搜索引擎对JavaScript渲染的支持程度和执行时机并不一致,必须分别核查,不能用一个引擎的结果推断另一个。站点地图提交、HTTPS部署、页面速度优化都不会自动解决动态内容不可见的问题,它们和这个问题的因果关系很弱。
确认问题后,处理方式取决于内容对业务的重要程度和实现成本:
对核心内容,比如商品详情、文章正文、分类列表,优先考虑服务端渲染或预渲染,让关键文字直接出现在原始HTML中。这样不依赖抓取工具的脚本执行能力,稳定性最高。对次要的交互内容,比如筛选条件、用户评论的实时更新,可以保留客户端渲染,但要确保接口不被robots.txt屏蔽,并给渲染留出足够时间。
如果暂时无法改造渲染方式,可以先确认接口可抓取、脚本无报错、渲染等待时间合理,再通过抓取测试反复验证。每次改动后重新比对原始HTML和渲染结果,确认关键文字是否进入被抓取的文档。
下一步,挑一个流量最高或转化最重要的动态页面模板,按上面的步骤做一次完整核查,把“原始HTML中是否存在关键文字”作为第一项检查结果记录下来,再决定是否投入改造。