你刷着电商网站找新款耳机,手指一滑,商品唰唰冒出来——爽是真爽。可转头一看后台:Google Search Console 里,这页的收录量还是个零。不是你网站没内容,是爬虫压根没看到后面那几百款。
无限滚动对人友好,对搜索引擎却像关了灯走迷宫:它不滚、不点、不等加载,只认 HTML 里现成的东西。你首页有10个商品?它就只“看见”这10个。后面990个?藏在 JS 里,等于不存在。
无限滚动为什么让搜索引擎"眼瞎"?
爬虫不会用鼠标滚轮,也不懂“再往下拉一点”。它打开一个 URL,读完返回的 HTML 就走人。如果你的页面初始 HTML 只包含第一屏内容,其余全靠 JS 动态插入,那爬虫连第二屏的影子都抓不到。
比如我帮过的一个家居电商站:商品列表全靠 fetch() 滚动加载,首页源码里只有 8 个 li 标签。上线后三个月,Google 收录的商品页从几千掉到两位数。用户觉得流畅,搜索流量却断得干脆。
根本矛盾就在这儿:爬虫要的是能直接访问的链接,而无限滚动把内容和链接一起锁进了 JavaScript 的抽屉里。
3个让爬虫也能"滚动"的实战方法
方法一:用分页URL给爬虫铺条路
别删分页,把它藏在页面里,专供爬虫用。
比如你的商品列表地址是 /products/,那就悄悄在页面底部或 <head> 里加一行:
<a href="/products/page/2/" rel="next">下一页</a>
确保这个链接真实可访问,返回的是完整的第二页 HTML(不是空壳,不是 JSON)。爬虫顺着点进去,就能抓到所有内容。
真实例子:一个垂直类科技博客,文章列表用无限滚动,但每页都保留 /blog/page/2/、/blog/page/3/ 这样的独立地址。我在 <head> 里补上 rel="next" 和 rel="prev",又在 robots.txt 里放开这些路径。没改前端交互,两个月后收录量明显提升。
方法二:用"查看全部"页面来个一锅端
如果分页太碎,就做一张“大而全”的静态页。
比如每个分类页 /category/furniture/ 对应一个 /category/furniture/all/,里面一次性列出该分类全部商品(哪怕上千个),不滚动、不分页、不调 JS。
把这个 URL 加进站点地图,告诉 Google:“这儿有全部,直接来拿。”
之前有个户外装备站试了这招:他们给热门分类生成了 /category/tents/all/ 页面,服务端吐出完整 HTML。虽然页面体积大了些,但爬虫一次抓完,收录深度立刻拉满。这个页面不用放导航栏,用户看不见也行——只要 Google 能摸到。
方法三:用History API和URL更新模拟真实页面
滚动时,让 URL 跟着变。
用户滑到第二屏,浏览器地址栏就变成 /articles/page/2/;滑到第三屏,变成 /articles/page/3/。关键是:这些 URL 必须能在服务端直接返回对应内容的完整 HTML 页面(不是重定向,不是 404)。
我们给一个地方新闻站做过类似方案:后端用 Nginx + 静态文件支持 /news/page/2/ 这类路径,前端用 history.pushState 同步更新。用户无感,爬虫却能通过站点地图或 rel="next" 主动访问每一个页面。结果是,原来只收首页,现在每批滚动内容都进了索引,移动搜索曝光明显增长。
这4个坑你千万别踩
坑1:无限滚动和分页内容不一致
同一个分类,分页按发布时间排,无限滚动按销量排?爬虫抓的是一套,用户看的是另一套。轻则收录错乱,重则被判定为误导性内容。
统一排序逻辑,或者干脆只留一种结构——别让爬虫和用户活在平行世界。
坑2:滚动加载时URL不更新
页面刷出了二十屏商品,地址栏还停在 /products/?那爬虫永远只认识首页。
每次加载新内容,至少要用 history.replaceState 把当前状态存下来。哪怕不跳转,也让 URL 能反映“已加载到第几批”。
坑3:忽略移动端和慢网速
3G 网络下,JS 加载卡住,无限滚动直接白屏。用户等不了,爬虫更等不了——超时就放弃。
旅游类网站吃过亏:海外线路加载失败,整页滚动内容在 Google 移动索引里彻底消失。
建议:给移动端加个“点击加载更多”按钮,或者在滚动区域下方埋一个 fallback 链接,比如 <a href="/products/page/2/">还没看完?点这里看下一页</a>。
坑4:不告诉爬虫"下一页"在哪
别指望爬虫自己猜顺序。你必须明示:
<link rel="next" href="/products/page/2/">
<link rel="prev" href="/products/">
放在 <head> 里。没有这行,爬虫看到 /products/ 就以为这是终点。视频站曾因漏掉这个,几百页内容全成孤儿页;补上后,收录逐步回归。
今天就能做的4个优化步骤
别等下次发版。现在就打开 Chrome,切到你要优化的那个无限滚动页面,照着做:
用“检查网址”看爬虫视角:在 Google Search Console 里点「检查网址」→ 输入你的无限滚动页 URL → 点「查看测试渲染结果」。如果只看到前几条内容,说明问题就在眼前。
加一个静态下一页链接:在页面 HTML 底部(或
<head>)手动加一行:<a href="/your-path/page/2/" rel="next">下一页</a>替换
/your-path/page/2/成你真实的分页地址,确保能直接打开并显示第二页内容。把新链接加进站点地图:打开你正在用的站点地图(通常是
sitemap.xml),新增这一行:<url><loc>https://yoursite.com/your-path/page/2/</loc></url>保存,重新提交到 Search Console。
一周后回查效果:进 Search Console →「覆盖范围」报告 → 看这个 URL 或相关路径的“已编入索引”状态有没有变化。如果没动静,去「抓取日志」里搜这几个新 URL,确认爬虫到底访没访问过。
改完这四步,不用动核心逻辑,也不影响用户滑得开心。你的无限滚动页,从此不再是搜索引擎的盲区。