很多站点在統計收錄时都會遇到同一個困惑:明明只有一個内容頁,索引里却出現了两三條,URL 略有差別,标题和摘要却一模一样。這通常不是頁面质量問题,而是 URL 没有归一——同一個頁面被拆成了多個地址。
一個頁面為什么會變成好几個 URL
下面這些情况,只要站点没有统一约定,就會出現多個可訪問地址:
- 大小寫不同:/Article/123 和 /article/123 都能打開;
- 结尾斜杠:/topic 與 /topic/ 都返回 200;
- 协议與主机名:http 與 https、带 www 與不带 www 同时可訪問;
- 參數顺序不同:?a=1&b=2 與 ?b=2&a=1;
- 追踪與會话參數:utm_、from、sid、ref 等;
- 排序、篩選、分頁參數:sort、filter、page;
- 带索引文件名的寫法:/list 與 /list/index.html。
這些變体在服務器看来都是正常請求,于是蜘蛛可能把它們当成不同的 URL 分別抓取。
多 URL 會带来什么實际影响
影响没有想象中那么玄,但确實是可观察的:
- 抓取被分散:同一份内容要被抓多次,真正需要更新的新頁面分到的時間變少;
- 索引里出現多條:搜尋引擎需要判断保留哪一條,判断结果不一定和你期望一致;
- 外鏈權重分散:不同人連結到不同變体,信号被拆開;
- 日誌难以分析:抓取統計里同一個頁面被算成好几個;
- 改版时容易漏改:只有部分變体被重定向,舊地址繼續可訪問。
按成本從低到高處理
- 先统一站内連結寫法。導航、列表、面包屑、正文内鏈全部指向同一個版本。這是成本最低、见效最直接的一步,站内連結是蜘蛛發現 URL 的主要入口。
- 服務端做 301 归一。把非規范版本(http、無 www、带 index.html、大寫路径)永久重定向到規范地址。比起 canonical,301 更硬,也更适合處理协议和主机名這類结构性差异。
- 用 canonical 兜底。參數顺序、追踪參數這類难以全部在服務端拦掉的變体,可以在頁面里声明規范地址。注意 canonical 是建议不是指令,不要指望它解决所有問题。
- 處理追踪參數。外鏈带来的 utm 參數如果被站内連結繼承並繼續传播,會生成更多變体。可以在服務端把無用參數剔除後重定向,或在頁面内的連結生成时直接去掉。
- sitemap 只放規范地址。把變体也寫進 sitemap,等于主動告诉蜘蛛這些地址同样重要。
带參數的 URL:哪些该留,哪些该收
影响内容的參數
篩選、排序、分頁這類參數會改變頁面呈現的内容,通常需要保留,但最好让它們指向一個稳定的组合,避免同一種篩選出現多種參數排列。
不影响内容的參數
追踪、會话、来源标记類參數不改變頁面内容,理想狀態下不應出現在被抓取的 URL 里。常见做法是重定向剥离,或者用 robots.txt 配合參數處理工具限制抓取。
判断标准很简單:這個參數去掉之後,用戶看到的内容是否完全一样。一样就属于可以收掉的一類。
怎么確認自己有多少個變体
- 在搜尋引擎里用 site: 加路径片段,看同一篇内容出現在几個 URL 下;
- 翻服務器日誌,統計同一路径的不同寫法各被請求了多少次;
- 看索引覆盖报告里“重复網頁,Google 選擇的規范網頁與用戶指定的不同”這類提示;
- 随机抽几個頁面,手動试 http/https、有無尾斜杠、大小寫,確認是否都返回 200。
URL 規范化的目标不是把所有訪問方式都堵死,而是让搜尋引擎清楚地知道哪一個地址才是主版本,其余的要么重定向過去,要么明确表示不重要。這件事做完,抓取和索引的帳才更容易算清楚。