站点运营

站点运营:JavaScript 渲染自查,别让蜘蛛只看到空壳页面

页面内容由 JavaScript 动态生成时,搜索引擎拿到的初始 HTML 可能只是一层空壳。本文从渲染方式、懒加载、接口拦截和元标签注入几个角度,整理一份可执行的自查清单,帮助站点减少蜘蛛抓取不到正文、抓取预算被浪费的情况。

站点运营

站点运营:JavaScript 渲染自查,别让蜘蛛只看到空壳页面

不少站点为了交互体验,把正文、列表、详情都交给 JavaScript 在浏览器里生成。对用户来说这没问题,但对搜索蜘蛛来说,第一次请求拿到的 HTML 可能只有框架和占位符。如果蜘蛛没有继续执行脚本,或者执行到一半超时,页面在它眼里就接近空壳。

为什么 JavaScript 渲染容易让蜘蛛空手而归

主流搜索引擎具备执行 JavaScript 的能力,但和真实用户浏览器相比,仍有一些限制:渲染队列需要排队,执行时间有上限,外部脚本、接口请求也可能被拦截。结果就是:用户能看到内容,蜘蛛看到的却是初始 HTML。

  • 关键正文写在 JS 模板里,初始 HTML 没有对应文字。
  • 接口需要登录态或特定请求头,蜘蛛请求直接失败。
  • 脚本文件被 robots.txt 或防火墙拦截,渲染流程中断。
  • 懒加载触发条件依赖滚动或点击,蜘蛛不一定会操作。

自查时先做这几件事

不用一上来就改架构,先确认问题是否存在。

  1. 用浏览器禁用 JavaScript,或者用纯文本模式访问几个代表性页面,看还剩多少可读内容。
  2. 查看页面源代码,而不是审查元素。源代码里若没有标题、正文、链接,说明它们是后注入的。
  3. 用搜索资源平台的 URL 检查工具,对比原始 HTML 和渲染后 HTML。
  4. 在服务器日志或抓取日志里,看蜘蛛请求接口和脚本时返回的状态码。

常见问题与处理方向

正文完全依赖客户端渲染

如果详情页、文章页的正文只在 JS 执行后出现,优先考虑服务端渲染、静态生成或预渲染。至少让初始 HTML 包含标题、核心段落和主要内链。对已经上线的页面,可以先做关键页面的预渲染,再逐步迁移。

接口和资源被挡在门外

检查 robots.txt、WAF、CDN 规则是否误伤了蜘蛛需要的接口或脚本。接口返回 403、401 或 5xx,渲染自然失败。可以按 User-Agent 和 IP 段做白名单,但不要为了放行蜘蛛而把整个接口暴露给任意请求。

懒加载与无限滚动

图片懒加载一般问题不大,正文懒加载就要小心。如果第二屏之后的内容必须滚动才加载,蜘蛛可能只拿到首屏。可以考虑首屏直出、分页链接,或者用 Intersection Observer 之外的可抓取兜底方案。

动态注入的 meta 和链接

有些站点用 JS 动态写入 canonical、robots meta、hreflang。搜索引擎虽然可能执行,但延迟和冲突会让规则不稳定。重要指令尽量放在服务端输出的 HTML 里,避免同一页面出现两套信号。

一份简化的自查清单

  • 代表性页面在禁用 JS 后是否还有核心内容?
  • 原始 HTML 是否包含标题、描述、canonical、主要内链?
  • 渲染所需的脚本和接口是否对蜘蛛可访问?
  • 是否有接口返回错误或超时?
  • 分页、筛选、详情页是否存在无限滚动遮挡?
  • 日志里蜘蛛是否频繁请求脚本和接口,却很少抓到内容页?
渲染问题没有一刀切的答案。先确认蜘蛛实际看到了什么,再决定用服务端渲染、预渲染还是降级方案。不要指望改完立刻被大量收录,抓取和索引都需要时间。

把 JavaScript 渲染自查纳入常规站点巡检,和死链、Sitemap、响应速度放在同一张清单里。蜘蛛能稳定拿到内容,后续的 URL 发现和栏目运营才有讨论的基础。