站点里的列表页往往承担着最重的 URL 发现职责:文章列表、商品分类、标签聚合、站内搜索,几乎所有详情页都是靠它们被蜘蛛第一次看见的。也正因为如此,分页处理得粗糙时,蜘蛛会在列表页之间来回消耗配额,真正的新页面反而排不进队列。
先看清自己用的是哪种翻页写法
- 路径式:/list/page/2/ 这种形式。可抓、可缓存、可单独分享,是相对稳妥的做法。
- 参数式:/list?page=2。同样能抓,但要和排序、筛选、跟踪参数区分开,避免组合爆炸。
- 纯脚本翻页:点击按钮后由 JavaScript 追加内容,地址栏不变。蜘蛛如果拿不到渲染结果,就只能看到第一页。
- 无限滚动:本质上和上一种相同,只是把按钮换成了滚动事件。
给蜘蛛留一条能走的路
翻页不必做得漂亮,但链接要真实存在于 HTML 里。下面几条是底线:
- 分页链接用 a 标签的 href 输出,而不是绑定点击事件的 div 或 span。
- 第一页和后续页互链,不要出现只能从第一页跳到第 N 页、却回不来的情况。
- 翻页控件里的数字只做辅助,真正要保证的是“上一页 / 下一页”这两个链接始终存在。
- 地址栏里的 URL 与链接 href 保持一致,避免用户看到 A 地址、蜘蛛拿到 B 地址。
深层页码要不要全部放开
一个分类下有五百页,全部让蜘蛛抓完通常并不划算:靠后的页码内容重复度高,能带来的新 URL 也有限。常见做法是给翻页设一个深度,比如前五到十页正常可抓,更深的页码不输出可抓链接,改为引导用户用时间归档或筛选去找。这属于取舍,不是规定,判断依据是:深层页码上还有多少没被收录过的详情页。如果新内容都集中在前面几页,就没有必要把尾巴全部展开。
查看全部、排序与筛选
“查看全部”这类页面如果一次列出几百条链接,对新站的抓取配额是不小的压力,但它的 URL 发现效率又确实很高。折中方式是把“查看全部”限制在条目较少的分类,或者改成按时间、按首字母切分的归档页,让每个页面只装几十条链接。
排序和筛选参数建议单独治理:只保留默认排序可抓,其余组合通过 robots.txt 或页面上的链接形态控制,别让排序参数、标签参数、来源参数互相相乘。
无限滚动的替代入口
如果产品坚持无限滚动,至少要补一个分页版本:在列表底部输出“下一页”的真实链接,或提供一个按页码访问的地址,并在 sitemap 里把重要的列表页列出来。对蜘蛛来说,有人工入口的地址,比需要交互才能出现的地址可靠得多。
一份可以照着做的检查清单
- 列表页首屏 HTML 里,至少能看到一条指向下一页的链接。
- 翻页地址的 canonical 指向自身,而不是全部指向第一页。
- 分页页面的标题和描述有区分,不是整站复制同一份。
- 空列表返回 404 或明确的空状态,而不是内容为空的 200。
- 筛选、排序后的地址不进入 sitemap。
- 列表页上的详情链接是直链,不经过跳转中转。
分页只是列表页的附属结构,真正要保证的是:新内容发布后,从首页出发走两三次点击就能被链接到。翻页做得再规范,如果新条目只出现在深层页码里,同样容易被漏掉。