站点运营

站点运营:JS 渲染自查,别让蜘蛛只拿到一个空壳

网站用 JavaScript 渲染内容时,蜘蛛可能只拿到空壳 HTML。本文从原始源码检查、渲染模式选择、链接发现和日志验证几个方面,整理一份可执行的 JS 渲染自查清单,帮助站点运营减少抓取障碍,让 URL 发现和内容索引更顺畅。

站点运营

站点运营:JS 渲染自查,别让蜘蛛只拿到一个空壳

很多站点在浏览器里看着正常,搜索引擎蜘蛛拿到的 HTML 源码里却只有加载动画和几行脚本。蜘蛛池做 URL 发现时,如果页面正文依赖 JavaScript 渲染,抓取和索引就容易出现偏差。这篇文章不讨论框架优劣,只梳理一次可执行的 JS 渲染自查,帮你确认蜘蛛到底能拿到什么。

为什么 JS 渲染会影响 URL 发现

蜘蛛先抓取 HTML,再决定是否执行脚本、是否继续解析链接。若首屏链接和正文都由 JS 插入,蜘蛛可能:

  • 看不到导航里的内链,URL 发现范围变窄;
  • 抓到的正文为空,页面进入“无内容”判断;
  • 把同一套模板当成多份相似页面,浪费抓取预算。

这不是说所有 JS 内容都不能被抓,而是你需要知道自己的站点属于哪种情况。

先看原始源码,不只看渲染后页面

打开浏览器开发者工具,查看“查看网页源代码”而不是 Elements 面板。或者在命令行里用 curl 拉一次 HTML,观察正文、标题、内链是否已经在源码中。

  1. 搜索页面主标题和第一段正文,看是否出现在原始 HTML;
  2. 检查主导航、面包屑、分页链接是否以 a 标签存在;
  3. 查看 canonical、meta robots、hreflang 等是否由 JS 写入;
  4. 对比关闭 JS 后的页面,确认有没有可用的降级内容。

常见渲染模式与取舍

服务端渲染或静态生成

HTML 返回时正文和链接已经存在,蜘蛛无需执行脚本也能理解页面。对内容页、栏目页、文章列表来说,这是更稳妥的默认选择。

客户端渲染

源码里只有应用壳,正文和链接靠 JS 生成。蜘蛛可能延迟渲染或不渲染。若必须用 CSR,至少保证关键 URL 和主内容有可抓取的入口。

动态渲染与预渲染

根据 User-Agent 返回不同版本,或提前生成静态 HTML。注意版本之间要一致,避免给蜘蛛和用户看到不同正文,否则容易被判定为作弊。

一份可落地的自查清单

  • 关键页面:文章页、栏目页、产品页的原始 HTML 里是否有主正文;
  • 链接发现:分页、标签、相关推荐是否用普通 a 链接,而不是 onclick 跳转;
  • 元信息:title、description、canonical 是否在服务端输出;
  • 状态码:JS 路由不要用 200 返回空内容,该 404 就 404;
  • 日志验证:观察蜘蛛抓取日志中这些 URL 的响应大小和状态码,是否长期为 0 或极小;
  • 站点地图:sitemap 里只放可渲染、可索引的 URL,不要把纯 JS 空壳页全部提交。

和蜘蛛池、站点地图怎么配合

蜘蛛池的价值在于让蜘蛛更快发现 URL,但发现之后能否抓到有效内容,取决于页面本身。你可以把新 URL 放进 sitemap,用内链从已有内容页指向它,再用日志确认蜘蛛是否真正抓到了正文。如果日志显示抓取频繁但响应体很小,优先回头检查渲染方式,而不是继续加链接。

抓取和索引没有保证。本文提到的检查只是帮你减少明显障碍,最终是否收录仍由搜索引擎决定。

JS 渲染自查不需要一次改完整站。先挑一个内容栏目做对照:原始源码有正文的页面,和只靠 JS 渲染的页面,在日志里的抓取表现通常不一样。把差异记录下来,再决定哪些模板需要改成服务端输出或预渲染。站点运营的很多问题,都是从“蜘蛛看到的和用户看到的不一样”开始的。