先说结论
只要連結最终能被解析成一個完整、可訪問的地址,相對路径和绝對路径對搜尋蜘蛛的發現没有本质区別。蜘蛛抓到一個頁面後,會把頁面里的連結按目前頁面的地址拼接成绝對 URL,再進入抓取队列。真正影响發現的不是寫法本身,而是拼接结果對不對。
所以問题應该換成:你寫的連結,蜘蛛解析出来的地址,和你想要的地址是同一個吗?
两種寫法在解析上的差別
- 绝對路径:直接寫全 https://example.com/a/b.html。解析不依赖入口頁自身的地址,入口頁被镜像、被放到別的域名、通過代理訪問,連結指向都不會變。
- 相對路径:解析依赖入口頁的最终地址,也就是重定向之後的地址,不是最初請求的地址。入口頁如果本身是 301/302 跳轉過去的,相對連結會按跳轉後的地址来拼,很容易指偏。
容易拼错地址的几種典型情况
- 入口頁地址不以斜杠结尾。像 /spider/page1 這種看起来像文件的路径,相對連結 a.html 會被解析成 /spider/a.html,而不是 /spider/page1/a.html。
- 模板里带了 base 标簽。只要頁面里有 base href,所有相對路径都按它来拼,而很多站長並不知道自己用的模板里带了這一行。
- 路径大小寫。服務器為 Linux 环境时 /A.html 和 /a.html 是两個不同地址,寫错一個就是 404。
- 路径里带中文、空格或未编碼的特殊字符。相對路径拼接之後更容易變成非法 URL,蜘蛛可能直接跳過。
- 协议相對路径。//example.com/a 在 https 頁面解析為 https,在 http 頁面解析為 http。入口頁如果 http 和 https 都能訪問,同一目标會以两個地址出現,白白分散抓取配額。
哪些场景建议直接用绝對路径
- 入口頁會通過多個域名、多個 IP 或不同 CDN 节点被訪問,寫法不统一时容易解析出多個版本的目标地址。
- 入口頁會被別站引用或采集,解析环境不完全可控。
- 目标站自身做了强制 https 或 www 跳轉。這时直接寫跳轉後的最终地址,可以少一次中間跳轉,路径更短。
路径寫法不會让蜘蛛「多抓」,它只决定蜘蛛拿到的地址對不對。地址错了,後面所有關于抓取和收錄的工作都是白跑。
入口頁連結寫法自查清單
- 随手挑几個入口頁,把里面的相對連結手動拼一遍,看拼出来的地址是不是你打算让它抓的那個地址。
- 確認頁面里有没有 base 标簽,有的话检查 href 的值是否符合预期。
- 看服務器日誌或抓取诊断工具里,蜘蛛請求的目标地址是不是你提交的那些,還是出現了一批看起来像路径拼错的 404。
- 同一目标連結在入口頁里尽量只用一種寫法,不要相對、绝對、协议相對混用。
- 目标連結尽量直接指向最终地址,少用中間跳轉,跳轉鏈越長,中間任何一环出問题都會断掉。
最後提醒一句:連結被蜘蛛發現,只是走到了第一步。發現不等于抓取,抓取也不等于收錄,路径寫法解决的是第一步的准确性問题,別把它当成其他环节的替代方案。