搜尋抓取

大小寫、末尾斜杠與參數顺序:同一頁面被蜘蛛当成多個 URL 之後

同一個頁面,因為大小寫、末尾斜杠、參數顺序或追踪參數不同,在蜘蛛眼里會變成好几條地址,抓取预算就這样被慢慢消耗。本文讲清蜘蛛是按字符串去重的、哪些寫法最容易派生重复 URL、怎么用日誌確認是否真的重复抓取,以及從跳轉規則和模板連結两處入手的收敛思路。

搜尋抓取

大小寫、末尾斜杠與參數顺序:同一頁面被蜘蛛当成多個 URL 之後

很多站点在日誌里會看到這样一種情况:明明只做了一個詳情頁,蜘蛛却抓了三四條地址,内容一模一样,只是大小寫、斜杠或者參數顺序不同。這不是蜘蛛多事,而是這些 URL 在它眼里确實是不同的地址。

蜘蛛判断是不是同一個頁面的依據

蜘蛛的待抓队列是按 URL 字符串去重的。它不會先抓回来看看内容再决定要不要跳過——只要字符串不同,就当成新地址排進队列。至于两個 URL 是不是同一個頁面,它只能靠頁面里的 canonical、站内跳轉以及自身的内容比對去判断,判断错了的代價由站点承担。

最常见的几種重复形態

大小寫與末尾斜杠

/Article/123 和 /article/123 在很多服務器上都能返回 200,但它們是两個字符串。/list 和 /list/ 同理。如果服務器不做统一跳轉,蜘蛛會把两邊各抓一遍,内容再比對一次。

參數顺序與無用參數

?a=1&b=2 與 ?b=2&a=1 指向同一份内容,對蜘蛛却是两條 URL。再加上排序、每頁條數、来源渠道參數,一個列表頁很容易派生出几十條地址。

编碼與追踪參數

中文參數被编碼成 %E4%B8%AD 還是保留原样、路径里多余的 ./ 或 //、跟踪會话用的 sid,都會衍生新地址。這類 URL 往往還能正常返回 200,進一步坐實了它是一條獨立頁面。

先確認有没有真的被重复抓

別急着改代碼,先用日誌核對:

  • 把同一路径的多種寫法筛出来,看各自被抓的次數和時間分布;
  • 看這些重复抓取占了多少比例,尤其是列表頁和篩選頁;
  • 观察重复 URL 是否也被收錄,是否在结果里互相竞争。

如果重复量很小,處理優先級可以往後放;如果列表頁參數组合動辄上千條,就该動手收敛了。

收敛的思路

  1. 服務器层统一。用 301 把大小寫、末尾斜杠、多余參數归到唯一形態。跳轉要一步到位,別串成鏈。
  2. 站内連結只輸出一種寫法。模板、面包屑、分頁、分享按钮都指向規范地址,別让不同模块各寫各的。
  3. canonical 兜底。頁面上明确声明規范地址,對已经散出去的舊寫法也有一定补救作用。
  4. 參數做减法。無意义參數不要出現在連結里,渠道追踪參數交给前端或統計脚本處理,別寫進 href。
  5. robots 與 noindex 慎用。拦截不想抓的參數组合时要小心,別连带把正常路径也挡在外面。
規范化的目标是让每條内容只有一個可以稳定抓取、稳定指向的地址,而不是把所有變体都藏起来。藏得太多,蜘蛛可能连正主都找不到。

小结

URL 規范化听起来是技術细节,實际影响的是抓取预算和收錄质量。把同一份内容的地址收敛成一條,蜘蛛省下的抓取次數就會用在真正的新頁面上。這件事不需要复杂方案,多數情况下從跳轉規則和模板連結两處入手就能看到變化。