蜘蛛在队列里记錄的不是“某個頁面”,而是一條條 URL 字符串。只要字符串不同,它就會当成不同资源去抓。很多站点並不是内容少,而是同一份内容被拆成了好几條 URL,抓取動作重复發生,日誌里看起来热闹,實际有效覆盖並没有增加。
常见的重复 URL 来源
以下情况在日誌和 Sitemap 中经常同时出現:
- 协议與主机名:http 和 https、带 www 和不带 www、带預設端口和不带端口,如果都能返回 200,蜘蛛就可能各抓一遍。
- 大小寫混用:/Page 和 /page 在多數服務器上等價,但蜘蛛按字符串区分。
- 末尾斜杠:/a 與 /a/ 是否都返回頁面,取决于服務器配置。
- 參數顺序與冗余參數:?a=1&b=2 和 ?b=2&a=1、跟踪參數、會话 ID、排序參數,都會生成新 URL。
- 路径重复斜杠與编碼://a、/a%2Fb 這類寫法如果服務器不归一化,也會進入抓取队列。
- 分頁與篩選组合:同一列表頁因排序、每頁數量、篩選條件产生大量可抓 URL。
重复抓取带来的實际影响
最直接的是抓取预算被摊薄。蜘蛛把時間用在重复版本上,新頁面和重要更新頁面的發現就會變慢。其次是索引信号分散:外鏈和点击可能指向不同版本,權重和 canonical 判断容易摇摆。第三是日誌噪音變大,排查真實抓取問题时更难看清哪些 URL 值得關注。對服務器来说,重复請求也會增加無意义的响應压力。
把 URL 收敛到規范版本
處理思路不是把重复 URL 全部屏蔽,而是明确一個規范版本,並让站内站外都指向它。
- 确定唯一規范:协议、主机名、大小寫、末尾斜杠、參數規則都要定下来,寫進站点配置和編輯規范。
- 用 301 跳轉舊版本:能永久跳轉的重复入口尽量用 301,而不是返回 200 或 302 長期挂着。
- 頁面加 canonical:不能跳轉或需要保留的變体,用 canonical 指向規范 URL,並确保 canonical 本身可訪問、返回 200。
- 内鏈和 Sitemap 保持一致:導航、面包屑、分頁、Sitemap 只輸出規范 URL,避免站内自己制造重复入口。
- 處理跟踪參數:對营销參數、會话參數设定统一規則,能忽略的忽略,必须保留的用 canonical 或跳轉收敛。
- 用日誌驗證:观察蜘蛛是否還在抓非規范版本,以及規范版本是否被稳定抓取。
几個容易做错的地方
不要把有獨立内容價值的篩選頁一刀切跳走,否則可能损失真實入口。canonical 與 301 不要互相矛盾:一邊跳轉一邊 canonical 指向另一個地址,蜘蛛會反复確認。CDN 缓存键如果包含完整查询串,也可能让同一頁面在邊缘节点出現多個副本,需要和缓存配置一起检查。
URL 規范化不是一次性設定,而是内容發布、模板改動和营销活動都要遵守的约束。
结语
定期從服務器日誌里抽样,看看蜘蛛抓取的 URL 中有多少是規范版本、多少是重复版本。重复比例高时,優先检查 301、canonical、内鏈和參數規則,通常比繼續加 Sitemap 條目更能改善抓取效率。