搜尋抓取

URL 規范化與去重:大小寫、尾斜杠與預設端口對抓取的核對

同一份内容常因路径大小寫、尾斜杠、协议端口和 index 寫法的不同,被蜘蛛当成多條 URL。文章梳理這些重复入口造成的抓取浪費與信号分散,並给出一套從抓取日誌提取、狀態碼核對到 canonical、Sitemap 與内鏈寫法统一的检查顺序。

搜尋抓取

URL 規范化與去重:大小寫、尾斜杠與預設端口對抓取的核對

核對抓取日誌时,经常會看到一批長得非常像的 URL:有的带尾斜杠,有的把路径里的大寫字母換成了小寫,還有的路径後面多了 :443。它們指向的其實是同一個頁面。對搜尋蜘蛛来说,每個 URL 都是一個獨立地址,是否會被合並成一條、抓取资源會不會被摊薄,很大程度上取决于站点有没有把規則表達清楚。

同一份内容為什么會對應多個地址

路径大小寫不一致

多數服務器對路径大小寫是敏感的,/News/2024 與 /news/2024 可能是两個不同的响應。如果程序在生成連結时大小寫不统一,或者外部来源複製了不同寫法,蜘蛛就可能分別抓取两條。

尾斜杠的两種寫法

带斜杠與不带斜杠的地址,在服務器上往往一個返回 200、另一個返回 301,也可能两個都返回 200。後者最容易造成重复:内容完全一样,但被抓取和索引的地址有两個。

协议與預設端口

http 與 https、80 與 443、带 www 與不带 www,這些组合如果都能直接打開頁面,就會形成多條入口。理想狀態是只保留一條,其余全部 301 指向它。

目錄首頁與 index 文件

/about、/about/、/about/index.html 三者若都能返回 200,同样會产生重复。内鏈里混用這几種寫法,會让蜘蛛在多個地址之間来回切換。

重复入口带来的實际影响

  • 同一份内容被多次抓取,占用本该用于其他頁面的抓取額度。
  • 外部連結與内鏈指向的地址不统一,信号被分散到多條 URL 上。
  • 日誌統計失真,很难判断某個頁面到底有多少真實入口。
  • 頁面改版或下线时,需要處理的跳轉規則成倍增加。

核對顺序與操作方法

  1. 從抓取日誌里按路径提取訪問量較高的 URL,做一次去重統計,找出寫法不一致的路径。
  2. 逐個請求不同寫法的地址,记錄返回的狀態碼、Location 头以及正文是否一致。
  3. 检查站内模板、導航、分頁组件生成的連結格式,確認是统一带尾斜杠還是统一不带。
  4. 检查 Sitemap 中的地址寫法,确保與站内連結、canonical 保持完全一致。
  5. 確認 canonical 寫的是最终保留的那一條,並且使用绝對地址。
  6. 在外部連結建设或投放中,尽量避免直接使用带參數的临时地址。
規范化不是把地址藏起来,而是明确告诉蜘蛛哪一條才是正式入口。多條地址都能訪問並不算错誤,但没有统一指向,就會让抓取變得低效。

落地时的几條建议

  • 選定一種格式作為标准,例如全部小寫、统一不带尾斜杠、统一使用 https 加不带 www 的域名。
  • 其余寫法一律 301 到标准地址,跳轉一次到位,避免多級跳轉。
  • 在模板层统一生成連結,减少人工編輯带来的寫法差异。
  • 改動規則後观察一段時間的抓取日誌,確認舊寫法的訪問逐步减少。

規范化是件長期存在的小事,但它决定了抓取资源是花在發現新頁面上,還是花在同一份内容的反复確認上。定期抽查日誌里的 URL 寫法,比等到索引出問题再回头排查要省力得多。