蜘蛛在一個站点里走動,靠的是頁面上的連結。如果連結的指向關系里存在循环——A 頁指向 B 頁,B 頁又指回 A 頁,而且這種往返在多组頁面之間重复出現——蜘蛛就會在同一個圈里反复進出。它不會报错,也不會停下,只是把時間花在了已经抓過的地址上。
循环是怎么形成的
大多數循环不是刻意做出来的,而是内容结构自然生長的结果。当一個頁面同时承担導航、聚合、推荐三種角色时,它指向的地址往往和上級頁面指向的地址高度重合。
- 分類與子分類互鏈:父分類列出子分類,子分類又用「上級分類」連結回到父分類,再叠加「相關分類」,形成多條来回路径。
- 分頁首尾互指:第 1 頁放了「最後一頁」,最後一頁又放了「第 1 頁」,中間每一頁都带全量頁碼,路径數量随頁數迅速放大。
- 标簽頁與内容頁互鏈:文章列出所属标簽,标簽頁又列出全部文章,循环随着文章數量增加而變密。
- 篩選與排序參數:同一批内容被不同參數组合反复串起来,产生大量指向相同地址的入口。
- 導航、面包屑、相關阅讀重叠:三處入口指向同一批 URL,蜘蛛每到一個頁面都要重新篩選一遍。
為什么循环會被放大
單看一個頁面,多几個連結没什么。但蜘蛛是按路径走的,任何一條新路径都會和其它路径重新组合。頁面 A 有 50 個出口,其中 20 個又各自有 50 個出口,可走的路线數量是乘法關系,而其中真正没被抓過的地址可能只有几個。循环的代價不在于慢一次,而在于重复。
判断一段連結结构好不好,不看它指向了多少頁面,而看它把蜘蛛引向了多少新頁面。
怎么判断站里有多余的循环
不用复杂的工具,先看两個地方:一是服務器日誌中同一批 URL 被反复請求的频次,尤其是那些内容几乎不變的列表頁;二是 Sitemap 和實际内鏈的對比,如果一份地址清單里的頁面明明有内鏈支撑,却仍然被反复抓取且長期没有變化,那多半是路径设計的問题,而不是蜘蛛「偏爱」這些頁面。
收口的几種做法
- 面包屑只保留层級關系:首頁 → 分類 → 子分類 → 詳情,不再額外追加同級跳轉或「相關分類」。
- 分頁不做全量互连:保留上一頁、下一頁和首尾跳轉即可,頁碼列表可以按区間折叠,不必让每一頁都指向所有頁碼。
- 给标簽和聚合頁设门槛:内容量過少的标簽頁不要輸出到全站導航,也不要在文章底部無差別展開。
- 參數地址單獨收口:排序、篩選類參數用统一的規范地址承接,避免同一批内容出現多個入口。
- 相關阅讀限量:模块内控制在固定條數,並尽量與導航、标簽列表指向的地址错開,减少完全重叠的出口。
- 用 Sitemap 补深层頁面:把重要但不适合放在導航里的頁面寫進地址清單,让蜘蛛從入口直接到達,而不是靠一圈圈翻頁。
收口时要留意的反作用
删連結比加連結更容易出問题。有些頁面唯一的入鏈就是那條「多余」的互鏈,一旦去掉,它就成了孤岛。收口之前先確認目标頁面還有没有別的入口,尤其是較老的詳情頁、专题頁和地区頁。必要时用 Sitemap 或一處稳定的列表入口替上,再断開循环連結。
结语
抓取路径的设計目标很简單:让蜘蛛每走一步,都更接近一個它還没看過的地址。循环不是错誤,只是没有产出的往返。把往返压下来,新内容的發現速度通常會跟着改善。