核對抓取日誌时,经常會看到一批長得非常像的 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 上。
- 日誌統計失真,很难判断某個頁面到底有多少真實入口。
- 頁面改版或下线时,需要處理的跳轉規則成倍增加。
核對顺序與操作方法
- 從抓取日誌里按路径提取訪問量較高的 URL,做一次去重統計,找出寫法不一致的路径。
- 逐個請求不同寫法的地址,记錄返回的狀態碼、Location 头以及正文是否一致。
- 检查站内模板、導航、分頁组件生成的連結格式,確認是统一带尾斜杠還是统一不带。
- 检查 Sitemap 中的地址寫法,确保與站内連結、canonical 保持完全一致。
- 確認 canonical 寫的是最终保留的那一條,並且使用绝對地址。
- 在外部連結建设或投放中,尽量避免直接使用带參數的临时地址。
規范化不是把地址藏起来,而是明确告诉蜘蛛哪一條才是正式入口。多條地址都能訪問並不算错誤,但没有统一指向,就會让抓取變得低效。
落地时的几條建议
- 選定一種格式作為标准,例如全部小寫、统一不带尾斜杠、统一使用 https 加不带 www 的域名。
- 其余寫法一律 301 到标准地址,跳轉一次到位,避免多級跳轉。
- 在模板层统一生成連結,减少人工編輯带来的寫法差异。
- 改動規則後观察一段時間的抓取日誌,確認舊寫法的訪問逐步减少。
規范化是件長期存在的小事,但它决定了抓取资源是花在發現新頁面上,還是花在同一份内容的反复確認上。定期抽查日誌里的 URL 寫法,比等到索引出問题再回头排查要省力得多。