蜘蛛池知识

蜘蛛池入口頁的 URL 形態:层級、參數與斜杠该怎么定

蜘蛛池入口頁的 URL 形態直接影响蜘蛛的解析與去重。本文讨论目錄层級、參數取舍、结尾斜杠、大小寫與字符規范,並给出一份可执行的检查清單,帮助减少重复抓取和無效排队。

蜘蛛池知识

蜘蛛池入口頁的 URL 形態:层級、參數與斜杠该怎么定

URL 是蜘蛛進入站点的第一條线索

蜘蛛抓到一條連結时,第一件事是把 URL 拆成主机、路径、參數,再判断這頁值不值得排队。URL 寫得規整,解析成本低,去重也容易;寫得乱,同一份内容可能被拆成好几條待抓地址,抓取预算就這样被吃掉。

目錄层級:入口頁该放多深

入口頁建议控制在一到两层,例如 /a/xxx.html/topic/xxx.html。层級過深,比如 /a/b/c/d/2024/03/xxx.html,不是不能抓,而是蜘蛛在分配预算时通常會先照顾浅层頁面,深處的地址排到队尾,等到的机會被拉長。

但也不要為了扁平,把几百個入口頁全塞進根目錄,形成一條极長的首頁連結列表。蜘蛛顺着首頁爬,很快就不愿再往下点。折中做法是:一級目錄做分類,二級目錄放具体頁面。

參數:能不用就別堆

?id=123&from=list&spm=abc 這類參數對用戶没意义,對蜘蛛却是實打實的分叉。同一頁因為參數不同产生五個版本,蜘蛛會当成五條地址分別排队。如果必须保留參數,可以這样處理:

  • 只保留有實际内容的參數,跟踪類參數在入口頁連結里尽量不出現
  • 分頁優先用 /list/2/ 這样的路径,而不是 ?page=2,歧义更少
  • 不要用參數做跳轉中轉,蜘蛛跟丢了也拿不到内容

结尾斜杠與大小寫:同一頁的两種寫法

/a/1/a/1/ 在很多服務器上是同一個頁面,但在蜘蛛眼里是两條 URL。如果站点没有做 301 统一,两條都可能被排進队列。大小寫同理,Linux 环境下 /Page/page 是两個资源。

做法很朴素:生成連結时统一規則(带不带斜杠、是否全小寫),服務器端對另一種寫法返回 301,指向規范版本。canonical 是补充手段,不是替代方案。

字符與長度:別让 URL 變成乱碼

中文路径、空格、括号、& 等符号在传輸中容易被轉义。轉义本身没問题,但轉义後長度翻倍,日誌里也难讀。入口頁 URL 建议用短横线连接英文或拼音,控制長度,避免出現 %E4%B8%AD 這样的大段長串。

另外,URL 里不要放會變的字段,比如時間戳、随机數、會话 ID。蜘蛛今天抓到的地址,明天就失效,等于白跑一趟,還占用了配額。

绝對連結與相對連結:给蜘蛛省一步

相對連結(./xxx.html../xxx.html)需要蜘蛛基于目前頁地址拼接,多數情况下没問题,但在重定向、末尾斜杠不一致的頁面上,拼接结果容易偏。入口頁之間的互鏈建议用完整绝對地址,减少拼接歧义,也方便自己排查。

一份可执行的检查清單

  1. 入口頁是否都在一到两层目錄内,路径可讀
  2. 是否存在带跟踪參數的入口頁連結
  3. 斜杠與大小寫是否有 301 统一
  4. URL 中是否含會话 ID、時間戳、随机數
  5. sitemap 與頁面内連結的 URL 寫法是否完全一致
URL 不是装饰。它是蜘蛛理解站点结构的地图,地图画得清楚,後續的抓取、去重和更新判断都會省力。

把 URL 規則先定下来,再回头看入口頁數量、更新频率這些话题,很多重复抓取的問题會自然减少。先统一規則,再谈铺量,顺序反了,後面要花更多時間收拾。