同一個頁面在索引里出現多個地址,是很多站点排查收錄时都會碰到的情况。表面上收錄數變多了,實际每條 URL 分到的内鏈、外鏈和抓取频次都被摊薄,日誌里也难看清真實訪問量。URL 規范要解决的不是标簽怎么寫,而是让同一份内容只留一個對外地址。
先分清哪些属于同一頁面的變体
常见的變体大致有几類,先列清楚再逐項處理,比一邊改一邊猜要省事:
- 大小寫:/About 與 /about,服務器区分大小寫时就是两個资源。
- 末尾斜杠:/news 與 /news/。
- 預設文件名:/news/ 與 /news/index.html。
- 參數顺序:?a=1&b=2 與 ?b=2&a=1。
- 协议與主机名:http 與 https,带 www 與不带 www。
- 编碼差异:中文或空格被编碼成不同形式。
锚点,也就是 # 後面的部分,一般不算獨立地址,不用單獨處理。
處理顺序:先定唯一地址,再收回入口
顺序错了,改完還是乱。建议按下面這條鏈路走:
- 先确定每個頁面的首選地址形態,寫成規則,例如全小寫、目錄带斜杠、使用 https、带 www。
- 服務端對其它變体做 301 跳轉到首選地址,而不是 302。
- 頁面上放 canonical 指向首選地址,作為兜底提示。
- 把站内所有連結改成首選形態,包括導航、面包屑、分頁、相關推荐、站内搜尋结果的輸出。
- 更新 sitemap,只保留首選地址。
規范化的核心是内外一致。站内連結一邊寫着 /About,一邊用 canonical 声明 /about,搜尋引擎更可能相信它實际抓到的那個連結。
大小寫與斜杠:最容易被忽略的两處
不少 CMS 預設不区分大小寫,程序能正常打開,但索引里可能两條都在。排查时可以把若干 URL 手動換成大寫、去掉或加上斜杠,看是不是都返回 200。如果都返回 200 且内容一致,就该考虑做跳轉收敛。
斜杠也有讲究:目錄型地址通常带斜杠,文件型地址不带,規則定好後全站统一。不要用两個地址都返回 200、内容一模一样的方式長期共存,那等于自己制造重复内容。
參數顺序與無意义參數
排序、篩選、會话、追踪這几類參數最容易产生大量變体,可以分三種情况處理:
- 不影响頁面内容的參數,尽量在服務端统一顺序或直接忽略。
- 确實會改變内容的參數,比如篩選條件,按獨立頁面單獨评估,明确哪些值得進索引。
- 纯追踪類參數,別一邊用 robots.txt 屏蔽,一邊指望 canonical 生效,被屏蔽的地址,頁面上的提示信息很难被讀取到。
一份可以照着做的自查清單
- 抽 20 條代表性 URL,手工改寫成大小寫、斜杠、參數顺序等變体,看返回什么狀態碼。
- 检查 sitemap 里有没有混用两種形態。
- 翻訪問日誌,看出現频率最高的變体是哪一個,往往就是内鏈或外鏈寫错的地方。
- 核對 canonical 是否與首選形態完全一致,包括协议、主机名、斜杠。
- 能改的外鏈改掉,改不了的靠 301 接住。
做完之後怎么驗證
驗證周期按周看比較合适。索引报告里的重复網頁數量、日誌里 301 的命中次數、搜尋引擎實际展示的地址,這三項是主要观察点。變体合並後,收錄總數短期下降是正常現象,不代表頁面丢了;要等搜尋引擎重新抓取並更新索引记錄,這個過程需要時間。
URL 規范属于基础工程,做扎實了,後面排查收錄、分析日誌、看索引报告都會清爽很多,但指望靠它直接換来收錄增長並不現實。