同一篇文章,可能同时存在 http 和 https 两個入口,带 www 和不带 www 两種寫法,结尾带斜杠和不带斜杠两種形式,再加上大小寫差异、index.html、跟踪參數,最终變成十几個可訪問地址。對用戶来说差別不大,對搜尋引擎蜘蛛来说,這就是十几個各自獨立的頁面。抓取预算被摊薄,權重信号被拆散,頁面之間還會互相竞争。
URL 規范化要解决的就是這件事:让同一份内容對外只保留一個主地址,其余地址明确地指向它。
一、先找出站里到底有几個入口
不要凭记忆判断。用蜘蛛抓取日誌和站点地图交叉比對,通常能看出問题。
- 协议层:http 與 https 是否都能打開同一頁面。
- 主机名层:带 www 與不带 www 是否都能訪問。
- 路径层:/about 與 /about/ 是否返回相同内容。
- 文件层:/index.html、/default.html 這類預設文件能否直接打開。
- 大小寫层:/News/ 與 /news/ 是否被当成两個地址。
- 參數层:?ref=xxx、?utm_source=xxx 之類是否返回與主地址完全相同的頁面。
測試方法很简單:逐個訪問,看返回狀態碼和頁面内容。返回 200 且内容相同,就是重复入口;返回 301 指向主地址,說明已经處理過。
二、選定唯一主地址,其余用 301 收敛
主地址怎么選没有绝對标准,但要遵守几條:
- 协议统一到 HTTPS(在维護成本允许的前提下)。
- 主机名统一带 www 或不带 www,選定後長期不要改。
- 目錄型頁面统一带结尾斜杠,文件型頁面不带。
- 路径全部小寫,不要混用大小寫。
- 能寫成静態路径的,尽量不要用參數表達。
其余地址用 301 永久重定向指向主地址,不要用 302。302 是临时跳轉,蜘蛛有可能仍把原地址留在索引里。
重定向要一步到位。A 跳 B、B 再跳 C 的鏈條,每一跳都會损耗一点抓取效率,鏈條長了蜘蛛可能中途放弃。
三、canonical 标簽怎么用才不出错
canonical 是寫在頁面 head 里的声明,用来告诉蜘蛛這個頁面属于哪個主地址。它适合處理那些無法用 301 收敛的情况,比如带參數的頁面、跨域轉载、分頁的第一頁。
常见誤区
- canonical 指向的地址本身就重定向到別處,等于绕了一圈。
- 列表頁上所有條目的 canonical 都寫成列表頁自己,這是明确的错誤用法。
- 分頁的第二頁 canonical 回第一頁,等于告诉蜘蛛不必收錄第二頁的内容。
- 一個頁面出現多個 canonical 标簽,蜘蛛通常只認第一個。
- canonical 與 301 指向不同地址,两個信号互相矛盾,蜘蛛只能自己猜。
一個實用原則:canonical 指向的地址,必须能直接返回 200,而且最好與内鏈、站点地图使用的地址完全一致。
四、内鏈、站点地图、结构化資料要统一口径
地址收敛之後,站内所有引用也要跟着改。否則蜘蛛從首頁爬到的一直是舊地址,每一层都触發一次 301,抓取效率會明顯下降。
- 導航和正文内鏈统一使用主地址,斜杠寫法保持一致。
- 站点地图里只列主地址,不要列出會被重定向的舊地址。
- 结构化資料里的 url、@id、breadcrumb 也使用主地址。
- 分享按钮、QR Code、外鏈投放的素材同样使用主地址,避免從站外又带回一堆變体。
五、改完之後怎么驗證
- 随机挑 20 到 30 個舊地址逐個訪問,確認返回 301 且落点正确。
- 用浏览器開發者工具查看响應头,確認 Location 指向主地址。
- 在站内搜一遍舊寫法,把残留的内鏈改掉。
- 观察一段時間的抓取日誌,看舊地址訪問量是否逐步下降、主地址是否上升。
- 如果舊地址是外鏈很多的歷史頁面,重定向要長期保留,不要直接删掉。
整個過程不必一次做完。先處理流量最大、外鏈最多的那批頁面,收益最明顯;剩下的可以按栏目排期慢慢收敛。
需要提醒的是,地址收敛只是把分散的信号集中起来,它不會让一個本来没有内容的頁面變得有價值。结构干净、地址统一,本质上是让蜘蛛把抓取预算花在真正值得看的内容上,而不是在十几個副本之間来回確認。