站点运营里有一類問题很隐蔽:同一篇文章,在浏览器里看着是同一個頁面,到了抓取和統計系統里却變成了一堆地址。常见原因是 URL 後面挂了一串參數,比如分享来源、會话标识、排序方式、篩選條件。它們對訪客可能無感,對搜尋蜘蛛来说却是實實在在的多個入口。
為什么 URL 參數容易把抓取预算摊薄
搜尋蜘蛛發現 URL 後,會按自己的节奏去抓取。如果站内連結、sitemap、分享按钮、广告跳轉都带着不同的參數,同一個内容就可能出現成百上千個地址。蜘蛛在參數變体上花的次數多了,留给其他新頁面的机會自然變少。這不是说參數本身有错,而是缺少统一規則时,URL 發現會變得混乱。
參數是功能需要,規范是运营需要,两者不冲突,只需要明确哪個地址才是“正本”。
先找出哪些參數在制造重复地址
- utm_source、utm_medium、utm_campaign 等投放參數;
- sessionid、sid、phpsessid 等會话标识;
- sort、order、filter、view 等列表排序與视图參數;
- ref、from、share、source 等来源标记;
- page、p、start 等分頁參數(這類要單獨對待);
- width、height、quality 等图片或缩略图裁剪參數。
用几個入口做一次粗筛
不需要一開始就上复杂工具,先把已有資料翻一翻。
- 看抓取日誌:同一路径如果反复出現带不同參數的记錄,說明吸引蜘蛛的入口没有收敛。
- 看站点地图:sitemap 里只保留規范地址,不要混入带跟踪碼的連結。
- 看站内連結:導航、面包屑、相關推荐、分享按钮,尽量輸出無參數或固定參數格式。
- 看搜尋结果:如果發現同一标题對應多個带參數的網址,優先處理那些有外鏈或有点击的變体。
處理參數重复的常用做法
1. 给每個頁面指定規范地址
在頁面 head 里寫 canonical,指向不带跟踪參數、不带會话标识的版本。canonical 不是强制指令,但它是给蜘蛛的重要提示,配合其他措施才有效。
2. 服務器端做一次干净跳轉
對于纯跟踪參數,可以在服務器或 CDN 层判断:如果 URL 只多了 utm_*、ref、from 這類參數,就用 301 跳到無參數版本。這样訪客体驗不變,蜘蛛也不會在两個地址間来回犹豫。
3. 谨慎使用 robots.txt 屏蔽
robots.txt 可以挡掉一部分無意义參數,但要小心別把正常分頁、篩選頁一起挡掉。有些參數组合本身有獨立價值,屏蔽後反而让蜘蛛看不到内容。建议只在確認某類參數永遠不會产生獨立頁面时,再做屏蔽。
4. 分頁參數要單獨保留
分頁不是重复内容,而是内容列表的延續。對分頁地址,更好的做法是保留可抓取入口,並让每個分頁有自洽的标题和 canonical 策略。不要把分頁參數全部塞進禁止抓取規則,否則第二頁之後的内容會失去被發現的机會。
5. 控制内鏈和分享連結的輸出
站内分享、複製連結、邮件订阅等按钮,尽量生成規范地址。投放連結可以带 utm,但落地頁應尽快跳回干净版本,避免投放參數被站内爬虫一路带進内頁。
和 URL 發現、蜘蛛池配合时的注意点
如果網站用蜘蛛池或主動推送来加速 URL 發現,更要把規范地址准备好。推送和蜘蛛池應该只提交規范 URL,不要批量提交带參數的變体,否則等于亲手制造重复入口。抓取预算有限时,參數變体是最容易被浪費的一類地址。
定期复查清單
- sitemap 中的 URL 是否干净、可訪問、狀態碼正常;
- canonical 是否與頁面實际内容一致,是否指向可訪問地址;
- 内鏈、導航、相關推荐是否产生带跟踪碼的連結;
- 分頁、篩選參數是否有明确規則,而不是放任蜘蛛自行發現;
- 分享連結和广告落地頁是否會把參數带進站内深层頁面。
參數自查不是一次性的工作。每次改版、上新栏目、調整投放策略後,都可能引入新的參數規則。把它放進站点运营的例行检查里,比等到抓取日誌里出現大量重复地址再處理要省事得多。