入口頁為了加载快、交互顺,常把連結和正文交给 JavaScript 渲染。人在浏览器里看着正常,但蜘蛛拿到的初始 HTML 里可能只有一個空壳。下面把蜘蛛到底看到什么拆開说。
蜘蛛抓取和浏览器打開不是一回事
蜘蛛發一個請求,服務器直接返回 HTML 源碼,這就是它第一眼看到的東西。它不會像浏览器那样自動执行脚本、等接口返回、再把内容拼出来。部分搜尋引擎具备渲染能力,但要排队、成本高、触發條件也不确定,不能預設它會替你把頁面跑一遍。
几類常见寫法的影响
- 連結由脚本生成:頁面源碼里看不到通往内层的連結,蜘蛛走到這里就断了。
- 正文靠接口拉取:初始 HTML 里没有有效文字,判断頁面主题、决定是否繼續抓取都缺依據。
- 用脚本做跳轉:用戶會被带到目标頁,蜘蛛可能停在原頁面,既看不到内容也看不到去向。
- 前端路由承载路径:路径變化只發生在浏览器端,蜘蛛拿到的仍是同一個地址的同一份内容。
哪些位置最容易被忽略
- 目錄頁和列表頁的條目連結
- 正文里的相關推荐、上下篇
- 翻頁與加载更多
- 面包屑與頁脚導航
- 结构化資料里的目标地址
這些位置恰好吃掉大部分通往下一层的路径,一旦全靠脚本生成,入口頁再多也串不起来。
想保留脚本体驗,可以這样做
- 關键連結用 HTML 直接輸出,脚本只做增强,比如点击統計、图片懒加载。
- 首屏正文直出,脚本负责後續交互和次要模块。
- 翻頁優先用地址可直達的方式,加载更多作為补充而不是唯一入口。
- 需要跳轉时用服務端跳轉,並保證目标頁面能單獨打開。
- 不要把核心内容藏在必须点击或必须滚動到底才出現的位置。
怎么自查
取一次初始 HTML,把脚本执行關掉,看看還剩多少内容、還能不能找到通往下一层的連結;再對比渲染後的 HTML,看看多出来的部分是不是關键路径。配合訪問日誌,观察蜘蛛是否抓到了詳情頁,而不是只在入口頁打轉。
實际處理顺序
先把入口頁到詳情頁的主干鏈路改成静態可抓,再處理正文直出,最後才是那些锦上添花的交互模块。顺序反了,容易把力气花在蜘蛛根本看不到的地方。
什么时候可以先不管
如果入口頁本身就是静態列表,脚本只用在動效、統計這類和抓取無關的地方,那基本不用操心。真正需要留意的,是頁面核心功能依赖脚本、离開脚本就没有内容和連結的情况。
一個简單的判断方法:把脚本關掉,頁面還剩下多少内容,還找不找得到往下一层的路。