很多站点的列表页把“加载更多”做成按钮,点击后才用 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 发现也不会只依赖用户滚动这个动作。