一个站点里被蜘蛛抓得最多的页面,往往不是文章详情页,而是各类列表:栏目首页、分类页、标签页、搜索结果页以及分页。它们数量不多,却承担着把蜘蛛引向深层内容的任务。翻页路径一旦断了或者太绕,蜘蛛就很难继续往里走。
列表页是蜘蛛的主干道
从抓取路径的角度看,首页到栏目的链接、栏目到详情页的链接,构成了蜘蛛的主要行进路线。详情页之间通常互链很少,蜘蛛想发现新内容,多半得回到列表页。所以列表页的第一屏要足够稳定:链接是普通的 a 标签,href 指向真实可访问的 URL,而不是依赖点击脚本才生成。
翻页链接的几种写法
路径式分页
/list/page/2/ 这类写法每一页都是独立 URL,蜘蛛可以直接抓取,也方便做缓存与统计。需要注意的是页码不要无限生成,超出内容范围的页码应当返回明确的状态码或跳回列表首页,而不是渲染一个空列表。
参数式分页
?page=2 这类地址同样能被抓取,但同一套分页参数在不同栏目下含义要一致,不要一会儿从 0 开始,一会儿从 1 开始,否则容易产生大量语义重复的 URL。这类页面可以保持可抓取,同时用 canonical 指向规范形式,减少同一内容被反复处理。
无限滚动与加载更多按钮
如果翻页完全由滚动或按钮触发,且没有对应的 URL 变化,蜘蛛在 HTML 里看不到后续链接。常见的补救方式是保留一套可抓取的分页地址,让滚动加载只是前端体验的增强。
核心判断标准其实只有一个:HTML 源码里有没有指向下一页的普通链接。
列表页本身不要太薄
有些列表页只有标题和时间,摘要、封面、分类信息一概没有,内容体量与详情页相差很大,蜘蛛对这类页面的重抓意愿通常不高。适当保留摘要和结构化信息,既方便用户浏览,也让列表页本身有被索引的价值。
给蜘蛛留出口的几个做法
- 分页序列保持连续,不要出现第 1 页有第 2 页链接、第 2 页却只链回第 1 页的断点。
- 列表底部可以放几个相关分类或热门链接,作为翻页之外的补充路径。
- 页码深度比较大的栏目,可以考虑拆成多个子列表,避免所有内容都挤在一条翻页链上。
- 避免用 200 状态码返回空列表,出错时用明确的状态码表达。
服务器层面的影响
翻页请求往往集中在同一段时间,数据库压力比详情页更集中。如果列表页响应慢或间歇性超时,蜘蛛容易在中途停下,后续页码就不会被抓到。缓存列表页、限制单次返回条数、把排序和筛选逻辑做得更轻,都是顺手能做的优化。
列表页不只是给用户看的门面,也不只是给蜘蛛看的目录,它更像一条路。路要通、要连续,蜘蛛才走得下去。
怎么自己检查一遍
- 关掉 JavaScript,看列表页能否用鼠标点到下一页。
- 用抓取工具模拟蜘蛛访问栏目首页,确认返回的是完整 HTML。
- 抽查第 5 页、第 10 页,确认状态码、canonical 与内容都正常。
- 对照服务器日志,看蜘蛛是否只停在第一页,后续页码几乎没有请求。
这些检查不需要复杂工具,重点是把自己当成沿着链接一步步走的蜘蛛,看看这条路从哪一页开始走不通。