搜索蜘蛛对每个站点能投入的抓取量是有上限的。当站点的 URL 数量远远超过这个上限时,URL 发现就不再是“有没有入口”的问题,而是“排队排多久”的问题。同一个入口写下的链接,被走过的时间可能相差几天甚至几周。理解这种优先级差异,比单纯增加入口数量更有用。
为什么会有优先级差异
蜘蛛发现一个 URL 之后,并不能立刻抓取。它需要把这个地址放进待抓取队列,等待调度。队列里既有你期待被抓的页面,也有参数组合生成的页面、早已下线的地址,以及其他站点留下的历史记录。谁先被取走,取决于地址本身的特征和入口给出的信号。
值得优先排队的几类地址
- 有明确搜索需求的页面:能对应真实搜索意图的商品、文章、服务说明页。
- 栏目页与列表页:它们本身承载分类价值,同时是把详情页带进发现队列的通道。
- 更新频繁且有内链支撑的页面:首页或栏目里稳定出现的位置,比偶尔出现一次的链接更有分量。
- 已上线但尚未被发现的新内容:越早进入队列,越早开始它自己的生命周期。
可以先放一放的地址
并不是所有地址都值得占用队列位置。筛选参数、排序参数、会话标识组合出来的页面,往往数量庞大而内容接近;只有空壳结构的聚合页,抓取后也拿不到有效内容;已经下线的旧地址如果仍被大量内链指向,会持续消耗抓取资源。这些入口可以用 robots.txt、nofollow 或者直接撤掉链接来收敛。
用内链位置表达优先级
蜘蛛不会读你的主观判断,它读的是链接所在的位置和数量。首页和主导航里的链接,通常会被认为比页脚更重要;正文中自然出现的链接,又比堆在侧边栏的链接更值得走。一个页面如果从三个不同栏目都能点到,它进入队列的概率会明显高于只有一个入口的页面。
反过来,如果重要页面的唯一入口藏得很深,需要从首页点五次才能到达,那么它被发现的时间就会被拖长。这种情况下,把它提到栏目页或者相关推荐区域,效果往往比在 Sitemap 里多写一行更直接。
Sitemap 与日志的配合
Sitemap 是批量声明地址的地方,但它的作用是“告诉”,不是“命令”。如果 Sitemap 里的 lastmod 全部写成同一个时间,或者每次生成都刷新一遍,这个字段就失去了参考意义。更实际的做法是只保留真实更新的时间,并把变动不大的老页面定期清理出去。
想知道哪些入口真的被走过,日志比猜测可靠。观察日志里蜘蛛对某个目录的访问频率、返回码分布,以及是否有大量地址只被访问过一次就再无回访,能帮你判断当前的入口设计是不是把资源浪费在了低价值地址上。
服务器端的配合不能省
队列里的地址再多,抓取时服务器响应慢或者频繁返回 5xx,蜘蛛也会主动降低抓取节奏。响应时间稳定、跳转层级少、不要在小流量时段做长时间的全站维护,这些基础工作做扎实了,前面所有关于入口的安排才有意义。
URL 发现的关键不在于让蜘蛛看到更多地址,而在于让它先看到你真正需要被看到的那些。