很多站点的 URL 发现并不是断在首页,而是断在列表的第二页。首页和新发布的文章被反复抓取,翻到第三页之后的详情页却迟迟没有动静。问题往往不在内容本身,而在分页链接是否构成一条搜索蜘蛛能走完的路径。
分页为什么会断在第二页
列表页常见两种写法:一种是真的用 a 标签指向 ?page=2,另一种是按钮点击后由脚本拼出新地址。前者至少留下一条可跟随的链接,后者在未渲染的情况下等于没有入口。
- “加载更多”只改 DOM、不改变 URL,蜘蛛翻不动。
- 分页地址只写在 onclick 或 data 属性里,标签中没有 href。
- 第二页以后被 noindex 或 robots 规则挡住,链接还在,路径却到此为止。
- 列表按时间倒序排列,重要但较旧的条目被推到很深的页码。
可跟随的分页入口该是什么样
比较省事的做法是让分页本身是一组静态可达的链接:上一页、下一页、页码数字都用 a 标签带 href,地址中的参数稳定,不随会话或推荐位变化。这样即便某一页内容没有单独索引价值,蜘蛛也能顺着它走到更深的条目。
页码很多时,可以把扁平列表拆成若干层级:栏目页 → 月份或分类归档页 → 详情页,用归档页把抓取路径深度压下来,而不是让蜘蛛一路点到第五十页。归档页本身也能作为长期存在的入口,比临时参数页更稳定。
无限滚动与“加载更多”的处理
纯无限滚动对 URL 发现最不友好,因为滚动过程中不会产生新地址。常见的折中方式是分页与滚动并存:首屏给出若干页可点击的链接,滚动只作为浏览体验的补充;或者在每次加载额外内容时同步更新 URL,让地址可以被复制、被引用,也方便蜘蛛跟随。
分页参数与可索引性
分页地址要不要被索引,取决于它有没有独立价值。纯粹的“第 N 页”通常只是入口而不是内容,但把它完全挡掉,也会顺带切断后面的路径。更稳妥的处理是:保留链接可抓取,用 canonical 指向该分页自身或对应的聚合页,避免同一批条目被多条排序参数重复发现。
排序、筛选类参数尤其容易膨胀出大量近似地址。可以用 robots 规则或参数处理工具收窄,但要注意别把带页码的常规分页一并挡掉——一旦挡住,第二页之后的详情页就只剩下 Sitemap 这一条路了。
用 Sitemap 兜底分页地址
当分页路径不可控时,Sitemap 是补充分页入口的常规手段:把归档页和主要分页地址按实际可访问的 URL 列进去,保持 lastmod 与真实更新一致。它不保证被抓取,但至少让这些地址不再完全依赖某条容易断掉的链接链。
用日志验证到底走到了哪一页
与其猜,不如看日志:筛选列表页地址,看蜘蛛请求到第几页就停了,是不是每个分页只被抓过一次,某一页之后突然为空。经常能从中发现某页返回 500、某页跳到登录页,或者分页参数在不同 UA 下表现不一致这类具体问题。
分页不是给蜘蛛看的展示页,而是通往详情页的路。路断了,后面的内容再有价值也很难被发现。