搭建蜘蛛池时,域名、IP、内容往往被反复讨论,而 URL 结构常被当成顺手就定的事。但對搜尋引擎蜘蛛来说,URL 是它识別、去重和調度的最小單位。同一個入口頁如果存在多個地址,蜘蛛可能只抓其中一個,其余的被当作重复地址過滤掉;层級太深或參數杂乱的地址,在抓取队列里的位置通常也更靠後。
URL 结构為什么會影响到抓取
蜘蛛决定抓什么,依赖它已经建立的 URL 库。一個頁面對應几個地址,就等于把抓取机會分摊到几個候選上;地址規律性差,蜘蛛在扩展和推断时也难判断哪些值得繼續跟進。所以 URL 结构不只是好不好看的問题,它關系到抓取效率。
路径层級:能扁平就扁平
入口頁的路径不需要模仿大型门戶的分類树。层級越深,蜘蛛到達目标頁需要经過的連結越多,被發現的路径也越不确定。
- 层級控制在两到三层,多數场景已经够用,例如 /news/123.html 這類形式。
- 不要按日期、分類、标簽层层嵌套,比如 /2024/05/12/tech/web/xxx.html。
- 路径名用有意义的英文或拼音,避免纯數字串、随机字符串和中文。
- 同類頁面保持同一套命名規則,方便蜘蛛推断,也方便自己看日誌。
中文、空格和特殊字符在传輸时會被编碼成一長串百分号,URL 變長、可讀性變差,日誌里也不好看。能不用就別用。
參數怎么處理
带參數的 URL 是最容易产生重复地址的地方。列表頁、篩選頁、分頁參數一叠加,同一批内容能生成成百上千個地址,蜘蛛抓了一批之後往往就失去兴趣。
- 能静態化就静態化,把關键參數寫進路径,而不是挂在問号後面。
- 确實需要參數时,控制數量,不要出現五六個參數相乘的组合。
- 參數顺序固定,避免 a=1&b=2 和 b=2&a=1 被当成两個地址。
- 對只改變排序、展示方式的參數,考虑在頁面上用 canonical 指回主地址。
大小寫统一
Linux 服務器預設区分大小寫,/Page 和 /page 是两個不同的地址,但在人眼里它們几乎一样。入口頁生成时统一用小寫,可以减少這類無意义的重复。
结尾斜杠二選一
/a 和 /a/ 在有些服務器上會被当成两個地址,在另一些服務器上會做重定向。規則不统一时,蜘蛛可能两個都抓一遍。更稳妥的做法是選一種形式作為規范,另一種用 301 指向它,不要用 302 或 JS 跳轉来模糊處理。
規范化與去重
URL 規范化的目标是:一個入口頁只有一個規范地址。常用手段有三個。
- 服務器层面把带 www、不带 www、带索引頁、大小寫變体统一重定向到規范地址。
- 頁面里用 canonical 标簽指向規范地址,作為辅助信号。
- 内鏈只用規范地址,不要让同一頁面被多種寫法連結進来。
需要提醒的是,canonical 是建议而非命令,蜘蛛仍可能自行判断。所以服務器层的重定向和内部連結的一致性,往往比标簽本身更重要。
几個常见誤区
- 以為蜘蛛會自動去重。 它确實會做一定判断,但判断需要時間,也會消耗抓取机會。
- URL 越短越好。 短是相對的,關键是唯一和稳定,语义清晰比一味求短更有用。
- 改 URL 後不做重定向。 老地址如果直接 404,之前积累的抓取记錄就断了。
- 同一個入口頁換域名後地址不變。 換域名等于換了整套 URL,需要重新建立识別。
上线前的检查清單
- 每個入口頁是否只有一個規范地址。
- 路径层級是否控制在三层以内。
- 參數數量是否可控,顺序是否固定。
- 大小寫、结尾斜杠、www 寫法是否统一。
- 非規范地址是否正确 301 到規范地址。
- 内部連結是否都指向規范地址。
- URL 是否寫入日誌便于後續比對。
URL 结构是蜘蛛池里改動成本最低的一环,但它决定了蜘蛛能不能把一個入口頁当成獨立對象来看待。先把地址理顺,再谈内容和资源,顺序會顺很多。