常见問题

入口頁連結用相對路径還是绝對路径,搜尋蜘蛛抓取會受影响吗?

入口頁寫相對路径還是绝對路径,會影响搜尋蜘蛛抓取吗?本文說明两種寫法在實际抓取中的差別,列出 base 标簽、../ 层級、大小寫與尾斜杠等容易解析出错誤地址的寫法,並给出可执行的排查顺序和更稳妥的寫法建议。

常见問题

入口頁連結用相對路径還是绝對路径,搜尋蜘蛛抓取會受影响吗?

结论先说:相對路径和绝對路径,搜尋蜘蛛都能處理。真正决定抓取结果的,是浏览器和蜘蛛把這段路径解析成哪個绝對 URL,以及這個 URL 是否唯一、稳定、可訪問。

两種寫法的實际差別

蜘蛛拿到一段 HTML 後,會以目前頁面的 URL 為基准,把 href 解析成完整地址,再去請求。相對路径只是寫法更短,解析环节多了一步,本身不會因此降低被發現和抓取的概率。

  • 绝對路径:基准固定,歧义最少,但站点迁移或換域名时容易漏改。
  • 相對路径:迁移省事,却容易因為目錄层級、base 标簽、尾斜杠差异,解析出與预期不同的地址。
  • 协议相對(//example.com/a):解析结果依赖目前頁面的协议,站点同时提供 http 與 https 时,容易出現两個版本。

常见出問题的寫法

1. 頁面里有 base 标簽,但和實际结构不一致

base 會改變所有相對連結的解析基准。入口頁若套用模板,模板里带了一個指向別處的 base,正文里的相對連結就會全部指向错誤目錄,蜘蛛顺着抓到的往往是 404 或者不相干的頁面。

2. ../ 的层級數错了

入口頁通常由脚本批量生成,模板里寫死 ../ 或 ../../。一旦入口頁分布在不同深度的目錄下,同一段模板就會把部分連結解析到上一层無關目錄。日誌上看起来蜘蛛来過,但抓到的都不是目标 URL。

3. 大小寫與尾斜杠不一致

/List/ 和 /list/、/a 和 /a/ 在很多服務器上属于不同地址。同一目标 URL 在入口頁里出現多種寫法,會让蜘蛛把它当成多個候選地址,抓取机會被分散,也不利于後續判断哪一個是規范地址。

4. 路径里有空格或中文没有编碼

href 里直接寫空格或中文,不同解析器补全方式可能不完全一致,容易出現解析失敗或指向错誤地址。這類連結建议直接寫成已编碼的地址。

排查顺序

  1. 在入口頁查看源碼,取出一條目标連結,確認源碼里到底寫的是什么。
  2. 用浏览器控制台或在线工具,按目前頁面 URL 把它解析成绝對地址。
  3. 把解析结果與實际能訪問的地址逐字對比,重点看目錄、大小寫、尾斜杠、參數。
  4. 拿這個绝對地址去抓取日誌里找,看蜘蛛是否請求過、返回了什么狀態碼。
  5. 如果日誌里完全没有,回到入口頁確認連結是否真的在 HTML 里,而不是脚本渲染後才出現。

更稳妥的做法

  • 入口頁指向目标 URL 的關键連結,優先寫绝對地址,减少解析环节和歧义。
  • 批量生成模板时,把域名和基础路径抽成變量,避免 ../ 寫死。
  • 全站统一尾斜杠規則,並在入口頁保持一致。
  • 不要為了省事依赖 base 标簽,它的影响范围比想象中大。
  • 改版或迁移後,抽几條入口頁連結重新解析一遍,作為常規检查項。
相對路径本身不是問题,路径解析结果不一致才是問题。判断标准很简單:你希望蜘蛛抓的那個绝對地址,能不能在日誌里稳定出現。