确认动态页面可见内容,核心是比较“抓取工具拿到的HTML”和“浏览器渲染后的DOM”。如果两者不一致,就要判断内容是由服务端输出、客户端JavaScript生成,还是被交互操作后才出现;再据此选择服务端渲染或预渲染方案。
不要只看浏览器里看到了什么。准备阶段要留下三份证据:
判断标准很直接:原始HTML中能找到目标内容,说明服务端已经输出;只有渲染后DOM中才有,说明内容依赖客户端执行。若两者都有但文字不同,要检查是否存在接口返回差异、A/B测试或地区化逻辑。
适合内容必须在首次响应中就可见的页面,例如商品详情、文章正文、分类导航。做法是在服务端把数据拼进HTML,再返回给抓取工具和用户。优点是减少对脚本执行的依赖,抓取工具拿到响应即可解析。代价是服务端压力、缓存设计和开发改造成本会上升。适用条件是内容相对稳定、需要被直接解析,且团队能维护服务端模板或渲染服务。
适合已有前端框架、短期无法改造服务端,但页面内容对抓取有意义的情况。预渲染是在构建或请求时先生成静态HTML;动态渲染是识别抓取工具后返回渲染后的版本。两者都要保证返回内容与用户看到的主体内容一致。适用条件是页面数量可控、内容更新频率不高,且能接受额外一层渲染服务。若页面强依赖登录、实时库存或复杂交互,预渲染可能只能覆盖部分内容,需要单独列出哪些区域必须可见。
最关键的一步是固定一个目标URL,分别保存原始HTML和渲染后DOM,逐段对比标题、正文、链接和结构化数据。不要用首页或列表页代替详情页,也不要用一个页面的结果推断全站。
验证时逐项核对:
<a>标签存在,而不是仅靠点击事件。假设一个页面在原始HTML中只有“加载中”,渲染后出现商品价格和描述,那么抓取工具若不执行脚本,就看不到价格。此时应优先让价格和描述进入服务端输出;如果暂时做不到,再评估预渲染是否覆盖该区域。若原始HTML已有价格,渲染后反而被脚本清空,则要检查前端初始化逻辑,而不是继续加预渲染。
页面改版、接口调整、前端框架升级后,可见内容可能再次变化。维护时保留一组代表性URL,覆盖详情页、列表页和含交互筛选的页面,定期对比原始HTML与渲染后DOM。每次发布后抽查目标文字、主要链接和状态码,发现差异先定位是服务端输出变化还是客户端脚本变化,再决定改模板、改预渲染规则还是调整抓取配置。不同搜索引擎对脚本执行的支持情况须分别核查,不能用一个工具的结果代替全部判断。
下一步:选一个动态页面,保存原始HTML和渲染后DOM,按上面的检查项列出差异;如果目标内容只在渲染后出现,先评估服务端渲染能否覆盖,再决定是否引入预渲染。