先给结论
相對路径和绝對路径本身不會决定搜尋蜘蛛是否發現目标 URL。只要連結能被正常解析成一個可訪問的绝對地址,两種寫法都有机會被抓到。真正容易出問题的是解析结果和你预期不一致,比如解析到了错誤的目錄、错誤的主机名,或者同一個目标因為寫法差异變成了两個地址。
相對路径是怎么被解析的
搜尋蜘蛛拿到入口頁 HTML 後,會把相對路径拼到目前頁面的 URL 上,規則和浏览器一致:
- a.html 或 ./a.html:相對于目前頁面所在目錄
- ../a.html:相對于目前目錄的上一級
- /a.html:相對于目前域名根目錄
- //example.com/a.html:沿用目前頁面的协议,再換成對方域名
最容易踩的坑是入口頁 URL 结尾有没有斜杠。https://example.com/dir 和 https://example.com/dir/ 在搜尋蜘蛛眼里是两個不同的解析基准,前者會把 a.html 解析成 https://example.com/a.html,後者才解析成 https://example.com/dir/a.html。入口頁如果是程序動態生成、结尾斜杠时有时無,同一批連結就可能在不同時間指向不同地址。
base 标簽會让基准整体改變
入口頁里如果寫了 base href,頁面内所有相對路径都會以它為基准。這個标簽有时是模板自動带上的,作者自己都不记得,结果所有連結被解析到另一個域名,日誌里自然看不到预期的抓取。用绝對路径可以直接绕開這個問题。
绝對路径的取舍
绝對路径的好處是解析唯一、日誌里一眼能看出目标、不依赖入口頁目前 URL 的形態。缺点是換域名时要批量改,HTML 体积也略大一点,但對抓取本身几乎没有影响。如果入口頁是同一套模板批量生成、URL 形態又不统一,建议直接用绝對路径,省掉反复排查的成本。
几種寫法會带来實际麻烦
- 协议相對連結 //host/a:入口頁是 HTTP 时就走 HTTP,是 HTTPS 时就走 HTTPS,同一個目标可能被两套协议各抓一次。
- www 與非 www 混用:两種寫法指向不同主机名,抓取會被拆成两份,日誌也不好對帳。
- 大小寫與尾斜杠不一致:多數服務器区分大小寫,路径大小寫不同就是不同 URL。
- 相對路径拼接後带出多余參數:參數繼承關系不容易看清,連結可能變得不可控。
怎么驗證解析结果
不要只看源碼。用浏览器打開入口頁,检查連結的實际地址,或者抓取頁面後按拼接規則手動算一遍。更直接的办法是看服務器訪問日誌:如果日誌里始终没有目标 URL 的請求,先確認入口頁本身被抓過,再確認解析出来的地址是不是你真正想要的那個。
判断标准很简單:入口頁被抓 + 連結能解析成一個你控制的可訪問地址 = 有机會被發現。相對還是绝對只是實現方式,關键是解析结果別跑偏。
實操建议
- 入口頁 URL 形態统一,要么都带尾斜杠,要么都不带。
- 批量生成的入口頁優先用绝對路径,尤其是跨目錄、跨协议的场景。
- 检查模板里有没有多余的 base 标簽。
- 同一個目标 URL 在站内只保留一種寫法,避免 www、协议、尾斜杠造成重复。
- 定期抽查入口頁的解析结果,和日誌里實际抓到的 URL 做對照。
最後提醒一句:路径寫法属于技術细节,它不改變抓取量級的根本問题。如果目标 URL 迟迟没有動静,多半還是要回到入口頁是否稳定被抓、目标地址是否可訪問、有没有被 robots 規則或狀態碼拦住這些环节上排查。