同一個頁面,在服務器上往往不止一個可訪問地址。带上 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。三個信号互相矛盾时,蜘蛛只能自己挑一個,挑出来的结果不一定和你的预期一致。
收敛的做法
- 服務器层先做统一跳轉:選定一個主域和协议,其余用 301 永久重定向過去;末尾斜杠按目錄與文件分別定規則,全站保持一致。
- 内鏈只用規范地址:導航、面包屑、正文連結里的地址统一成最终形態。這是蜘蛛看到频率最高的信号,比事後补 canonical 更省事。
- Sitemap 只放規范地址:站点地图里出現變体地址,等于主動又提交了一份重复入口。
- canonical 当提示,別当開關:它有助于合並信号,但不會阻止蜘蛛訪問被标记的地址,也替代不了跳轉。
- 追踪參數從源头去掉:分享連結、投放連結、站内搜尋产生的參數地址,尽量不让它進入可抓取的連結结构。
自查时可以按這個顺序看
先從日誌里筛出訪問較多的地址,把同一内容的多個變体挑出来,看它們各自被抓了多少次;再到服務器上確認每個變体的返回碼,是 200 還是 301;接着检查頁面里的 canonical 與實际跳轉目标是否一致;最後抽查内鏈和 Sitemap,看還有没有残留的舊形態地址。這一圈走下来,通常能發現几處長期存在的分叉。
規范化不是一次性清理,而是每次新增栏目、調整目錄、改動參數規則时顺手確認的一件事。地址统一了,抓取路径才會跟着變简單。