很多站点的详情页并不是从首页直接链出去的,而是藏在列表页翻页之后。蜘蛛顺着分类页、标签页、搜索结果页一路往下走,能不能走到深层详情页,分页这一环起了很大作用。
蜘蛛眼里的分页长什么样
同一个列表,前端可以做成三种形态,蜘蛛看到的东西差别很大。
- 传统翻页:每页有上一页、下一页、页码链接,都是可点击的 a 标签。蜘蛛可以顺着链接逐页往下,路径清晰。
- 加载更多:点击按钮后通过 JS 拉取下一页内容。如果按钮本身不是链接,蜘蛛通常不会去点,只能看到第一页。
- 无限滚动:滚动到底部自动加载。蜘蛛不执行滚动,也不会主动触发,后面的列表内容基本不可见。
所以,如果希望蜘蛛发现更多详情页,传统翻页最直接;加载更多和无限滚动则要额外补一条可抓取的路径。
分页 URL 要能独立访问
有些站点的分页只是在当前 URL 上改参数,比如 ?page=2,这没问题,但最好让每个分页地址都能直接打开。蜘蛛拿到 ?page=2 这个 URL 后,如果返回的是和第一页一样的内容,或者被重定向回第一页,它就可能不再继续往后爬。
分页页要不要被索引,是另一个问题。常见做法是:分页页本身可以不索引,但不要切断链接。用 noindex,follow 比用 nofollow 更合适,前者告诉蜘蛛不必收录分页页,但可以继续跟链接;后者会让蜘蛛不再顺着这一页往下发现详情页。如果分页页是筛选参数产生的重复列表,也可以考虑用 canonical 指向主列表,但要注意不要把所有详情页的发现路径一起收掉。
翻到第几页才值得
分页不是越深越好。蜘蛛的抓取资源有限,站点也未必需要让第 200 页的列表被完整抓一遍。更实际的做法是:
- 把重要详情页通过分类、标签、相关推荐、热门列表等内链,放在较浅的位置。
- 对时间久远、流量极低的分页列表,可以保留可访问但不必强求抓取。
- 避免产生大量空列表页,比如筛选组合后没有结果,却仍然返回一个可翻页的列表。
- 分页参数不要无限组合,否则蜘蛛会陷入参数组合的循环。
如果详情页更新频繁,Sitemap 可以作为补充入口。把新发布或更新的详情页放进 Sitemap,蜘蛛就不必只依赖列表页翻页来发现它们。
服务器与查询性能也会影响分页抓取
分页列表通常需要查数据库、排序、拼装。如果每页查询都很慢,蜘蛛连续翻页时可能遇到超时或 5xx,抓取就会中断。给列表页做缓存、限制每页条数、避免在分页查询里做复杂统计,能让蜘蛛更顺畅地走完路径。分页越深,查询成本往往越高,这也是深层分页不一定要全部放行的原因之一。
用日志看蜘蛛走到哪里
想知道分页有没有起作用,可以看抓取日志里蜘蛛访问了哪些分页 URL,以及详情页是否在合理时间内被访问。常见信号包括:蜘蛛只停在第一页、加载更多按钮后的 URL 从未出现、分页页返回 200 但后续详情页很少被爬。根据这些信号,再决定是补可抓取链接、调整分页索引策略,还是用 Sitemap 和内链把详情页往前挪。
分页是发现路径的一部分,不是唯一入口。把可抓取链接、合理的内链和 Sitemap 配合起来,比单纯加深分页更稳定。