蜘蛛在站内来回走,本来很正常。但如果日誌里出現大量结构相似、层层叠加的 URL,而且抓取量大多落在這些頁面上,主干内容反而没被訪問几次,那就值得检查是不是形成了抓取回路。
抓取回路是什么样子的
回路不一定是個死循环,更多时候是路径可以無限延伸。蜘蛛每走一步都能拿到新連結,于是它顺着走,但走出来的頁面價值越来越低。
- 參數叠加:篩選、排序、视图切換等參數可以任意组合,同一個商品列表能生成成百上千個 URL。
- 日歷翻頁:归档頁可以一直往前翻,越翻越早,越翻越薄。
- 會话與追踪參數:每個訪客看到不同 URL,蜘蛛也會被带着走。
- 软 404 构成的伪頁面:不存在的篩選條件也返回 200 和一套空列表,蜘蛛會把它当成有效頁面繼續跟。
- 重定向环:A 跳 B、B 跳 A,或者規則没寫完導致鏈條拉長。
回路消耗的不只是抓取预算
最直接的影响是抓取预算被分摊。蜘蛛一天能抓的頁面數量大致有上限,多抓一批空列表,就少抓一批真實内容。
其次是服務器压力。這類請求往往還带有查询參數,命中缓存的概率低,資料库压力更大。服務器一旦變慢,蜘蛛排队等待,整体抓取效率下降,形成负反馈。
還有一层不容易被察觉:新 URL 的發現效率變差。蜘蛛在舊回路里打轉,新發布的頁面被發現的时机就可能往後推。
從日誌里認出回路
- 按 URL 路径前缀做聚合,看哪些前缀下 URL 數量異常膨胀。
- 观察带查询參數的請求占比,以及參數组合的分布是否發散。
- 看抓取深度:從入口算起,被訪問 URL 的层級是不是普遍很深。
- 核對狀態碼,区分真 404、软 404 和返回 200 的空頁面。
- 對比主干内容的抓取频次,看是否被邊缘頁面挤占。
用内鏈和 URL 设計把路径收回来
處理回路的核心思路是给路径设邊界,而不是简單地把整片目錄挡掉。挡得太多,正常内容也會一起失去被發現的机會。
- 篩選頁限制维度:允许單條件篩選被抓,多條件组合要么不生成可抓連結,要么只保留有搜尋需求的一小部分。
- 分頁設定终点:明确最後一頁,没有下一頁时就不要繼續輸出可抓連結。
- 面包屑與栏目内鏈:让每個深层頁面都有一條回主干的路径,蜘蛛能原路返回,而不是越走越偏。
- 規范連結:對參數變体声明規范地址,降低重复 URL 的抓取價值。
- Sitemap 只放主 URL:把希望被優先發現的地址集中列出,不要把參數變体也塞進去。
服務器侧配合
空结果頁應该返回合适的狀態碼,而不是一律 200。重定向鏈條控制在一次以内,避免多次跳轉。响應時間保持相對稳定,比偶尔很快、偶尔超时要好,因為不稳定的响應會让蜘蛛放缓节奏。
回路問题的判断标准不是蜘蛛抓了參數頁,而是蜘蛛把主要精力花在了没有價值的路径上。先量化,再收敛。
最後提醒一句:robots 屏蔽和 noindex 都是最後的收口手段。優先從生成源头减少 URL,其次是内鏈收敛,實在控制不住的少部分再考虑屏蔽。每次改動後回到日誌里看一遍抓取分布有没有變化,比一次性大改更容易判断效果。