动态页面的可见内容不能只看浏览器里渲染出来的样子,而要把“用户看到的”“爬虫拿到的”“搜索引擎索引里存的”分开核对。第一步是抓取原始HTML,看正文是否在无JavaScript执行时已经存在;第二步再用渲染后的页面比对;第三步才去搜索引结果或索引状态里确认实际收录的版本。
假设某站点有一个商品列表页,地址形如 /list?category=3&page=2,页面通过前端请求接口后,把商品名称、价格、库存填入 <div id="app"></div>。用户在浏览器里看到完整列表,但直接查看网页源代码时,这个容器是空的。
此时可能出现三种结果:搜索引擎抓取原始HTML时只看到空容器;具备渲染能力的抓取程序执行脚本后看到商品;索引里保存的是渲染后的版本,但更新滞后。三种情况对应不同的可见内容,不能用一个“页面能打开”来概括。
判断结果:原始HTML已含正文,说明可见内容不依赖脚本;原始HTML为空、渲染后出现正文,说明可见内容依赖渲染;渲染后仍为空,说明脚本、接口或权限条件未满足。
动态页面最容易踩的坑,是只检查了抓取,没有检查索引。以下现象各有不同解释,不要直接认定唯一原因。
robots.txt 禁止抓取,可能让页面无法被抓取,但它不等于可靠的索引移除手段,已收录页面未必因此立即消失。200 但正文为空,可能是参数缺失、鉴权失败或前端渲染未触发,需要看响应体而不是只看状态码。动态页面通常依赖URL参数或请求头。核查时逐项确认:
?id=、?category= 改变内容,?utm_source= 通常不改变正文。User-Agent 或 Accept 时,接口可能返回空数据。适用条件:以上检查适用于内容由前端脚本注入、接口异步返回的动态页面。若页面本身是服务端渲染,原始HTML通常已含正文,重点转为核对索引版本和参数规范化。
选一个具体动态页面,先保存未渲染HTML,再保存渲染后DOM,最后记录搜索引结果中的标题与摘要,三份材料并排比对。若原始HTML为空而渲染后有内容,优先解决渲染可见性;若两者都有内容但索引未更新,优先核对索引状态与抓取频率,而不是继续改前端。