同一份内容,為什么會出現好几個地址
一個頁面在理想情况下只對應一條地址,但下面這些寫法會让它一變多:
- 分享和推廣連結自带的追踪碼,例如 utm_source、from、spm 之類;
- 把會话标识寫進地址,例如 sid、PHPSESSID、sessionid;
- 列表頁的排序、篩選、视图參數,例如 order=price、color=red、view=list;
- 打印頁、移動頁、AMP 頁各占一條地址;
- 大小寫、结尾斜杠、空參數(如 ?a=1&)這類细节不一致。
對用戶来说,這些地址打開的几乎是同一屏内容;但對蜘蛛来说,它們是各自獨立的 URL,會分別進入抓取队列,分別判断,分別决定要不要收錄。
蜘蛛大致會怎么處理
各家搜尋引擎的策略並不完全公開,但结果通常落在三種情况里:
- 只保留一條,其余被当作重复版本折叠掉;
- 收錄多條,但每條能分到的内容價值被摊薄;
- 判断這些地址没有單獨價值,抓一次之後不再反复来訪。
真正麻烦的不是“會不會被收錄”,而是抓取量被一堆無意义地址消耗掉,同时後台顯示的收錄數量和索引狀態也變得难以解讀。
先做三件事,把問题看清楚
- 查規范标簽:直接打開带參數的地址,看返回的 canonical 指向哪里,是否和预期一致。
- 看日誌:統計蜘蛛抓取的 URL 中带參數的比例有多高,是否存在大量同一路径、不同參數的记錄。
- 抽样搜尋:用 site: 加上參數特征,看有多少參數頁真的進了索引。
能收敛的收敛,收敛不了的明确表態
追踪碼與會话 ID
會话 ID 尽量不要再放進地址,改用 cookie 承载。追踪碼很难完全避免,別人分享时就會带上,可行的做法是:頁面正常返回,canonical 始终指向不带追踪碼的規范地址;同时内鏈和站点地图里只使用干净地址,避免自己再制造新的變体。
排序、篩選與分頁
並不是所有參數组合都值得被索引。可以按下面的顺序判断:
- 本身有獨立搜尋需求的篩選组合(例如“城市 + 品類”),可以保留,並给它一條可抓取的内鏈入口;
- 只是換個排列顺序的(價格升序、销量排序),canonical 指向預設视图就够了;
- 组合爆炸、内容稀薄的,可以考虑 noindex。這里不建议简單用 robots.txt 屏蔽——屏蔽之後蜘蛛看不到頁面上的 noindex,反而更容易留下狀態模糊的记錄。
移動頁、打印頁與 AMP 頁
這些通常是同一内容的另一種呈現。確認是等價版本,就用 canonical 指向主版本;如果已经不再使用,返回 301 指向主版本,而不是繼續留着可訪問。
几個容易踩的坑
- canonical 指向的地址本身返回 404 或带 noindex,等于把信号指進了死路。
- canonical 形成鏈條:A 指 B,B 又指 C,蜘蛛需要多跳判断,容易放弃。
- 一批參數頁用 robots.txt 屏蔽,另一批用 noindex,規則互相打架。
- 只改了站内模板,没管歷史連結,站外推廣連結依舊带着舊參數在传播。
參數問题的本质不是“地址太多了”,而是没有告诉蜘蛛哪一條才算數。
收尾时的一句话
先把規范地址定下来,再让 canonical、内鏈、站点地图、跳轉這几處保持一致,剩下的交给時間。一次改完所有參數並不現實,分批次观察抓取日誌的變化,比一次性大動更稳妥。