在蜘蛛池入口頁里,很多人习惯直接複製推廣連結,于是目标 URL 後面會拖着 utm_source、ref、from、spm、share_id 這類參數。問题随之而来:搜尋蜘蛛看到的是带參數的長連結,而站点自己認定的規范地址是短連結。這两者到底是同一個頁面,還是两個頁面?
搜尋蜘蛛的逻辑:URL 不同就是不同资源
對搜尋引擎来说,判断“是不是同一個頁面”的第一步是 URL。只要路径或查询字符串有差异,它就倾向于当成一個待處理的新地址,除非頁面里明确寫了 canonical,或者服務端做了跳轉合並。也就是说,入口頁上寫了几十個带參數的目标連結,蜘蛛很可能先按几十個地址去排队抓取,而不是自動帮你归並成一個。
這會带来的直接後果是抓取配額被分散。配額本身是有限的,被參數版本占掉一部分,真正需要更新的規范頁面就可能排到後面去。
哪些參數最容易引發重复發現
- 营销追踪參數:utm_*、gclid、fbclid、spm、share、from 等,几乎每個分享渠道都會自動追加。
- 會话類參數:sessionid、sid、token,如果每次訪問都生成新值,等于每次都是新 URL。
- 随机數與時間戳:?t=1712345678、?r=8f3a 這類,通常由程序拼接,蜘蛛每抓一次就是一個新地址。
- 排序與篩選參數:?sort=、?page=、?tag= 组合起来可以产生大量變体。
- 無意义的空參數:?a=、? 结尾、多余 &,肉眼看着一样,字符串並不相同。
另外提醒一句:URL 里的 # 锚点部分不會發送给服務器,一般不會被当成獨立地址;但被编碼過的空格(%20 與 +)、大小寫不同的路径,在某些服務器上就真的是两個地址。
重复 URL 會带来哪些實际問题
- 抓取配額被消耗在參數版本上,規范地址的更新變慢。
- 同一内容出現多個地址,搜尋引擎可能選擇其中一個展示,你無法完全控制選哪個。
- 如果站点同时用 canonical 和參數跳轉,規則打架时容易出問题。
- 日誌里的訪問记錄被冲散,很难判断某個目标到底被發現了没有。
需要說明的是,出現參數版本並不等于站点一定會被判為作弊,也不存在“必须清理干净才會被收錄”這種保證。它更像是一個效率問题:你希望蜘蛛把有限的抓取次數花在哪里。
比較稳妥的處理方式
- 入口頁统一使用規范 URL。目标連結尽量不带追踪參數,需要統計就用服務端记錄或落地頁跳轉来承接。
- 确實要带參數时,落地頁寫 canonical,指向不带參數的主地址,让搜尋引擎知道归並目标。
- 用 301 合並歷史版本。舊的带參數地址如果已经有外鏈或訪問,跳轉到規范地址,比放着不管更清楚。
- 统一书寫习惯:结尾斜杠是否保留、大小寫是否一致、http 還是 https、带不带 www,全站保持一致。
- sitemap 和内鏈用同一套地址,不要 sitemap 里是短鏈、入口頁里是長鏈。
- 別把 sessionid 拼進入口頁連結,改用 Cookie 或服務端會话。
怎么自查是否出現了重复發現
- 在服務器日誌里篩選带 ? 的路径,統計有多少種參數组合被訪問過,訪問者是不是搜尋引擎的 UA。
- 用搜尋平台的 URL 检查 / 抓取诊断工具,把带參數和不带參數的两種地址分別提交,看平台返回的規范地址是哪一個。
- 在站内搜尋或 site 查询里看同一标题是否出現多個地址。
- 检查 robots.txt 有没有誤把規范版本屏蔽,却放行了參數版本,這種情况方向就反了。
几個容易忽略的细节
第一,第三方渠道往你的連結上追加參數,你自己不控制,入口頁里最好只放一份干净的地址。第二,Linux 服務器路径区分大小寫,/A.html 和 /a.html 是两個文件。第三,如果入口頁連結是由程序動態生成的,建议輸出前先做一次 URL 归一化,去掉空參數、统一编碼、统一大小寫。第四,同一個目标在入口頁出現多次时,尽量保持地址寫法完全一致,减少無谓的變体。
小结
參數本身不是問题,問题在于同一目标被拆成多個地址後,蜘蛛的抓取會被分散,日誌也變得难讀。把入口頁里的目标連結统一成規范寫法,必要时用 canonical 和 301 做归並,再配合日誌和平台工具確認實际抓取情况,是成本不高、也比較可控的做法。