分页链接是抓取路径里最容易被忽略的一段
列表页、归档页、搜索结果页,通常承担着把蜘蛛带到更深层内容的任务。第一页的链接蜘蛛很容易抓到,但第二页、第三页往后,往往就不是自动能走到的了。如果翻页链接不可抓取,或者被规则挡住,后面那些条目就只能依赖 Sitemap 或别的内链来发现。
分页不是单纯的用户体验问题,它直接决定蜘蛛在站内能走多远,也影响老内容被重新访问的机会。
蜘蛛是怎么碰到下一页链接的
最常见的做法是在列表底部放一个“下一页”的 a 标签。只要这个链接在初始 HTML 里,蜘蛛顺着 href 就能走下去。问题通常出在几种情况:
- 下一页按钮是 button 或 div,点击后由 JavaScript 加载内容,初始 HTML 里没有可跟随的链接;
- 链接用了 onclick 跳转,href 是空的或者“javascript:void(0)”;
- 翻页链接被放在懒加载区域,蜘蛛不执行滚动就碰不到;
- 无限滚动只加载前几屏,后面的条目没有独立 URL。
想确认并不难:在浏览器里禁用 JavaScript 后打开列表页,看看还能不能点到下一页。如果点不到,蜘蛛大概率也走不下去。
让蜘蛛翻到第几页比较合适
分页不是越多越好。每翻一页,蜘蛛就要多请求一次,服务器也要多响应一次。站点越大,分页产生的 URL 就越多,抓取预算会被大量重复列表消耗掉。比较稳妥的做法是:
- 为分页设置一个明确的截止页,比如只保留最近 20 页或 50 页,更早的内容交给 Sitemap 或归档入口;
- 把最有价值的条目放在列表前几页,减少蜘蛛为了找到它们而翻很多页;
- 不要生成“上一页/下一页”之外的大量页码链接,尤其是那种一次列出几百个页码的写法;
- 如果站点内容量不大,可以直接用“查看全部”页面替代深层分页,但要注意页面体积和重复内容处理。
分页 URL 和 canonical 的处理
分页地址通常带参数,比如 ?page=2、/list/page/2/ 或者 ?paged=2。这些地址本身可以被抓取,只要它们返回正常内容。关键是别让同一批条目产生太多重复地址:筛选、排序、分页叠加在一起,容易生成大量内容相似的 URL。
对于分页页面的 canonical,建议让每一页指向自己,而不是全部指向列表第一页。全部指向第一页会削弱后续页面作为发现路径的作用;但如果你确认某些分页只是重复内容、没有独立价值,也可以用 canonical 或 robots 规则做收敛。这里没有统一答案,要看列表页是否承担 URL 发现任务。
以前常用的 rel=prev/next 已经不再是主流搜索引擎的抓取信号,不要把它当作翻页链接的替代品。真正让蜘蛛走下去的,还是可点击、可跟随的 a 标签。
View-all 页面与抓取消耗
把全部条目放在一个页面里,确实能让蜘蛛一次看到更多链接。但这类页面往往体积大、加载慢,还容易和分页页面产生重复。如果要做,建议控制条目数量,保证服务器能稳定响应,并在内链上把它当作一个补充入口,而不是唯一入口。
服务器端要注意什么
分页请求通常集中在列表页,蜘蛛翻页时会连续访问同一个路径的不同参数。如果这个路径响应慢,或者偶尔返回 5xx,蜘蛛可能提前停止翻页。给列表页做缓存、减少每次请求的数据库查询,比单纯增加分页数量更有意义。
检查分页抓取情况的几个动作
- 在服务器日志里筛选列表页路径,看带 page 参数的请求有没有出现,以及后续有没有继续翻页。
- 抽查第二页、第三页的下一页链接,确认是普通 a 标签,且 href 指向正确。
- 看看分页页面是否返回 200,有没有误设 noindex 或 robots 屏蔽。
- 检查分页 URL 是否被参数规则放大,比如排序、筛选和分页组合出大量无意义地址。
- 对比 Sitemap 里的深层 URL 和日志里的抓取记录,判断蜘蛛是否主要靠分页发现内容。
分页链接不需要做得复杂,但要保证蜘蛛能顺着一条清晰的路径走到列表深处,同时不让服务器和抓取预算承担不必要的重复消耗。