做站点运营的人有时會在日誌里看到一件怪事:明明只有一個商品頁或文章頁,蜘蛛却用不同的地址反复来抓。這些地址指向的内容几乎一样,只是多了個尾斜杠、換了大小寫,或者带上了跟踪參數。對蜘蛛来说,每一個地址都是一個獨立的 URL,都要單獨走一遍抓取路径、單獨讀一次响應。地址越多,真正需要抓的頁面分到的時間就越少。
URL 變体通常從哪来
變体很少是蜘蛛凭空造出来的,多數是站点自己放出去的。常见的几類:
- 尾斜杠與預設文件:/about、/about/、/about/index.html 三條地址都能訪問同一頁。
- 大小寫混用:/Product/A 和 /product/a 在服務器上被当成两個资源。
- 协议與主机名:http 與 https、带 www 與不带 www 同时可訪問。
- 追踪參數:utm_source、fbclid、gclid、會话 ID 等,從外部渠道带進来後被頁面里的連結繼承。
- 篩選與排序:?color=red&sort=price,多個维度一组合就成倍增長。
- 分頁寫法不统一:?page=2 與 /p/2 两套並存。
- 功能副本:打印頁、AMP 版、移動版、分享预览頁各自有獨立地址。
為什么值得花時間收敛
它本身不會直接让頁面掉出索引,但會從几個方向慢慢消耗抓取路径的效率。抓取配額被同類地址摊薄,新内容等待被抓的時間變長;站内連結被拆到多個地址上,每一條能传递的信号都變弱;日誌里同一内容的记錄混在一起,真出問题时不容易看出来;如果重定向和 canonical 寫得互相打架,蜘蛛還會在几個版本之間来回確認。
先排查,再動手
動手前最好把現状摸清楚,否則容易改出一個更乱的狀態。
- 把服務器日誌按規范化後的路径聚合,看同一篇内容到底有多少個 URL 被訪問過、各自訪問量多少。
- 抽查頁面源碼里的連結寫法,導航、面包屑、正文内鏈、分享按钮都要看,問题往往出在自動生成的那部分。
- 检查頁面上的 canonical 指向哪里,是指向自己,還是指向另一個同样能直接訪問的地址。
- 看 sitemap 里提交的是規范地址,還是把各種變体也一並交了上去。
收敛的几條常規做法
- 選一套規則並長期坚持:比如统一不带尾斜杠、统一小寫、统一 https 與某一主机名。規則一旦定了,前端、後端、CDN、内鏈都要對齐。
- 用 301 做合並:把非規范版本永久跳轉到規范版本,让蜘蛛在第一次遇到时就知道该记哪一個。canonical 是提示信号,不能替代重定向。
- 统一内鏈寫法:站内連結尽量直接用規范地址,减少蜘蛛需要跳一次才能到達目标的情况。像 rel=canonical 一样,連結寫法也是给蜘蛛的明确指向。
- 谨慎使用 robots.txt 屏蔽:被屏蔽的 URL 不會再被讀取,但站点上的連結仍然指向它,其他頁面外鏈到它时也可能让它出現在结果里,此时 canonical 也传不出去。屏蔽參數前先想清楚它是重复内容還是有獨立價值的頁面。
- sitemap 只放規范 URL:把它当成一份愿望清單,交上去的應该都是你希望被抓的最终地址。
把抓取配額当成有限的资源来分配:同一份内容只留一個入口,其余的地址尽早合並掉,剩下的時間才轮得到新頁面。
篩選组合頁要区別對待
带參數的頁面並不都是垃圾。颜色、尺寸、價格区間這類篩選,用戶确實會用到,也有搜尋價值。难点在于排列组合可能上萬,蜘蛛顺着篩選連結一路点下去,很容易走進一片内容稀薄、彼此高度相似的頁面里。
可以试的做法是:限制可選维度,只開放少數几個有實际搜尋量的篩選;排序、视图方式這類參數固定預設值,不作為獨立入口;多條件组合頁用 noindex 加上 canonical 指向主分類頁;分頁保持單一寫法,並且保證從第一頁能顺着連結走到後面几頁。
URL 變体不是清理一次就結束的事。新功能上线、活動頁、渠道投放的追踪參數,都會不断把新地址塞進站内連結。比較省力的方式是把它變成一條常規检查:新頁面發布前看一眼地址寫法,新渠道上线前確認參數不會留在站内連結里。這样日誌里的重复抓取會慢慢减少,蜘蛛在站内走的路径也會更集中。