同一份内容,如果存在多個都能正常打開的地址,蜘蛛會把它当成多條线索分別排队。判断依據不是頁面里寫了什么,而是 URL 字符串本身:字符不同,就是两條记錄。
蜘蛛認的是字符串,不是内容
抓取队列里的键就是 URL。大小寫不同、结尾斜杠有無、參數顺序颠倒,在队列里都是獨立條目。蜘蛛通常不會先抓回来對比正文再合並,而是各自安排一次抓取。结果是同一個頁面被反复取回,抓取額度被摊薄在重复地址上。
常见的“一頁多址”
- 域名變体:example.com 與 www.example.com、http 與 https 四種组合都能訪問。
- 结尾斜杠:/page 與 /page/ 都返回 200。
- 預設文件名:/ 與 /index.html、/default.aspx 同时存在。
- 參數顺序:?a=1&b=2 與 ?b=2&a=1 指向同一结果頁。
- 追踪參數:utm_source、spm、from 之類只在来源頁出現的參數。
- 大小寫混用:/Article/123 與 /article/123。
- 篩選與排序:排序字段、每頁條數等參數组合出的地址。
多址並存带来的代價
第一是重复消耗抓取次數。站点規模越大,重复地址占比越高,留给新頁面的額度就越少。
第二是信号被拆散。外部連結、站内連結分別指向不同版本时,收到的指向被打到几個地址上,任何一個版本看起来都不如實际重要。
第三是日誌判断變难。同一篇文章在日誌里出現多行,統計“被抓了多少次”“多久重訪一次”时容易得出错誤结论,進而誤判抓取节奏。
怎么把地址收敛成一條
- 先定規范版本。域名带不带 www、用 http 還是 https,只保留一種,並確認證书、DNS、CDN 都跟着走。
- 其余版本做 301 永久跳轉。優先用 301 而不是 302,跳轉目标直接指向最终地址,避免鏈式跳轉。
- 站内連結统一寫成規范版。導航、面包屑、正文内鏈、分頁連結都別混用带斜杠和不带斜杠的寫法。
- Sitemap 只放規范地址。不要為了“多递线索”把變体地址也寫進去,那等于主動制造重复。
- canonical 作為兜底。当跳轉难以實施时,用 canonical 指向規范版;它和 301 冲突时,通常跳轉的優先級更高。
- 追踪參數單獨處理。頁面上生成的分享連結尽量在跳轉层剥掉參數;robots.txt 管不了參數顺序問题,別指望它来兜底。
一個常被忽略的细节:蜘蛛抓取时通常不能区分 /Article/123 和 /article/123,但服務器可能能——如果服務器對大小寫不敏感,两個地址都會返回 200,重复就此产生。
上线前快速自检
- 把規范地址換掉大小寫、加减结尾斜杠,逐一訪問,看是否都跳到同一個地址。
- 在日誌里挑一個热门頁面,看它有多少種寫法被請求過。
- 抽查 Sitemap 中的 URL,是否與頁面内鏈寫法一致。
- 检查參數頁是否被站内連結大量引用,必要时加 noindex 或限制入口。
URL 規范化不是一次性的整理工作,而是每次改版、上线新模块、接入新統計工具时都要過一遍的环节。地址收敛得干净,抓取額度才能真正用在没被抓過的頁面上。