分页是列表页最常见的结构,也是最容易被忽略的一块。栏目第一页往往有人盯着,翻到第 3、第 5 页之后,标题、摘要、内链几乎没人再检查。时间一长,分页页容易变成三种状态:重复的标题、稀薄的内容,以及一堆只有蜘蛛才会走到的地址。
为什么分页值得单独拿出来看
分页同时牵扯三件事:URL 发现、抓取预算、内容重复判断。它既是站内链接的骨架,也是同一个列表被切成多份之后的产物。
- 每页标题、H1 完全相同,搜索引擎难以判断哪一页该作为入口;
- 分页地址被当成独立页面参与排名,和第 1 页互相竞争;
- 翻页只写了 JS 点击事件,爬虫顺着走不下去,后面的内容长期不被发现;
- 每页只放三五条,翻到后面内容过于稀薄。
第一步:先确认分页的 URL 长什么样
把栏目翻到第 2 页、第 3 页,看地址栏的变化。
- 路径式:如 /news/page/2/,结构清晰,最容易处理;
- 参数式:如 /news?page=2,要留意别和排序、筛选参数混在一起,否则同一批内容会生出很多组合地址;
- 锚点式:如 /news#page=2,地址其实没变,后页内容对爬虫不可见;
- 无限滚动:滚动时用 JS 追加内容,URL 全程不变,通常只能被发现第一屏。
后两种如果确实要用,至少补一个可点击的分页链接区,让后页内容有真实地址可以进入。
第二步:标题与 H1 是否做了区分
有的站点所有分页都写同一个栏目名,结果几十个页面顶着同一张名片。建议给分页加上页序,例如栏目名加“第 2 页”,H1 与页面标题保持一致。摘要区域也尽量跟着页码变化,不要第一页和第五页展示完全相同的一段文字。
第三步:canonical 指向哪里
分页的 canonical 一般指向自身,也就是第 2 页指向第 2 页。把全部分页都指回第 1 页,等于告诉搜索引擎后页内容不必单独出现,翻页内容会逐渐从索引里消失。反过来,如果每个分页都被当成完全独立的页面去争排名,又容易互相分流。具体怎么选,要看这个栏目是希望第一页承担入口,还是希望后页的长尾内容也能被检索到。
判断标准可以简单一点:后页里有没有用户会搜索的内容。如果有,就让它以自身地址存在;如果只是把同一批内容换个顺序,就别再额外制造新入口。
第四步:翻页链接的抓取路径
打开页面源码,确认翻页是可点击的真实链接,而不是只挂了 JS 事件的按钮。真实链接爬虫能顺着走,按钮不能。
- 保留“上一页 / 下一页”和页码列表即可,不必把 1 到 50 页全部铺在页面上;
- “跳到最后一页”这类链接按需保留,它会让最后一页被反复抓取;
- 页码链接文字写清楚页序,不要全站统一成“点击这里”。
第五步:内容量与薄页面
每页条数太少,翻到第十页以后基本等于空页。可以适当加大每页条数,或者设置一个翻页上限,超出部分用归档页汇总。如果列表后面已经没有任何内容,记得返回正确的状态码或直接移除入口,而不是留一个空列表让爬虫反复来确认。
一份简易自查清单
- 翻到第 3 页,看标题、H1、摘要是否和第一页完全一样;
- 看分页 URL 形态,确认没有参数组合泛滥;
- 查 canonical,确认没有全部指回第一页;
- 看源码,确认翻页是可抓取的真实链接;
- 数一数每页条数,判断后页是否过于稀薄;
- 在日志里搜分页地址,看抓取频次是否正常。
观察一段时间再调整
分页改动通常不会立刻反映在索引上。改完之后,隔一段时间看被抓取的地址数量,看后页内容有没有出现在搜索结果里,再决定是否继续调整。一次性把分页结构、canonical 和每页条数全部改掉,出了问题很难定位到底是哪一步引起的。