同一個頁面被蜘蛛抓了很多次,翻開日誌却發現抓的是几個寫法不同的地址——這種情况在中小站点上很常见。多數重复 URL 並不是外鏈带来的,而是站点自己長出来的:协议、域名前缀、參數、分頁、大小寫,每一样都能變出一個新地址。
重复 URL 一般從哪几個地方冒出来
- 协议與域名前缀:http 和 https、带 www 和不带 www,几套组合如果都能正常訪問,等于给蜘蛛開了好几道门。
- 路径寫法:末尾带不带斜杠、大小寫混用、多余的 index.html,服務器如果不做统一跳轉,就會被当成不同頁面。
- 追踪與篩選參數:来源統計參數、排序方式、每頁條數、站内搜尋结果頁,随手一点就生成一串新 URL。
- 功能型副本:打印版、移動版、分享预览頁,如果都返回 200,就等于把同一份内容交了好几遍。
- 分頁與归档:列表翻頁、标簽頁、年月归档,數量一大,抓取量很容易被這些頁面吃掉。
為什么值得花時間收敛
重复 URL 不會直接導致什么嚴重後果,但它會带来三個具体的麻烦。第一,蜘蛛的抓取量是有限的,同一份内容抓五遍,新頁面分到的次數就少了。第二,外鏈和分享散落在不同寫法上,信号被拆開。第三,日誌里同一個頁面的資料被切成几段,排查抓取問题时很难看出真實情况。
收敛手段怎么分工
301 负责把入口统一
协议、域名前缀、末尾斜杠這類结构性差异,能用 301 就用 301,让所有寫法最终落到一個地址上。這是最干净的做法,蜘蛛跟一次就记住了。
canonical 處理那些不能跳的
带參數的篩選頁、打印版這類地址,有时确實需要保留给用戶訪問,這时用 canonical 指向規范頁更合适。注意 canonical 要指向返回 200 的地址,不要指向一個本身就會跳轉的 URL。
内鏈和 Sitemap 用同一套寫法
站内連結、導航、面包屑、Sitemap、RSS 里出現的地址,最好保持一致。内鏈里混着两種寫法,等于每天主動告诉蜘蛛“這里還有另一個地址”,前面做的跳轉會被慢慢稀释。
robots 與 noindex 要慎用
對确實不需要被抓取的參數组合,可以用 robots.txt 屏蔽,但別把需要索引的頁面一起挡掉。如果只想让頁面不參與索引、仍允许抓取,用 noindex 更稳妥;两者混用容易出現屏蔽了抓取、noindex 又讀不到的情况。
怎么確認收敛生效了
- 看抓取日誌里同一内容的 URL 數量是否下降,尤其是带參數的地址。
- 抽查規范地址在頁面源代碼里的 canonical 是否唯一、是否自指。
- 在站内随便点几條連結,複製出来的地址寫法是否一致。
- 观察抓取統計中列表頁、參數頁的比例有没有回落,新内容的抓取次數有没有回升。
收敛不是一次性的活。上新功能、接統計工具、改模板时都可能重新引入重复寫法,建议把“新頁面輸出前检查 URL 寫法”寫進上线流程。
重复 URL 的處理優先級可以按數量排:先解决协议和域名這類會全线複製的差异,再處理參數和分頁,最後收拾功能型副本。一步步来,日誌會先變得好讀,抓取量也會慢慢回到该去的地方。