很多站点的列表頁把“加载更多”做成按钮,点击後才用 JavaScript 追加内容;图片和评论区則用懒加载,滚動到可视区域才發起請求。對真實用戶来说這更流畅,但對搜尋蜘蛛来说,這些 URL 可能從来没有出現在可抓取的 HTML 里。
先分清:丢的是资源,還是 URL
懒加载的技術實現相似,後果却完全不同,需要分開看。
图片、视频等媒体懒加载
图片的 src 被換成占位属性,滚動後才替換成真實地址。蜘蛛通常拿不到後加载的图片,但頁面本身的 URL 就在 HTML 中,站内連結结构不受影响。風險主要落在图片搜尋和頁面内容理解上,不會直接切断 URL 發現。
正文、列表、评论等内容懒加载
這類懒加载是把列表項、相關推荐、评论区由脚本在滚動或点击後插入。蜘蛛拿到的是一個空壳容器,里面没有 a 标簽可跟。頁面看起来内容丰富,源碼里却只有几個連結,抓取路径到這里就變窄了。
無限滚動為什么容易卡住抓取
無限滚動把分頁逻辑藏在滚動事件里。蜘蛛不會滚動,也不會触發 IntersectionObserver 之類的监听。它能看到的往往只有首屏那几條連結,後面的内容既没有獨立 URL,也没有入口。
- 首屏之外的 URL 不在 HTML 里,如果 Sitemap 也没列,基本没有入口
- 蜘蛛回訪时看到的還是同样一批連結,容易形成閉环
- “加载更多”需要点击,蜘蛛不會主動去点
- 首屏依赖接口返回資料时,接口變慢或报错,整頁連結一起消失
保留一條不依赖脚本的入口
体驗優化和可抓取性並不冲突,關键是给每個 URL 留一條静態路径。
- 分頁連結用普通的 a 标簽,href 指向真實分頁 URL,例如 list?page=2 或 list/page/2
- “加载更多”按钮旁邊保留分頁導航,两者可以並存
- 列表頁、詳情頁之間补上静態内鏈,相關推荐不要全靠脚本插入
- 用 Sitemap 兜底:内容頁 URL 尽量列入站点地图,並保持更新時間字段有效
- 服務器响應尽量稳定,首屏慢或频繁 5xx 會進一步压缩蜘蛛在站内停留的時間
懒加载本身不是問题,問题是一個 URL 只有懒加载這一條入口。只要存在不依赖 JS 的連結,蜘蛛就能繼續往下走。
別让參數把路径冲散
懒加载常和篩選、排序一起出現。如果每個篩選组合都生成 URL 並且都被連結,蜘蛛會把抓取预算花在大量相似列表上。常见做法是:篩選、排序類參數用 nofollow 或 robots 禁止抓取,只保留主要排序和分頁可抓;分頁 URL 保持稳定,不要附加随机參數,也不要让頁碼顺序倒置。
怎么驗證蜘蛛到底走到了哪一頁
- 看服務器日誌:統計蜘蛛請求的列表頁 URL 是否出現第 2、3 頁,抓取深度是否只停在第一屏
- 用抓取工具關閉 JavaScript,查看原始 HTML 里有多少個站内連結,和實际頁面數量做對比
- 把 Sitemap 中的 URL 與日誌中出現過的 URL 做差集,長期未被抓取的很可能缺入口
- 發布新内容後观察回訪:如果新 URL 一直没被發現,多半是列表入口断了,而不是内容质量問题
小结
優先級可以這样排:先保證 HTML 里有連結,再谈体驗優化。图片懒加载可以放心用;内容懒加载和無限滚動則需要补回分頁入口,並配合 Sitemap 與内鏈。這样一来,蜘蛛的抓取路径就不會被首屏截断,URL 發現也不會只依赖用戶滚動這個動作。