抓取量和收錄量對不上,有一部分原因不在内容,而在地址。同一個頁面在站内同时以几種寫法存在——/About 與 /about、带结尾斜杠與不带、带一串 utm 參數與不带——蜘蛛會按不同 URL 分別排队。抓取次數被摊薄,站内連結的權重被拆到几個地址上,日誌看着热闹,最後進索引的可能只有一個,甚至几個版本互相顶替。
先分清哪些差异真的會裂成两個地址
判断标准只有两條:服務器對這两種寫法返回的内容是否相同,站内是否存在指向两種寫法的連結。两條都成立,才算真正需要處理。
- 服務器已经把其中一種 301 到另一種,站内連結也统一——不用管。
- 服務器返回 200 且内容一致,站内两種寫法都有連結——需要收敛。
- 服務器返回 200 但内容不同(比如大小寫對應两套頁面)——這不是重复問题,是两份内容,各自正常處理。
几類常见的寫法差异
路径大小寫
URL 路径在多數服務器上区分大小寫,主机名不区分。站内連結、sitemap、後台生成的地址如果混用大寫,很容易造出两份。做法是站内统一小寫,服務器對已知的大寫變体做 301,而不是让它返回 404,或者也返回一份 200。
结尾斜杠
/about 與 /about/ 在很多服務器上是两個不同路径。選定一種作為規范,另一種 301 過去。混合出現时,日誌里會看到两條路径各自被反复抓取,站内連結的锚文本也被拆成两份。
协议與主机名
http 與 https、带 www 與不带 www,全站只保留一個規范版本,其余 301。這一步最好在服務器或 CDN 层一次做完,而不是靠頁面里的 canonical 兜底——canonical 是提示,重定向是明确指令,處理優先級不一样。
查询參數
參數顺序不同、參數名大小寫不同、带上 utm 與 gclid 這類追踪參數,都會生成新地址。几件事可以一起做:站内連結和 sitemap 里不带追踪參數;頁面模板不做無意义的參數拼装;頁面 canonical 指向不带參數的版本。要注意的是,不要用 robots.txt 去屏蔽這些带參數的地址——被屏蔽之後,canonical 這條提示蜘蛛讀不到,收敛就断了。
编碼與锚点
中文、空格、特殊字符的百分号编碼存在大小寫两種形式,建议在生成連結时统一。锚点(# 後面的部分)不參與服務端請求,一般不會造成重复地址,但分享按钮拼出来的带锚点連結,最好確認服務端返回的仍是同一個頁面。
收敛的落地顺序
- 從訪問日誌里按路径聚合,統計同一頁面出現了多少種寫法,以及各自被抓取的次數。
- 在服務器或 CDN 层對非規范寫法做 301,優先處理抓取次數多的那些。
- 站点内部連結、導航、sitemap、RSS 全部改成規范寫法,從源头不再产生新變体。
- 頁面 canonical 指向規范地址,作為最後一道兜底。
- 改完後观察一段時間的日誌,看非規范路径的請求量是否下降。
怎么確認收敛生效
不要只看站長平台的覆盖率报告,那個更新有延迟。更直接的办法是在日誌里繼續按路径聚合,看非規范寫法是否還在被請求、請求量是否在减少。同时抽查几個頁面的搜尋展現,確認留下的是規范版本。如果非規范地址仍在被抓,通常是站内某處還在輸出舊寫法,回到第二步往前找。
URL 归一化不是一次性動作。模板改版、活動頁上线、分享组件更新,都可能重新引入不一致的寫法。把日誌聚合当成一個定期動作,比一次性清理更實在。
把地址收敛到一個版本,本身並不保證頁面被收錄,它解决的是让抓取和信号不被拆散。在這個前提下,再去看頁面质量、内容深度這些真正影响收錄的因素,判断才不會被地址問题干扰。