同一個詳情頁,用戶從不同位置点進去时,浏览器地址栏可能長得不一样:有的带尾斜杠,有的把參數調換了顺序,有的多了一串跟踪參數。對用戶来说這没什么差別,對搜尋蜘蛛来说,這可能就是好几個不同的 URL。抓取日誌里出現多行入口、指标對不上、頁面像總也抓不完,很多时候根源就在這里。
多個入口是怎么产生的
重复入口通常不是某一處寫错了,而是几個环节叠加的结果。可以按下面的顺序自查:
- 連結寫法不统一:導航里寫 /a,正文里寫 /a/,模板里又輸出 /a/index.html。
- 大小寫混用:路径或參數名出現大寫,服務器直接返回 200 而不是跳轉。
- 參數顺序不同:foo=1 與 bar=2 谁在前,被当成两個地址。
- 跟踪參數:来源統計、广告投放、分享按钮各带一套 utm 或會话标识。
- 协议與域名:http 與 https、带 www 與不带 www 同时可訪問。
- 分頁或篩選參數被当成新的内容入口。
為什么值得花時間收敛
重复入口不一定直接導致問题,但會让核對變困难,也會分散抓取资源。
- 抓取日誌里同一内容出現多行,覆盖率統計偏高或偏低,判断失真。
- 内鏈權重被拆散,同一個頁面有多條入口互相竞争。
- 更新信号不一致:改了 A 入口,B 入口還停在舊内容。
- 站点地图里同时存在多個變体,抓取频次被摊薄。
怎么核對:從日誌到規則表
第一步:在日誌里找出疑似重复
取一周左右的抓取日誌,去掉查询參數後再聚合一次,看哪些路径在去參數之後高度重合。重点關注同一路径出現 200 與 301 混合,或多條记錄内容長度接近的情况。日誌里的 URL 可能是编碼後的形式,核對前先解碼再比較。
第二步:列出規范化規則
把站点要遵守的寫法寫成一張表,條目越少越容易执行:
- 统一使用 https,非 https 一律跳轉。
- 统一带或不带 www,只保留一種。
- 路径结尾是否带斜杠,只保留一種。
- 路径统一小寫。
- 參數按固定顺序輸出,無意义參數在服務端忽略並指向干净地址。
- 跟踪參數不參與内容识別,頁面头部的 canonical 指向無參數地址。
第三步:分清 canonical 與 301 的分工
两者不是二選一。同一内容的不同寫法,尤其是协议、大小寫、尾斜杠這類可以彻底消除的差异,用 301 直接合並更干净;只是临时带參數、服務端难以完全去重的入口,用 canonical 提示。若两者指向不一致,反而會给抓取端制造矛盾信号。
核對时不要只看首頁和几個重点頁,模板生成的列表頁、标簽頁、分頁往往是重复入口的高發区。
几個容易忽略的细节
- 用 JavaScript 跳轉代替 301,抓取端不一定执行,等于没有合並。
- 參數去重規則過宽,把真正区分内容的參數也去掉,會指向错誤頁面。
- 跳轉鏈路過長,中間地址层层叠加,损耗抓取效率。
- 只改了一個环境,预發與线上規則不一致,核對结果對不上。
上线後的驗證
規則調整後,用同样的方式再取一段日誌,對比三個点:
- 疑似重复的入口是否還在被請求,數量是否下降。
- 舊地址是否一次就能跳到落点,而不是多次跳轉。
- 站点地图與内鏈是否同步改成規范地址,避免舊寫法繼續被传播。
如果一段時間後舊入口仍有較多請求,通常是某個模板還在輸出舊連結。回到模板层面查一遍,比反复提交新的地址更有效。