有些站点並没有两個内容相同的頁面,索引里却出現了好几條看起来一样的地址。問题往往不在内容,而在 URL 本身——同一個頁面被寫成了好几種形式,抓取和索引系統只能把它們当成多個地址分別處理。
常见的地址變体有哪些
- 协议不同:http 與 https 两個版本都能打開;
- 主机名不同:带 www 與不带 www;
- 结尾斜杠不同:/about 與 /about/;
- 大小寫不同:/About 與 /about;
- 預設文件:根目錄 / 與 /index.html;
- 路径里混入多余片段:/./about、//about、/about/../about。
這些差异在浏览器里大多能打開同一份内容,用戶看不出区別,但對抓取系統来说,它們是不同的字符串,也就可能被当作不同的 URL。
為什么需要统一
同一份内容對應多個可訪問地址,會带来几個具体影响:
- 外鏈和站内連結指向不同寫法,信号被拆散到多個地址上;
- 同一份内容被反复抓取,占用了本可以分配给其他頁面的抓取资源;
- 站点地图、canonical、内鏈给出的寫法不一致时,系統只能自己判断,结果往往不可控。
先确定一個規范寫法
處理之前先把規則定下来,不要邊改邊试。可以按下面的顺序做决定:
- 协议:全站统一到 https;
- 主机名:www 還是裸域,二選一,全站一致;
- 路径:统一小寫,並明确目錄路径是否带结尾斜杠;
- 首頁:统一使用 /,不再對外暴露 index.html 等預設文件。
定好之後寫成文档,模板和新頁面都按同一規則生成,避免一邊修舊的一邊产生新的。
在服務器层面做重定向
比較稳妥的做法是让所有非規范寫法 301 跳轉到規范地址,而不是让它們各自返回 200 内容。這样即使用戶或外部連結用了舊寫法,最终也會落到同一個地址上。
需要注意跳轉不要形成鏈條。像“http + 無 www + 大寫路径”這種组合,最好一次跳到最终地址,而不是先跳 https、再跳 www、最後跳大小寫。中間环节越多,出問题的概率越高。
重定向的目标要直接指向最终地址。鏈式跳轉虽然也能走通,但每一环都多一次請求,也更容易在某一环配置失誤。
頁面内的信号要跟着统一
做到這一步還不够,頁面里輸出的地址也要一致:
- canonical 标簽统一寫規范地址,不要一頁一種寫法;
- 站点地图只提交規范地址,不混入重定向地址;
- 站内連結——導航、面包屑、正文内的連結——全部使用規范寫法。
内部連結是最容易被忽略的一块。同一個目标頁,導航里寫一種、正文里寫另一種的情况很常见,改的时候要一起過一遍。
几個容易踩的点
- 只改 canonical 不做跳轉:舊地址仍能直接訪問,仍可能被單獨抓取;
- 服務器区分大小寫:/About 返回 404,而頁面里恰好用了大寫連結;
- 目錄與文件之間混用结尾斜杠,導致部分路径 404;
- 改版後舊跳轉没有清理,指向了已经變化的地址,形成环路;
- CDN 或反向代理层另有規則,把源站的跳轉覆盖掉了。
怎么检查現状
- 從站点地图、導航、正文連結、外部連結里各取一批 URL,統計有几種寫法;
- 用抓取工具模拟請求,记錄响應碼和最终落地地址;
- 翻服務器日誌,看同一路径不同寫法的訪問量分布;
- 核對 canonical 寫法和實际跳轉目标是否指向同一個地址。
URL 统一不是做完一次就結束的事。新栏目、新模板、外包開發都可能带進新的寫法,把它放進發布前的检查清單里,比事後批量清理要省力得多。