蜘蛛池知识

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

這篇讲清蜘蛛抓取入口頁时為什么常常只看到一個空壳:脚本生成的連結、接口拉取的正文、脚本跳轉分別會造成什么後果,哪些位置最容易被忽略,以及在保留前端体驗的前提下怎么让關键内容和連結在初始 HTML 里就存在,並给出可操作的自查方法。

蜘蛛池知识

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

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

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

蜘蛛發一個請求,服務器直接返回 HTML 源碼,這就是它第一眼看到的東西。它不會像浏览器那样自動执行脚本、等接口返回、再把内容拼出来。部分搜尋引擎具备渲染能力,但要排队、成本高、触發條件也不确定,不能預設它會替你把頁面跑一遍。

几類常见寫法的影响

  • 連結由脚本生成:頁面源碼里看不到通往内层的連結,蜘蛛走到這里就断了。
  • 正文靠接口拉取:初始 HTML 里没有有效文字,判断頁面主题、决定是否繼續抓取都缺依據。
  • 用脚本做跳轉:用戶會被带到目标頁,蜘蛛可能停在原頁面,既看不到内容也看不到去向。
  • 前端路由承载路径:路径變化只發生在浏览器端,蜘蛛拿到的仍是同一個地址的同一份内容。

哪些位置最容易被忽略

  • 目錄頁和列表頁的條目連結
  • 正文里的相關推荐、上下篇
  • 翻頁與加载更多
  • 面包屑與頁脚導航
  • 结构化資料里的目标地址

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

想保留脚本体驗,可以這样做

  1. 關键連結用 HTML 直接輸出,脚本只做增强,比如点击統計、图片懒加载。
  2. 首屏正文直出,脚本负责後續交互和次要模块。
  3. 翻頁優先用地址可直達的方式,加载更多作為补充而不是唯一入口。
  4. 需要跳轉时用服務端跳轉,並保證目标頁面能單獨打開。
  5. 不要把核心内容藏在必须点击或必须滚動到底才出現的位置。

怎么自查

取一次初始 HTML,把脚本执行關掉,看看還剩多少内容、還能不能找到通往下一层的連結;再對比渲染後的 HTML,看看多出来的部分是不是關键路径。配合訪問日誌,观察蜘蛛是否抓到了詳情頁,而不是只在入口頁打轉。

實际處理顺序

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

什么时候可以先不管

如果入口頁本身就是静態列表,脚本只用在動效、統計這類和抓取無關的地方,那基本不用操心。真正需要留意的,是頁面核心功能依赖脚本、离開脚本就没有内容和連結的情况。

一個简單的判断方法:把脚本關掉,頁面還剩下多少内容,還找不找得到往下一层的路。