给蜘蛛池入口頁寫連結时,很多人會顺手在目标 URL 後面挂一串參數:来源标记、栏目 ID、排序方式、時間戳、會话 ID。寫的时候只是多敲了几個字符,等到翻抓取日誌才發現,同一批目标地址被拆成了几十個變体,蜘蛛在门口来回打轉,真正想被發現的頁面反而没進几個。下面把這件事拆開说清楚。
為什么參數會让 URL 發現變复杂
從字符串角度看,/article?id=12 和 /article?id=12&from=list 是两個不同的地址。搜尋蜘蛛在調度抓取前必须先判断:這是两個需要單獨抓取的頁面,還是同一個頁面的不同寫法。判断一旦偏向某一邊,结果都不理想——要么把同一份内容抓了很多遍,浪費抓取预算;要么把本该被發現的地址当成重复項長期搁置。參數越多、组合越随机,這種判断就越依赖算法自身的归一化能力,而這部分並不在你手里。
搜尋蜘蛛通常怎么處理带參數的 URL
比較容易被合並的參數
- 會话類:sessionid、sid、PHPSESSID,每次訪問都可能變化,頁面内容没有實质差异。
- 来源追踪類:utm_source、from、ref、spm 等标记,服務端一般不會用它渲染内容。
- 展示類:sort=、view=list、display=grid,区別只在排序或展示形式。
這類參數被合並是常见结果,但不同搜尋引擎的力度並不一致,也没有對外公開的清單。
容易被当成獨立地址的參數
- 分頁類:page=2、p=3,内容确實不同,通常會被当作單獨的 URL。
- 篩選類:category=、price=、lang=,篩選结果頁往往有自己的地址身份。
- 内容标识類:id=、aid=、article_id=,這通常就是頁面本身的身份。
入口頁里怎么寫更稳妥
- 目标 URL 優先用静態或伪静態路径,參數只留给真正影响内容的维度。
- 不要嵌套參數,例如 ?url=/a?b=1 這種寫法需要编碼,解析出错时連結會直接失效。
- 同一個目标在入口頁只出現一次,不要用带參數和不带參數各寫一遍,那等于主動制造重复項。
- 必须带參數时,保持參數顺序和大小寫一致:a=1&b=2 與 b=2&a=1 在部分系統里會被视為两個地址。
- 用服務端 301 把带追踪參數的地址收敛到規范地址,比让蜘蛛自己判断更直接,也更容易在日誌里核對。
自查时可以看這几個点
- 抓取日誌里带問号的 URL 占比有多高,是否明顯超過目标頁面的實际數量。
- 同一目标是否出現了多種參數组合,並且都被记錄成獨立的抓取。
- 入口頁里是否存在跳轉後才落到目标地址的連結,跳轉前和跳轉後是否都被当成獨立頁面。
- 站内是否有多個入口指向同一目标,且寫法不统一。
參數本身不是問题,問题是让參數參與了定义地址的身份。目标 URL 的身份越單一,URL 發現和後續的抓取調度就越省事。
需要提醒的是,以上都是降低干扰、提高發現效率的常規做法,具体结果取决于搜尋引擎的調度策略、站点质量以及可用的抓取预算,没有哪一步能保證被收錄。把入口頁寫干净、把地址收敛好,是你能控制的那部分。