站点运营

站点运营:脚本渲染内容自查,别让蜘蛛只拿到空壳页面

页面在浏览器里显示正常,不代表抓取端也能看到同样的内容。本文梳理了单页应用、懒加载、折叠面板、无限滚动等常见空壳形态,给出一份逐项自查清单和折中的改造思路,帮助站长确认正文、列表与分页是否真的出现在原始 HTML 中。

站点运营

站点运营:脚本渲染内容自查,别让蜘蛛只拿到空壳页面

在浏览器里打开页面一切正常,不代表抓取工具拿到的也是同一份内容。现在不少站点把正文、列表、分页都交给 JavaScript 在客户端渲染,爬虫如果只取原始 HTML,很容易拿到一个只有骨架、没有内容的空壳。

先搞清楚蜘蛛实际拿到了什么

自查的第一步不是改代码,而是做对比。同一篇文章,用两种方式各取一次:

  • 用命令行工具或浏览器的“查看网页源代码”,看原始 HTML 里有没有正文文字;
  • 用开发者工具看渲染后的 DOM,确认浏览器里显示的内容到底从哪来;
  • 如果手上有抓取工具,找找“查看抓取方式”这类功能,通常能同时看到原始响应和渲染后的结果。

如果原始 HTML 里只有容器标签和一段 script,正文、标题、链接都要等脚本跑完才出现,那就要留意了。

常见的几种空壳形态

  • 单页应用没有做服务端渲染,路由切换全靠前端;
  • 列表页内容靠接口返回,HTML 里只留占位骨架;
  • 图片和正文使用懒加载,滚动到可视区域才开始加载;
  • 选项卡、折叠面板里的内容默认隐藏,需要点击才展开;
  • 无限滚动代替分页,没有可访问的下一页地址。

逐项自查清单

按下面几条过一遍,通常能定位到大部分问题:

  1. 文章页的标题、首段、正文主体,是否直接出现在原始 HTML 中;
  2. 栏目页的文章列表,每条是否是一个带 href 的 a 标签,而不是按钮加点击事件;
  3. 分页是否有独立地址,而不是只有一个“加载更多”按钮;
  4. 导航、面包屑、相关阅读等内链,是否在初始 HTML 里就能看到;
  5. 图片是否有有效的 src 和 alt,是否依赖脚本注入;
  6. 是否有 noscript 之类的兜底,作用有限,但能反映内容能否直出。

可以采取的折中做法

不必把所有交互都推翻,思路是让关键内容直出,次要体验再增强:

  • 正文与列表改由服务端渲染或预渲染输出,交互部分交给前端接管;
  • 分页保留真实地址,“加载更多”只作为额外补充;
  • 图片懒加载尽量用原生属性,并保证初始 src 有效;
  • 折叠内容如果属于正文主体,考虑默认展开或单独成页;
  • 首屏之外的内容可以延后,但不要延后到完全看不见。

改完之后怎么确认

调整发布后,隔一段时间看抓取日志,观察蜘蛛是否开始抓取 HTML 里新出现的链接,以及是否还在反复请求同一批脚本文件。同时记录改动时间和涉及的模板,方便后续对照。

判断标准不是“我打开页面能看到”,而是“原始 HTML 里能不能看到”。

这一步做扎实,后面谈内链、栏目规划、更新节奏才有意义——蜘蛛连正文都拿不到,其他优化很难发挥作用。