列表页往往是一个站点里 URL 发现能力最强的地方。详情页再多,如果蜘蛛进不来,等于不存在;而蜘蛛进入详情页的主要通道,通常就是那些按顺序排列的列表与分页。翻页方式设计得合不合理,直接决定了蜘蛛能走多深、能发现多少条 URL。
传统数字分页:对蜘蛛最友好的一种结构
形如 /list/page/2/ 或 /list?page=2 的分页链接,是蜘蛛最容易处理的形式:它是一个真实的 a 标签,href 指向一个独立 URL,点进去就是一个新页面。蜘蛛顺着 1、2、3 一路爬下去,每翻一页就多拿到一批详情页地址。
- 每个分页 URL 独立可访问,不要用 JS 点击事件代替链接。
- 页码链接出现在 HTML 源码里,而不是等 JS 执行之后再插入。
- 保留“下一页”链接的同时,也保留一段连续的数字页码,避免蜘蛛只能靠猜。
瀑布流与“加载更多”:蜘蛛可能只看到第一屏
无限滚动和“加载更多”按钮对用户友好,但对抓取路径不友好。如果新增内容是在用户滚动或点击之后由 JS 请求接口才渲染出来的,蜘蛛在 HTML 里往往只能看到最开始的十几条。按钮本身如果是 button 或 div,没有 href,蜘蛛也没有理由去“点”它。
常见的补救方式有三种:
- 在页面底部放一条真实的分页链接,指向带参数的下一页 URL,让不执行 JS 的抓取也能继续走。
- 让“加载更多”对应的接口地址在 HTML 中以链接形式出现,例如带 page 参数的静态入口。
- 用 Sitemap 分片把深层列表 URL 直接交给蜘蛛,作为路径之外的补充。
分页参数本身也要能被抓
可抓取性还取决于分页地址长什么样。带多个筛选参数的地址容易产生大量组合,蜘蛛会在这类页面上消耗掉不少抓取预算,却拿不到多少新 URL。相对稳妥的做法是:
- 排序参数、会话参数尽量别混进分页链接里,保持地址可预测。
- 分页页面的 canonical 指向自身,不要统一指向第一页,否则分页 URL 容易被判定为重复而减少被抓的机会。
- 筛选结果页超过一定组合量时,用 robots.txt 或 nofollow 收口,把路径留给真正需要被发现的页面。
让蜘蛛有一条走到底的路
列表很长时,蜘蛛通常不会一路翻到最后一页,越靠后的分页被抓的频率越低。想让深层内容仍有机会被发现,可以搭配几种手段:
- 时间归档页:按月份或分类归档,给老内容一个稳定的入口。
- Sitemap 分片:把深层详情页写进单独的 Sitemap 文件,用索引文件串起来。
- 相关推荐与内链:在详情页之间横向互链,让蜘蛛从任意一条被爬到的 URL 继续扩散。
判断路径是否通畅,不要只看页面在浏览器里能不能翻,而要看源码里有没有可抓取的 href。浏览器的滚动和点击,不会自动变成蜘蛛的抓取路径。
用日志验证,而不是靠猜
想知道分页到底被走到第几层,最直接的办法是翻服务器日志:筛出列表页和分页 URL,看它们的抓取频次怎么随页码衰减。如果第 2、3 页都很少被抓,后面的详情页自然发现得慢。这时优先调整分页链接的可抓取性和 Sitemap 覆盖,而不是盲目增加内容量。