列表页承担了大部分 URL 发现
对内容型站点来说,除了首页,蜘蛛发现新 URL 最集中的地方就是列表页和分类页。详情页之间往往互不相连,或者只连向少数相关页面,真正把全站串起来的还是列表页。所以列表页的翻页结构,直接决定了蜘蛛能走多深、多久能把新内容走一遍。
三种常见翻页写法,蜘蛛看到的差别很大
数字页码链接
形如 /list?page=2 或 /list/2 的链接排成一排时,蜘蛛可以从任意一页跳到前后几页,路径短,覆盖也稳定。需要注意的只是页码条别太长,一屏塞进几十个链接会摊薄站内链接的指向,但对抓取本身通常不是问题。
只有上一页、下一页
这种结构对用户友好,对蜘蛛来说却是一条链:要先抓到第 2 页,才能拿到第 3 页,再拿到第 4 页。链路越长,末端页码被抓到的机会越小。想让它走到后面,可以在前几页里给出跳到靠后页码的入口,或者用 Sitemap 补一份分页 URL 清单作为辅助。
加载更多与无限滚动
如果翻页靠按钮点击、靠 JS 拼接下一批数据,而 HTML 里没有对应的普通链接,蜘蛛通常点不到。比较稳妥的做法是给每一批内容配一个真实可访问的 URL,并在页面里放上 a 标签,让用户和蜘蛛都能沿着链接走过去,而不是只依赖脚本触发。
别让分页掉进循环
有些站点给翻页叠加了时间戳、会话参数或排序参数,同一批内容会生成大量不同 URL,蜘蛛越走越多,抓取额度被消耗在重复页面上。可以往几个方向收敛:
- 保持分页 URL 参数的名称、数量和顺序稳定,不要每翻一页就多出新参数;
- 给分页设一个合理的页码上限,更早的内容用归档页或按时间切分承接;
- 列表内容没变时,同一页的 URL 保持稳定,避免每次刷新都生成新地址。
canonical 别把分页统一指向第一页
一个常见的误操作是,把第 2 页到第 N 页的 canonical 全部指向第 1 页。这样蜘蛛会判断后面几页属于重复内容,减少继续深入,页面上独有的那批详情页链接也就失去了被发现的机会。分页页面一般把 canonical 指向自身;如果确实想表达这是同一列表的延续,也要留意别把后续页面变成没有抓取入口的死角。
怎么确认蜘蛛真的翻到了后面
去看服务器日志里列表页的请求分布:如果第 2 页有请求,第 5 页之后几乎为零,问题多半出在链接结构或链路太长,而不是蜘蛛不愿意来。也可以对照抓取统计中各类页面的占比,列表页长期接近于零,说明入口没有被有效暴露出去。
几点落地建议
- 在列表页给出跳到较后页码的入口,减少纯链式翻页带来的深度;
- 翻页用可抓取的 a 标签,加载更多同时保留普通链接;
- 限制分页参数组合,避免同一批内容产生大量变体 URL;
- 列表里的详情链接数量保持合理,把抓取引导到更重要、更新的内容上;
- 新内容上线时让它出现在靠前页码或置顶位置,比等蜘蛛慢慢翻到后面更可控。
翻页结构的作用不是把蜘蛛留在列表页,而是把该被发现的详情页尽快交出去。