栏目列表页往往是蜘蛛发现站内新内容的主要通道。首页和栏目第一页的链接通常没问题,问题多出在第二页往后:翻页按钮靠脚本渲染、下一页没有真实 href、页码参数任意可访问,都会让蜘蛛在列表页前几屏就停下。
先确认站点用的是哪种翻页方式
传统翻页链接
形如 /news/page/2/ 或 /news?page=2,每页都输出可点击的 a 标签。这种实现最容易被抓取,重点检查是否存在页码超限仍返回正常状态码的情况。
加载更多与无限滚动
这类交互对用户友好,但对蜘蛛不友好:按钮往往是 div 或 button,没有 href,点击后才由脚本请求接口并拼接 HTML。蜘蛛不点击,也就看不到后面的内容。可行的做法是保留一个真实可抓取的分页地址作为后备,例如在列表底部放一个指向下一页的链接,或者提供带页码的静态列表面。
分页链接要能被抓取和跟随
- 分页导航使用 a 标签并带 href,不要只绑 onclick 事件。
- 不要在分页链接上随意加 nofollow,除非确实不希望蜘蛛继续向后翻。
- 确认分页链接在初始 HTML 中就存在,而不是滚动到底部后才由脚本插入。
- 模板改版后回头看一眼分页导航是否被隐藏容器或条件判断包裹住。
canonical 与 prev/next 别用错
一个常见错误是把所有分页页的 canonical 都指向列表首页,这等于告诉搜索引擎这些页面都是首页的副本。页面上的条目链接仍可能被抓到,但分页页本身很难有独立价值。更稳妥的做法是每页 canonical 指向自身。
rel="prev" 与 rel="next" 目前主要作为路径提示存在,不再作为索引信号。保留无妨,但不能用它替代可抓取的翻页链接。
每页条数与翻页深度
每页条数太少,页数迅速膨胀,抓取预算被摊薄;太多则单页体积变大,解析和渲染成本上升。可以结合日志观察:蜘蛛实际翻到第几页,哪些页码几乎从不出现。如果长期只抓到前三页,后面的内容就只能依赖 sitemap 和内链补充入口。
缩短路径的常用办法是在栏目页增加“最新”“热门”模块,或维护按时间归档的专题页,让旧内容有更浅的入口,而不是只能靠一页页翻过去。
参数与伪静态要统一
?page=2 与 /page/2/ 本身都能用,问题在于同一个列表出现多种可访问形式,且都正常返回。建议固定一种,其余做重定向,避免同一份列表堆出多套地址,也避免和其他筛选参数叠加成大量组合。
自查清单
- 随机挑三个栏目,禁用 JS 后看分页链接是否仍在 HTML 中。
- 检查分页页的 canonical 是否指向自身。
- 翻到最后一页,确认没有空白页或循环跳回第一页。
- 测试超出总页数的页码,确认返回 404 或 410,而不是 200 的空列表。
- 在日志中统计分页 URL 的抓取频次与状态码分布。
- 确认分页参数不会与排序、筛选组合成大量可访问地址。
分页不是排版细节,而是内容能否被逐层发现的基础设施。先让翻页链接可抓,再谈每页放多少条。