在蜘蛛池里观察日誌时,很多人會看到同一條連結被蜘蛛反复訪問。次數一多,容易判断為“蜘蛛很喜欢”,但更常见的情况是:池子里存在多個看起来不同、實际指向同一内容的 URL。蜘蛛按 URL 去重,不按頁面内容去重,所以只要 URL 字符串不同,它就可能当成新地址重新抓取。
蜘蛛按 URL 识別,不按頁面识別
搜尋引擎蜘蛛的抓取队列以 URL 為基本單位。两個地址如果只有大小寫、末尾斜杠、參數顺序的差別,在蜘蛛眼里仍是两條 URL。入口頁里只要混入這些變体,抓取次數就會成倍增加。對蜘蛛池来说,這未必是好事:抓取预算被消耗在重复地址上,真正需要被發現的新 URL 反而排到後面。
常见的重复来源
- 參數顺序與冗余參數:同一個頁面通過 ?a=1&b=2 和 ?b=2&a=1 都能打開,入口頁又分別鏈了两次。
- 大小寫混用:服務器不区分大小寫,但 URL 字符串区分,/Page 和 /page 會被当成两條。
- 末尾斜杠:/url 與 /url/ 返回同一内容,却没有做 301 归一。
- 會话 ID 與跟踪參數:入口頁跳轉时带上了 utm、sessionid 等參數,蜘蛛跟着抓取後生成大量變体。
- 多入口頁互鏈:同一個目标 URL 被多個入口頁以不同形式連結,且没有统一規范化。
- 重定向鏈:中間跳轉頁與最终頁都被蜘蛛抓取,日誌里出現两次以上。
去重检查清單
- 先看服務器日誌,按 URL 字符串分组,找出訪問次數異常高的地址。
- 检查這些 URL 是否返回 200 且内容相同,還是分別返回了 301、302 或 404。
- 確認协议、域名、大小寫、末尾斜杠、預設端口是否统一。
- 检查入口頁生成連結时,是否给内鏈附加了跟踪參數或會话 ID。
- 检查跳轉逻辑:能直達的 URL 不要绕中轉頁;必须跳轉时固定用 301。
- 在 robots.txt 或頁面 meta 中處理無意义的參數變体,但不要誤封需要抓取的主路径。
去重的目标不是让日誌里的蜘蛛次數變少,而是让每一次抓取都落在一個有效 URL 上。
入口頁和 URL 入池时的习惯
在 URL 入池前做一次規范化,比事後從日誌里清理更省力。可以约定:统一使用小寫路径、统一去掉末尾斜杠、只保留必要參數、跳轉统一用 301、同一目标只保留一個主入口。對蜘蛛池来说,入口頁互鏈时也尽量用同一個規范地址,避免同一個目标在池子里出現多個“身份”。
如果發現某條 URL 被反复抓取,先不要急着删入口頁。把日誌、响應狀態和入口頁連結形式對照一遍,通常能找到具体来源。處理完之後再观察一段時間,看抓取是否落到新 URL 上。蜘蛛池擅長的是 URL 發現,不是替你做全站規范化;把 URL 本身整理清楚,池子的抓取才更有效。