同一篇文章,可能對應好几個都能正常打開的地址:带 www 的和不带 www 的、带尾斜杠和不带尾斜杠的、大寫路径和小寫路径、带跟踪參數的分享連結和不带參數的干净地址。對用戶来说這没什么区別,但對搜尋蜘蛛来说,每個可訪問的地址都是獨立的 URL,都要單獨排队、單獨抓取、單獨判断内容是否相同。
一個頁面裂成多個 URL,代價是什么
最直接的影响是抓取机會被摊薄。原本可以花在一個地址上的抓取次數,被分散到几個内容完全一样的地址上。其次是判断上的干扰:多個版本互相竞争,蜘蛛需要額外花時間去確認哪個才是主版本,日誌里也會出現大量看起来重复的抓取记錄。所以 URL 去重不是洁癖,而是让抓取和收錄都更省力的一步。
常见的几種“分身”来源
尾斜杠
/a 和 /a/ 在不少服務器配置下都會返回正常内容。如果两個都返回 200,蜘蛛就會当成两條 URL 分別處理。做法是全站统一一種寫法,要么全部带尾斜杠,要么全部不带,另一種用 301 收到统一版本上。麻烦的是模板和編輯器各自带一套規則,所以最好在服務端配置里一次定下来。
大小寫
URL 路径在多數服務器上是区分大小寫的,/News/1 和 /news/1 可能是两個不同頁面。站内連結、模板變量、CMS 自動生成的路径如果大小寫不一致,重复地址就會悄悄長出来。检查时可以按小寫和原始寫法各統計一次日誌。
參數與跟踪碼
utm_source、ref、from 這類參數會产生大量“同一頁不同地址”。用戶分享、广告投放、站内跳轉都可能自動带上。它們的價值在統計,不在给蜘蛛看。常见组合是頁面内用 canonical 指向不带參數的版本,同时在 robots.txt 里不鼓励抓取典型的跟踪參數。注意 robots.txt 只是不鼓励,不等于阻止,canonical 才是主要的收敛手段。
协议與 www
http 與 https、www 與裸域,最好只保留一套對外可訪問,其余 301。两套同时開着且都能正常浏览,是重复地址里最容易修、也最容易被忽略的一種。
收口的几種做法
- 301 永久跳轉:适合明确的重复版本,把訪問和權重都干脆地收到規范地址上。
- canonical:适合參數變体、排序篩選這類不方便全部跳轉的场景,在頁面内声明規范地址。
- 内鏈统一:模板和正文里的連結一律寫規范地址。蜘蛛大多是從連結發現 URL 的,連結怎么寫,它就先怎么记。
- Sitemap 只放規范版本:地图里混入多個變体,等于主動告诉蜘蛛這些都值得抓。
301 和 canonical 不冲突,可以叠加使用。原則是:能跳轉的優先跳轉,跳轉會破坏用戶体驗或功能的地方,再用 canonical 兜底。
參數頁面:哪些该走,哪些该收
篩選、排序、分頁、站内搜尋结果,是參數 URL 的主要来源。判断标准可以很朴素:這個參數组合下,頁面是否有獨立的價值。排序參數通常只是同一批内容換個顺序,同质化嚴重,适合 canonical 到主版本。篩選參數如果确實组合出了有搜尋需求的頁面,可以留一部分,但要控制數量,避免组合爆炸。站内搜尋结果頁尽量不要開放给蜘蛛——它本身就是一個爬虫,让蜘蛛進去容易陷入大量無意义的地址。
定期检查的几步
- 在服務器日誌里按路径統計抓取次數,找出同一份内容對應的多個地址。
- 把 Sitemap 里提交的地址與日誌對照,看蜘蛛抓的是不是規范版本。
- 調整跳轉和 canonical 之後观察一段時間,抓取分布會慢慢變化,不要指望立刻改观。
規范化的目标是让蜘蛛少走冤枉路,不是把 URL 數量压到越少越好。有獨立内容、有搜尋需求的頁面,该留就留。
小结:這件事越早统一越省事。它不會直接带来排名,但能减少抓取浪費,把有限的机會留给真正需要更新和收錄的頁面。