如何为 AI 爬虫和搜索引擎处理无限滚动

如何为 AI 爬虫和搜索引擎处理无限滚动

如何为 AI 爬虫处理无限滚动?

采用无限滚动与传统分页 URL 的混合方案。创建独立且可抓取的组件页面,每个页面有唯一的 URL,AI 爬虫无需执行 JavaScript 就能访问。用户滚动时用 pushState/replaceState 更新 URL,并确保所有内容都可通过静态 HTML 兜底访问。

理解挑战:为什么无限滚动会影响 AI 爬虫可见性

无限滚动为用户带来流畅的浏览体验,内容会随着页面下拉自动加载。但对于像 ChatGPT 的 GPTBot、Claude 的 ClaudeBot 和 Perplexity 的 PerplexityBot 这样的AI 爬虫来说,这种方式会带来严重的问题。这些 AI 系统不会像人类一样滚动页面或模拟交互——它们只会在页面初始状态下加载一次,然后抽取当时可见的所有内容。当你的内容只能通过 JavaScript 并且由滚动事件触发加载时,AI 爬虫就无法获取初始视口之外的内容,导致你的内容在 AI 搜索引擎和答案生成器中不可见。

根本问题在于AI 爬虫与传统搜索引擎爬虫的工作方式不同。虽然 Googlebot 能在一定程度上渲染 JavaScript,但绝大多数 AI 爬虫并不具备完整的浏览器环境和 JavaScript 引擎。它们主要解析 HTML 和元数据,优先抓取结构化、易于获取的数据。如果你的内容只有在 JavaScript 执行后才出现在 DOM 中,这些爬虫就无法访问。这样一来,一个拥有数百个产品、文章或列表的网站,在 AI 系统眼中可能只有十几条内容。

核心问题:固定状态和固定尺寸的限制

AI 爬虫存在两个关键限制,使得无限滚动难以兼容。首先,它们以固定尺寸加载页面——通常只查看初始视口范围内的内容,不会滚动。其次,它们以固定状态运行,即加载后不会再与页面产生交互。它们不会点击按钮、不会下拉页面、也不会触发任何 JavaScript 事件。这与人类用户的体验截然不同。

如果无限滚动完全依赖于 JavaScript 来加载内容,AI 爬虫只能看到首屏数据。初始渲染后加载的内容都被隐藏起来。对于电商网站来说,首屏以外的商品将对 AI 爬虫不可见;对于博客和新闻网站,只有前几篇文章会出现在 AI 搜索结果中;对于目录和画廊,大部分内容都不会被 AI 系统索引。

方面AI 爬虫人类用户
滚动行为不滚动,固定视口滚动加载更多内容
JavaScript 执行有限或不执行完全支持 JavaScript
页面交互不点击、不提交表单完全交互能力
内容可见性仅初始 HTML + 元数据所有动态加载内容
单页停留时间秒级(固定超时)不限

解决方案:搭配无限滚动和传统分页

最有效的方法是不是放弃无限滚动,而是在传统分页系列的基础上增强无限滚动。这个混合模式既服务于人类用户,也兼顾 AI 爬虫。用户享受流畅的无限滚动体验,而 AI 爬虫则能通过独立且可抓取的 URL 访问全部内容。

Google 官方针对无限滚动的建议是创建组件页面——每个分页都对应一个独立的 URL。每个组件页面都应可独立访问,拥有唯一内容,并且不依赖 JavaScript 即可正常工作。例如,不要把所有商品都通过无限滚动加载到同一个页面,而是要生成如 /products?page=1/products?page=2/products?page=3 这样的 URL。

步骤 1:创建带唯一 URL 的组件页面

分页系列中的每一页都必须拥有完整的 URL,无需用户访问历史、Cookie 或 JavaScript 即可直接访问。这样 AI 爬虫才能发现并索引你的全部内容。URL 结构应简洁、语义化,清楚反映页码或内容范围。

推荐的 URL 结构:

  • example.com/products?page=2
  • example.com/blog/page/3
  • example.com/items?lastid=567

避免以下 URL 结构:

  • example.com/products#page=2(爬虫无法识别锚点)
  • example.com/products?days-ago=3(相对时间参数容易失效)
  • example.com/products?radius=5&lat=40.71&long=-73.40(不具语义的参数)

每个组件页面都应可直接访问,无需特殊操作。访问 /products?page=2 时应直接加载该页内容,而不是必须从第一页滚动才能到达。这确保了 AI 爬虫可以直接跳转到你的任何分页内容。

步骤 2:确保页面间无内容重复

分页间内容重复会让 AI 爬虫困惑,浪费抓取预算。每个条目只能出现在分页系列中的一页。如果同一个商品出现在第 1 页和第 2 页,AI 系统可能无法判断哪个版本是权威,影响你的可见度。

防止重复的方法是为每页设定明确的内容边界。例如,每页展示 25 个条目,第 1 页为 1-25,第 2 页为 26-50,依此类推。避免在新页面顶部重复显示上一页的最后一项,否则会被 AI 爬虫识别为重复内容。

步骤 3:为每一页创建独特标题和主标题

通过为每个组件页面设定独特的标题标签和 H1,帮助 AI 爬虫区分每一页的独特性。不要用诸如“产品”这样的通用标题,而要在标题中注明页码或内容主题。

示例 title 标签:

  • 第 1 页: <title>精品咖啡豆 | 全部商品</title>
  • 第 2 页: <title>精品咖啡豆 | 第2页 | 更多品种</title>
  • 第 3 页: <title>精品咖啡豆 | 第3页 | 精品拼配</title>

示例 H1 标题:

  • 第 1 页: <h1>精品咖啡豆 - 全部产品</h1>
  • 第 2 页: <h1>精品咖啡豆 - 第2页:更多品种</h1>
  • 第 3 页: <h1>精品咖啡豆 - 第3页:精品拼配</h1>

独特的标题和主标题能让 AI 爬虫判断每一页都值得单独索引,提高深层页面在 AI 答案和摘要中的出现几率。

向 AI 爬虫暴露分页链接

AI 爬虫通过跟踪链接发现内容。如果你的分页链接被隐藏或只通过 JavaScript 渲染,爬虫将无法找到组件页面。你必须明确地暴露导航链接,确保爬虫能够检测并跟踪。

首页(第一页)

在主列表页(第 1 页),应包含一个可见或隐藏的指向第 2 页的链接。可以通过以下方式实现:

方案 1:可见的“下一页”链接

<a href="/products?page=2">下一页</a>

将此链接放在商品列表底部。当用户滚动触发无限滚动时,可以用 CSS 或 JavaScript 隐藏该链接,但 HTML 中依然保留,爬虫可见。

方案 2:noscript 标签中的隐藏链接

<noscript>
  <a href="/products?page=2">下一页</a>
</noscript>

<noscript> 标签中的内容在 JavaScript 被禁用时显示。爬虫会把它当做普通 HTML 跟踪,即使有 JS 的用户看不到。

方案 3:“加载更多”按钮带 href

<a href="/products?page=2" id="load-more" class="button">加载更多</a>

如果用“加载更多”按钮,确保 href 包含下一页的 URL。JS 可以阻止默认跳转并加载内容,但爬虫会跟踪 href 链接。

后续页面(第 2 页及以后)

每个组件页面都应包含导航链接,指向分页系列中的其他页面。可以采用以下方式:

  • 上一页/下一页链接:第 2 页同时链接到第 1 页和第 3 页
  • 完整分页导航:列出所有页码(1、2、3、4、5 等)
  • 混合模式:链接相邻页面和首页、末页

重要提示: 必须始终把首页链接为无参数的主 URL。如果首页是 /products,不要链接到 /products?page=1。应确保 /products?page=1 跳转到 /products,保证首页只有一个权威 URL。

用 pushState 和 replaceState 优化用户体验

AI 爬虫需要独立 URL,人类用户则期望流畅的无限滚动体验。可通过 History API 的 pushStatereplaceState,在用户滚动时动态更新浏览器地址栏,实现两全其美。

pushState 会在浏览历史中添加一条新记录,用户可以通过后退按钮返回之前的滚动位置。replaceState 则更新当前历史项,不新建记录。对于无限滚动,当用户主动滚动到新内容时使用 pushState,这样返回按钮才能正常恢复之前的滚动状态。

// 当无限滚动加载新内容时
window.history.pushState({page: 2}, '', '/products?page=2');

这样可以确保:

  • 用户滚动时地址栏 URL 实时更新
  • 用户可以收藏具体的分页位置
  • 后退按钮恢复滚动状态
  • AI 爬虫抓取到每个分页的独立 URL

测试你的无限滚动实现

上线前,务必彻底测试 AI 爬虫是否能访问所有内容。

测试 1:禁用 JavaScript 检查内容可访问性

最简单的测试方法是禁用浏览器 JavaScript,然后浏览你的网站。可用“Toggle JavaScript”等扩展关闭脚本,再访问列表页。应确保通过分页链接能访问所有页面。禁用 JS 后看不到的内容,AI 爬虫同样无法抓取。

测试 2:越界分页应返回 404

如果你有 50 页商品,访问 /products?page=999 应返回404 错误,而不是空白或跳转到第 1 页。这样可告知爬虫页面不存在,避免浪费抓取预算。

测试 3:检查滚动时 URL 是否正常更新

当用户滚动并加载新内容时,确认地址栏 URL 是否正确变化。分页参数应反映当前滚动位置。滚动到第 3 页内容时,URL 应为 /products?page=3

测试 4:用 Google Search Console 验证

利用 Google Search Console 的URL 检查工具测试分页页面的渲染和索引情况。提交若干组件页面,确认 Google 能获取全部内容。如果 Google 能抓取,AI 爬虫通常也没问题。

进阶优化:为 AI 爬虫添加结构化数据

除了分页外,还可用 Schema.org 结构化数据帮助 AI 爬虫更深入理解你的内容。为每个组件页面添加产品、文章、评论等相关类型的标记。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "精品咖啡豆",
  "description": "高品质阿拉比卡咖啡豆",
  "price": "12.99",
  "paginationInfo": {
    "pageNumber": 2,
    "itemsPerPage": 25
  }
}
</script>

结构化数据能为你的内容提供明确信号,帮助 AI 系统更准确地在答案生成中展现你的信息。

常见错误及避免方式

错误 1:仅依赖 JavaScript 加载分页链接
如果分页链接只有在 JS 执行后才出现,爬虫找不到。分页链接必须出现在初始 HTML 中。

错误 2:用 URL 锚点做分页
/products#page=2 这样的 URL 对爬虫无效。锚点只在客户端有效,服务器和爬虫看不到。应使用查询参数或路径段。

错误 3:分页内容重叠
同一商品出现在多页会导致 AI 爬虫索引重复,或无法确定权威版本。务必保持分页内容严格不重叠。

错误 4:忽略移动端爬虫
确保分页在移动端视口下也能正常工作。有些 AI 爬虫用移动端 User-Agent,分页必须兼容所有屏幕尺寸。

错误 5:未测试爬虫可访问性
不要假定分页对爬虫有效。务必禁用 JS,验证所有页面都能通过链接访问。

监控你的 AI 可见性

分页与无限滚动结合后,持续监控你的内容在 AI 搜索结果中的表现。跟踪哪些页面被 AI 爬虫索引,哪些内容出现在 ChatGPT、Perplexity 及其他 AI 答案生成器中。利用工具审查网站抓取状况,确保 AI 系统能访问全部内容。

目标是为人类用户提供流畅的无限滚动体验,同时让 AI 爬虫系统性地发现并索引你的所有内容。这种混合方案能最大化你在传统搜索和新兴 AI 发现渠道中的可见度。

监控您的品牌在 AI 搜索结果中的表现

跟踪您的内容在 ChatGPT、Perplexity 及其他 AI 答案生成器中的展示情况。品牌被提及时及时收到提醒,并衡量您在 AI 平台的整体可见度。

了解更多

AI爬虫如何处理无限滚动?我们的内容未被索引

AI爬虫如何处理无限滚动?我们的内容未被索引

社区关于无限滚动与AI爬虫可访问性的讨论。技术SEO专业人士分享让动态加载内容可被AI系统发现的解决方案。

2 分钟阅读
Discussion Technical SEO +1
如何确保 AI 爬虫能够抓取你所有的内容

如何确保 AI 爬虫能够抓取你所有的内容

了解如何让 ChatGPT、Perplexity 以及谷歌 AI 等 AI 爬虫能够看到你的内容。发现针对 AI 搜索可见性的技术要求、最佳实践以及监控策略。...

2 分钟阅读