搜尋抓取

大小寫、末尾斜杠與預設文档:URL 規范化怎样影响蜘蛛的抓取路径

同一份内容常能通過 www 與非 www、带斜杠與不带斜杠、預設文档等多個地址打開,而蜘蛛在队列里看到的只是 URL 字符串,分辨不出它們是否同源。本文梳理常见地址變体的来源,說明抓取分散、信号摊薄、日誌难讀等實际表現,並给出服務器跳轉、内鏈统一、Sitemap 收敛的處理顺序。

搜尋抓取

大小寫、末尾斜杠與預設文档:URL 規范化怎样影响蜘蛛的抓取路径

同一個頁面,在服務器上往往不止一個可訪問地址。带上 www 和不带 www 都能打開,末尾加不加斜杠都返回 200,index.html 也照常顯示,再加一條带追踪參數的分享連結,同一份内容就有了好几個 URL。對人来说没什么差別,對蜘蛛来说,這些是彼此獨立的候選地址。

蜘蛛先看到的是字符串,不是頁面

抓取队列里排的是 URL,不是内容。蜘蛛决定抓不抓、要不要把它放進队列时,手上只有這個字符串和它的来源連結。這個地址背後是不是和另一個地址同一份内容,要等到真正抓下来、解析之後才能判断。所以規范化没做干净时,被重复消耗的不只是抓取次數,還有 URL 發現這條鏈路上的注意力。

常见的几種地址變体

  • 协议與主机名:http 與 https、带 www 與不带 www,几種组合如果都能訪問,就是几個入口。
  • 末尾斜杠:/page 與 /page/ 返回同一内容,却常被当成两個地址對待。
  • 預設文档:/page/ 與 /page/index.html 同时可以打開。
  • 大小寫:/Article 與 /article 在多數服務器上指向同一目錄,但可能是两條 URL。
  • 參數顺序與冗余參數:?a=1&b=2 與 ?b=2&a=1 内容相同,utm_source 之類追踪參數更會成倍複製地址。

變体多了,抓取路径會變成什么样

最直接的表現是抓取分散。本来能集中在一個地址上的抓取次數,被摊到两三個甚至更多地址上,每個都只抓到一部分,谁都不够完整。其次是信号被摊薄:内鏈、外鏈、点击分散指向不同變体时,關于“哪個才是主地址”的判断更难形成。第三是日誌难讀,同一内容在抓取日誌里反复出現,統計頁面數量和判断抓取覆盖时容易看走眼。

還有一種更隐蔽的情况:canonical 指向 A,服務器實际 301 跳到 B,站内連結又大量指向 C。三個信号互相矛盾时,蜘蛛只能自己挑一個,挑出来的结果不一定和你的预期一致。

收敛的做法

  1. 服務器层先做统一跳轉:選定一個主域和协议,其余用 301 永久重定向過去;末尾斜杠按目錄與文件分別定規則,全站保持一致。
  2. 内鏈只用規范地址:導航、面包屑、正文連結里的地址统一成最终形態。這是蜘蛛看到频率最高的信号,比事後补 canonical 更省事。
  3. Sitemap 只放規范地址:站点地图里出現變体地址,等于主動又提交了一份重复入口。
  4. canonical 当提示,別当開關:它有助于合並信号,但不會阻止蜘蛛訪問被标记的地址,也替代不了跳轉。
  5. 追踪參數從源头去掉:分享連結、投放連結、站内搜尋产生的參數地址,尽量不让它進入可抓取的連結结构。

自查时可以按這個顺序看

先從日誌里筛出訪問較多的地址,把同一内容的多個變体挑出来,看它們各自被抓了多少次;再到服務器上確認每個變体的返回碼,是 200 還是 301;接着检查頁面里的 canonical 與實际跳轉目标是否一致;最後抽查内鏈和 Sitemap,看還有没有残留的舊形態地址。這一圈走下来,通常能發現几處長期存在的分叉。

規范化不是一次性清理,而是每次新增栏目、調整目錄、改動參數規則时顺手確認的一件事。地址统一了,抓取路径才會跟着變简單。