同一個頁面,往往不止一個 URL。大小寫不同、结尾多一個斜杠、參數顺序颠倒、带上一串跟踪參數,甚至 http 與 https、带 www 與不带 www,都能拼出一條新的訪問路径。對用戶来说這些差別無所谓,對蜘蛛来说却是實打實的多條线索:它會当成多個地址分別排队、分別抓取、分別判断。抓取预算被摊薄之後,真正需要更新的頁面反而排到了後面。
變体是怎么長出来的
常见来源有几類,多數不是刻意為之:
- 服務器對大小寫不敏感,/Page 和 /page 都返回 200;
- 目錄地址带不带尾斜杠都能打開;
- 參數顺序、空參數、重复參數被原样保留在連結里;
- 推廣連結附带的 utm、ref、from 等跟踪參數被内鏈或分享带進站内;
- 同一套内容同时挂在 http 與 https、www 與裸域上;
- 分頁、排序、會话 ID 等參數生成了大量近似地址。
蜘蛛顺着哪條走,取决于你先给它哪條
蜘蛛本身没有偏好,它優先走的往往是你自己指得最多、指得最早的那條路径。如果内鏈、Sitemap、外部連結指向的版本不一致,它就會在不同版本之間来回切換:今天抓 A,明天抓 B,两條都被标记為“已發現”,但哪條都没有稳定的抓取节奏。更麻烦的是,如果两條路径返回的 HTML 完全一样又没有規范信号,搜尋引擎需要自己判断谁是主版本,而這個判断未必和你希望的一致。
把线索收敛到一條路径上
目标很明确:让蜘蛛發現的每一條内部线索,都指向同一個規范地址。
- 先定一個規范形態。统一协议、域名形式、大小寫、尾斜杠規則,並寫進全站連結生成逻辑,而不是靠事後补丁。
- 内部連結只指規范版。導航、面包屑、正文内鏈、分頁連結全部對齐,變体只在确實需要跳轉的场合出現。
- 非規范版用 301 收口。大小寫、尾斜杠、www 這類可以完全等價映射的,直接跳到規范地址最干净。
- 參數類變体尽量別让它落地。跟踪參數在服務端忽略掉,或统一跳轉到無參數地址;無法忽略的用 canonical 指明主版本。
- Sitemap 只列規范地址。混入變体會让“已提交”和“已收錄”的數字長期對不上。
- canonical 要自洽。A 頁指向 B,B 頁不能又指回 A;canonical 與跳轉、與内鏈指向不一致时,信号會互相抵消。
動手前先摸清現状
- 看服務器日誌里带參數、带大寫、带尾斜杠的請求占比,哪些被频繁抓取;
- 用抓取統計中“重复網頁,所選規范網頁與用戶指定的不同”這類提示定位問题;
- 站内搜尋一段正文标题,看是否有多條地址返回同样内容;
- 随机抽几條内鏈,检查它們是否都指向同一形態的地址。
收敛變体不是一次性的清理,而是連結生成規則的一部分。只要站内還在不断产生新的變体,之前做的重定向就會被慢慢稀释。
容易踩的坑
一是把 canonical 当成萬能兜底,内鏈却繼續指向舊地址;二是用 robots 屏蔽參數頁,结果把有用的篩選頁一起挡掉;三是把 301 串成鏈條,跳两三次才落地,反而拖慢抓取节奏。這些做法單看都合理,叠在一起就容易让抓取路径變得又長又乱。
把入口收紧到一條路径,剩下的才是内容质量和更新频率的比拼。抓取资源有限时,路径清晰本身就是一種效率。