看服务器日志时,很多人会发现一个现象:站内几千个 URL,搜索蜘蛛每次来却总围着首页、频道页和几篇老文章打转,新发布的地址要等很久才被碰到。抓取的起点不同,后面能走到的深度、能发现的 URL 数量也不同。与其反复提交地址,不如先搞清楚蜘蛛是怎么挑第一批访问对象的。
抓取起点由哪几件事共同决定
蜘蛛并不会平均分配注意力。它每一轮访问都有一批种子地址,这批地址的形成通常和下面几件事有关:
- 上一次的抓取结果:成功返回 200 且内容变化明显的页面,更容易进入下一轮的优先队列;长期返回 304 或内容几乎不变的页面,复查间隔会被拉长。
- 链接出现的位置:首页、频道首页、导航区的链接,比正文深处、分页末页的链接更容易被当成入口。
- Sitemap 与提交记录:Sitemap 里的 lastmod、提交接口推送过的 URL,会给蜘蛛一个“这里可能有新内容”的信号。
- 站点整体的抓取成功率:如果历史抓取里超时、5xx 偏多,调度会主动降低频率,起点数量也会缩水。
入口页的质量决定后面能走多远
蜘蛛从入口页出发,能走多深取决于这一页本身。如果入口页的 HTML 里能直接解析出足够的站内链接,而且这些链接指向的是有效、可抓取的地址,那么一次访问就能覆盖较多 URL。反过来,如果入口页体积很大、正文之外还挂着大量脚本,或者站内链接主要靠 JS 渲染,蜘蛛走到第一层可能就停住了。
入口页不是“被访问了就够了”,它是后面一整条抓取路径的起点,链接是否可解析、是否指向有效地址,直接决定这条路能走多远。
用日志确认起点是否合理
- 先按 UA 和反向解析确认来访的是真蜘蛛,避免把普通爬虫的数据混进来。
- 把日志按天分组,统计每天首次出现的 URL,观察它们是从哪个页面被带出来的,看上一跳地址或 referer。
- 对比新发布内容与老页面的抓取次数,如果新 URL 长期没有被首次抓取,说明入口页没有把它们带出去。
- 检查入口页返回的状态码、响应时间和 HTML 大小,排除因页面本身问题导致的抓取中断。
服务器表现会改变下一轮的起点
抓取起点不是固定的。如果一段时间内响应时间明显变长,或者 5xx、超时集中出现,蜘蛛会减少并发、拉长访问间隔,下一轮可能只挑最熟的几个地址来看。稳定、可预期的响应,比偶尔的高速更能维持抓取节奏。
可以顺手调整的几件事
- 把真正需要被发现的新内容放进首页或频道页的固定位置,而不是只靠时间流自然滚动。
- 保持 Sitemap 的 lastmod 与实际更新时间一致,不虚报也不漏报。
- 给孤立的深层页面补一条来自相关内容的站内链接。
- 关注入口页的体积和渲染方式,让关键链接出现在初始 HTML 中。
抓取起点理顺之后,URL 的发现会更连续一些。它不会立刻改变收录结果,但能让蜘蛛每次来都有明确的路可走,也便于你从日志里判断问题出在哪一环。