站点运营

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

如果页面正文、链接和分页都靠 JavaScript 在浏览器里生成,蜘蛛抓到的可能只是几行骨架代码。本文从原始 HTML 检查、接口可访问性、懒加载和分页入口几个角度,整理一份 JavaScript 渲染自查清单,帮助运营和开发确认蜘蛛能看到什么。

站点运营

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

现在不少站点用前端框架搭建,页面打开后由 JavaScript 填充数据、生成链接,用户看着正常,但搜索引擎蜘蛛拿到的 HTML 可能只有标题和几个空容器。对站点运营来说,这不只是技术细节,而是关系到新内容能不能被发现、内链能不能被走到。

先看蜘蛛实际拿到了什么

不要只凭浏览器里的效果判断。可以把页面的原始 HTML 抓下来,重点看几件事:

  • 正文标题、摘要和核心内容是否直接出现在 HTML 里;
  • 导航、列表页和文章内链是不是可点击的 a 标签;
  • 分页入口是否存在于原始代码,而不是靠点击加载;
  • canonical、面包屑等基础标签是否已经输出。

如果原始 HTML 里只有 div 容器和一段脚本,后面的内容全靠接口返回,那蜘蛛就需要先执行 JavaScript 才能看到页面。不同搜索引擎对渲染的处理方式不一致,缓存和等待时间也不一样,所以不能把发现内容的希望全押在渲染上。

常见空壳来源

数据接口被拦截

有些站点的 API 被 robots.txt 屏蔽,或者要求登录、校验来源、限制频率。蜘蛛不执行完整用户环境,接口拿不到数据,页面自然就是空的。自查时可以看看接口是否允许匿名访问,是否返回了结构化内容。

路由没有服务端回退

前端路由用 history 模式时,如果服务器对不存在的路径没有回退到入口文件,蜘蛛访问深层 URL 会直接拿到 404。反过来,如果所有路径都回退到同一个空壳,又容易造成重复页面。需要确认回退规则和状态码是否合理。

懒加载和交互依赖

图片、正文模块、选项卡、弹窗、无限滚动经常等到用户操作或滚动才加载。蜘蛛不一定会滚动、点击、等待。把关键内容放在默认视口之外,或者藏在标签页里,都可能影响抓取。

自查清单

  1. 用抓取工具或者命令行拉取原始 HTML,搜索页面核心关键词,确认正文是否出现。
  2. 检查首屏内链和分页链接是否为真实 href,不要只绑定 click 事件。
  3. 确认内容接口没有被 robots.txt 阻止,不依赖登录和临时 token。
  4. 检查 JavaScript 报错时页面是否白屏,是否有基本的降级内容。
  5. 对比浏览器渲染后的 DOM 和原始 HTML,差异过大的部分要做取舍。
  6. 观察蜘蛛日志里对深层页面的抓取量,是否长期停留在入口页。
  7. 新增内容后,看看蜘蛛能否在一段时间内发现对应 URL,而不是只抓首页。

可以调整的方向

优先让关键内容在服务端输出,交互增强再交给 JavaScript。对于已经上线的单页应用,可以考虑服务端渲染、静态生成或者预渲染,把正文、标题、分页和内链先落到 HTML 里。无限滚动要配可抓取的分页地址,选项卡内容尽量默认展开或提供独立 URL。

如果暂时无法改造,至少保留一个稳定的降级入口:比如站点地图里列出主要栏目和文章,分页使用普通链接,重要内容不要只放在弹窗里。这样即使蜘蛛没有完整执行脚本,也能顺着链接走到下一层。

观察变化,但不要急着下结论

调整后不要只看一两天。抓取和索引都有延迟,可以结合访问日志、抓取统计和索引状态一起看。重点观察蜘蛛是否开始访问之前抓不到的 URL,以及新内容被发现的时间有没有变化。如果日志里仍然只有几个入口页,就回到原始 HTML 继续排查。

把内容放在 HTML 里,把交互留给浏览器。蜘蛛能看到的,才是站点真正拿得出手的内容。