网站收录

内容靠 JS 渲染出来:蜘蛛抓到的页面长什么样

页面正文靠 JavaScript 渲染时,浏览器里看着一切正常,抓取阶段拿到的却可能只是一具空壳。本文先把抓取和渲染这两步拆开,再说清楚怎么确认蜘蛛实际看到了什么,最后整理服务端渲染、链接写法、独立分页 URL 等几种可落地的处理思路。

网站收录

内容靠 JS 渲染出来:蜘蛛抓到的页面长什么样

先分清抓取和渲染是两件事

搜索引擎处理一个页面,大致会经历两个阶段:抓取时先拿到服务器返回的 HTML 源码,渲染时再执行页面上的 JavaScript,把内容补全成用户看到的样子。这两步不是同时完成的,中间可能隔一段时间,也可能有些页面抓取之后并没有走到完整的渲染流程。如果正文完全依赖 JS 生成,抓取阶段拿到的就可能只是一个空壳。

这也是很多人遇到的情况:浏览器里打开页面一切正常,但查看源代码,或者在工具里看“蜘蛛视角”的页面,正文位置是空的。

哪些写法容易出问题

  • 正文由前端框架在客户端请求接口后渲染,HTML 里只有一个挂载节点;
  • 列表、推荐位、相关阅读都靠脚本插入,链接不是可点击的 a 标签;
  • 分页用点击事件加载,第二页没有独立 URL;
  • 关键信息只写在 JSON 接口里,页面本身没有任何输出。

这些问题不一定马上表现为收录异常,但会让页面在抓取阶段显得内容稀薄,进而影响后续的判断。

怎么确认蜘蛛实际拿到了什么

  1. 直接查看页面源代码(不是开发者工具里的元素面板),看正文是否出现在 HTML 里;
  2. 关掉 JavaScript 再打开页面,观察还剩下多少内容;
  3. 用抓取测试类工具请求该 URL,对比返回的原始 HTML 与渲染后的内容;
  4. 翻蜘蛛日志,看是否有渲染相关资源的请求,比如脚本文件、接口调用。如果日志里只有 HTML 请求,后面没有跟着脚本请求,这个页面很可能只走到了抓取这一步。
日志里出现脚本请求,只说明渲染有可能发生,并不等于内容一定被完整读到,还需要结合源码一起看。

能做的几件事

1. 让正文出现在首屏 HTML 里

最直接的做法是服务端渲染或预渲染,让服务器返回的 HTML 里就带着标题、正文和主要内链。不需要一上来就全站改造,优先处理那些你希望被收录的内容页即可。

2. 内链用真实的 a 标签

用 onclick 或前端路由代替 a href,用户点得动,但链接关系不会自然体现在 HTML 里。列表页、面包屑、上下篇导航这些位置,尽量输出标准链接。

3. 分页和筛选给独立 URL

如果第二页只能靠点击加载,发现路径就断掉了。哪怕内容仍然用脚本加载,URL 本身也应该可以被单独请求。

4. 别把所有内容都留在接口里

纯接口返回的数据,如果页面里没有任何对应输出,抓取阶段基本看不到。可以把关键字段同时写进页面。

按优先级处理,不必一步到位

全站改成服务端渲染成本不低,更实际的做法是先看哪些页面本身值得收录,把资源集中在这些页面上。详情页、栏目页通常优先,一些交互型页面即使渲染不完整,影响也有限。

另外,渲染慢、脚本阻塞严重,也会拖长单个页面的处理时间。在解决渲染问题的同时顺手看一下加载性能,往往能一起改善。