蜘蛛池知识

蜘蛛池入口页的 JS 渲染:不执行脚本的蜘蛛能看到什么

这篇讲清蜘蛛抓取入口页时为什么常常只看到一个空壳:脚本生成的链接、接口拉取的正文、脚本跳转分别会造成什么后果,哪些位置最容易被忽略,以及在保留前端体验的前提下怎么让关键内容和链接在初始 HTML 里就存在,并给出可操作的自查方法。

蜘蛛池知识

蜘蛛池入口页的 JS 渲染:不执行脚本的蜘蛛能看到什么

入口页为了加载快、交互顺,常把链接和正文交给 JavaScript 渲染。人在浏览器里看着正常,但蜘蛛拿到的初始 HTML 里可能只有一个空壳。下面把蜘蛛到底看到什么拆开说。

蜘蛛抓取和浏览器打开不是一回事

蜘蛛发一个请求,服务器直接返回 HTML 源码,这就是它第一眼看到的东西。它不会像浏览器那样自动执行脚本、等接口返回、再把内容拼出来。部分搜索引擎具备渲染能力,但要排队、成本高、触发条件也不确定,不能默认它会替你把页面跑一遍。

几类常见写法的影响

  • 链接由脚本生成:页面源码里看不到通往内层的链接,蜘蛛走到这里就断了。
  • 正文靠接口拉取:初始 HTML 里没有有效文字,判断页面主题、决定是否继续抓取都缺依据。
  • 用脚本做跳转:用户会被带到目标页,蜘蛛可能停在原页面,既看不到内容也看不到去向。
  • 前端路由承载路径:路径变化只发生在浏览器端,蜘蛛拿到的仍是同一个地址的同一份内容。

哪些位置最容易被忽略

  • 目录页和列表页的条目链接
  • 正文里的相关推荐、上下篇
  • 翻页与加载更多
  • 面包屑与页脚导航
  • 结构化数据里的目标地址

这些位置恰好吃掉大部分通往下一层的路径,一旦全靠脚本生成,入口页再多也串不起来。

想保留脚本体验,可以这样做

  1. 关键链接用 HTML 直接输出,脚本只做增强,比如点击统计、图片懒加载。
  2. 首屏正文直出,脚本负责后续交互和次要模块。
  3. 翻页优先用地址可直达的方式,加载更多作为补充而不是唯一入口。
  4. 需要跳转时用服务端跳转,并保证目标页面能单独打开。
  5. 不要把核心内容藏在必须点击或必须滚动到底才出现的位置。

怎么自查

取一次初始 HTML,把脚本执行关掉,看看还剩多少内容、还能不能找到通往下一层的链接;再对比渲染后的 HTML,看看多出来的部分是不是关键路径。配合访问日志,观察蜘蛛是否抓到了详情页,而不是只在入口页打转。

实际处理顺序

先把入口页到详情页的主干链路改成静态可抓,再处理正文直出,最后才是那些锦上添花的交互模块。顺序反了,容易把力气花在蜘蛛根本看不到的地方。

什么时候可以先不管

如果入口页本身就是静态列表,脚本只用在动效、统计这类和抓取无关的地方,那基本不用操心。真正需要留意的,是页面核心功能依赖脚本、离开脚本就没有内容和链接的情况。

一个简单的判断方法:把脚本关掉,页面还剩下多少内容,还找不找得到往下一层的路。