你刷着电商网站找新款耳机,手指一滑,商品唰唰冒出来——爽是真爽。可转头一看后台: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,切到你要优化的那个无限滚动页面,照着做:

  1. 用“检查网址”看爬虫视角:在 Google Search Console 里点「检查网址」→ 输入你的无限滚动页 URL → 点「查看测试渲染结果」。如果只看到前几条内容,说明问题就在眼前。

  2. 加一个静态下一页链接:在页面 HTML 底部(或 <head>)手动加一行:

    <a href="/your-path/page/2/" rel="next">下一页</a>
    

    替换 /your-path/page/2/ 成你真实的分页地址,确保能直接打开并显示第二页内容。

  3. 把新链接加进站点地图:打开你正在用的站点地图(通常是 sitemap.xml),新增这一行:

    <url><loc>https://yoursite.com/your-path/page/2/</loc></url>
    

    保存,重新提交到 Search Console。

  4. 一周后回查效果:进 Search Console →「覆盖范围」报告 → 看这个 URL 或相关路径的“已编入索引”状态有没有变化。如果没动静,去「抓取日志」里搜这几个新 URL,确认爬虫到底访没访问过。

改完这四步,不用动核心逻辑,也不影响用户滑得开心。你的无限滚动页,从此不再是搜索引擎的盲区。