列表页和分页往往是站点里数量最多、也最容易被忽略的一类地址。一个栏目有几百篇文章,就会顺带产生几十个翻页地址;这些页面既是用户浏览的路径,也是蜘蛛发现新内容的主要入口。翻页逻辑一旦写得不讲究,轻则浪费抓取资源,重则让蜘蛛在无穷序列里打转。
先弄清楚你有哪些列表页
动手调整之前,先把列表类地址数一遍:栏目首页、标签页、作者页、搜索结果页、按时间归档页、按分类组合的筛选页,都属于这一类。接着分个类,哪些是用户真会用的,哪些只是系统顺带生成的。分完之后判断标准会清晰很多——给用户用的页面值得好好维护,系统顺带生成的页面则要考虑是否该让蜘蛛访问。
分页常见的几种毛病
- 无限翻页:第 200 页、第 500 页都能打开,内容早已没有实际价值,蜘蛛一页页爬过去,真正的新文章反而没被及时抓到。
- 翻页地址不固定:同一个列表既能用 /list?page=2,也能用 /list/page/2,还有带排序参数的第三种写法,同一批内容被反复消耗抓取预算。
- “加载更多”只对用户可见:按钮背后靠脚本拼接,地址栏不变,蜘蛛按不到下一页,列表后半部分基本不会被发现。
- 列表页塞了太多摘要或全文:列表与详情内容高度重复,蜘蛛要花更多时间判断谁才是主版本。
- 翻到最后一页仍有“下一页”:用户和蜘蛛都会点进一个空列表。
翻页怎么实现,先做取舍
传统参数翻页
结构清晰、可以直接被链接,是最省心的做法。要注意保持参数唯一,别让排序、每页条数等参数组合出成百上千个变体。必要时可以在 robots.txt 中限制带排序参数的路径,或对这类地址做规范化处理。
“加载更多”与无限滚动
这类交互对用户友好,但需要额外补一条抓取路径。常见做法是给每个翻页状态一个真实地址,或者保留一个“查看全部/下一页”的普通链接,让不支持脚本的访问者也能走到后面的内容。
一份可以照着做的自查清单
- 随机挑三个栏目,手动翻到第 5 页,看地址有没有重复或跳变。
- 检查分页链接是不是普通的 a 标签,能否直接复制打开。
- 确认最后一页之后不再输出“下一页”链接。
- 看列表页摘要字数是否过多,尽量只保留标题、时间和一两行简介。
- 检查空列表页(筛选后无结果)返回的状态,不要用 200 硬撑。
- 在服务器日志里看看蜘蛛是否长期停留在翻页地址上,详情页抓取量是否被挤压。
- 评估标签页与归档页的总量,过多的低价值列表考虑收敛。
几个容易被忽略的细节
分页地址的页码最好从 1 开始,并且不要让 /list 和 /list?page=1 两种形式同时存在。列表页的标题可以带上页码或类别,但不要简单复制栏目名,否则几十个页面标题会完全一样。另外,如果站点会随时插入新内容,第 2 页之后的内容会整体后移,保持长期稳定的抓取节奏,比一次性把所有页码提交出去更有意义。
把分页当成站点结构的一部分来管理,而不是模板自动生成的副产品,抓取路径会清楚很多。
分页自查的目标不是让每一页都被抓取,而是让蜘蛛把有限的时间花在真正值得收录的地址上。