做蜘蛛池入口頁时,很多人习惯把連結寫成相對路径,例如 /a/123.html 或 page/456.html。如果頁面头部多了一個 <base href='https://舊域名.com/'>,搜尋蜘蛛解析出来的目标地址可能完全不是你想要的域名。這個問题不常被注意,但會直接影响 URL 發現。
搜尋蜘蛛會按 HTML 規則解析 base
HTML 規范里,文档中相對 URL 的解析基准可以受 base 标簽影响。搜尋蜘蛛抓取入口頁时,通常也按這套規則處理。它不會因為你主观上想指向新站,就自動忽略 base 指向的舊域名。
- 如果 base 指定了域名,相對連結會拼到该域名下。
- 如果 base 只指定了路径,連結會在目前域名下按新路径拼接。
- 寫成绝對 URL 的連結不受 base 影响,會按原样识別。
所以問题不在于搜尋蜘蛛能不能识別連結,而在于它识別到的是哪一個地址。入口頁里看起来正常的文字,解析後可能變成另一個站点的 URL。
常见誤用场景
模板複製、測試环境切正式环境、舊站改版新站,都容易留下 base 标簽。以下几種情况比較常见。
- 從舊模板複製入口頁:base 還指向舊域名,頁面上所有相對連結都被带過去。
- 測試环境和正式环境混用:本地測試时用 base 指向測試域名,上线後忘记刪除。
- base 指向带目錄的地址:相對連結會拼到该目錄後面,可能批量产生 404。
- 同时存在多個 base:浏览器和蜘蛛通常只認第一個,後面的不生效,容易誤判。
這些情况不一定马上被發現。因為入口頁本身可以正常打開,肉眼看到的連結文字也没變,只有查看源碼或看日誌时才會暴露。
相對路径、根路径和绝對地址的区別
理解三種寫法的差异,有助于判断 base 會带来多大影响。
- 相對路径:如 page/123.html,會受 base 的域名和目錄影响。
- 根路径:如 /page/123.html,通常只受 base 的域名影响,目錄部分影响較小。
- 绝對地址:如 https://目标站.com/page/123.html,基本不受 base 影响。
如果你的入口頁連結混合了這三種寫法,排查时會更麻烦。搜尋蜘蛛可能一部分連結抓對了,另一部分抓到了舊域名,日誌里看起来像是“有些 URL 發現了,有些没發現”。
怎么排查和修正
不需要复杂工具,先看源碼,再做抓取測試。
- 在浏览器里打開入口頁,查看源代碼,搜尋 base 标簽。
- 確認 base 是否存在、指向哪個域名、有没有多余目錄。
- 用抓取測試工具或日誌確認搜尋蜘蛛實际請求的 URL,而不是只看頁面文字。
- 把關键連結改成绝對地址,尤其是目标 URL 列表。
- 如果确實不需要 base,直接刪除,避免後續複製模板再次带出問题。
入口頁的作用是把搜尋蜘蛛带到目标 URL。如果 base 把相對連結解析到另一個域名,入口頁等于在帮倒忙。先保證解析结果正确,再谈更新频率和數量。
如果 base 已经造成错誤解析
先修正入口頁,让相對連結回到正确域名。然後观察日誌里搜尋蜘蛛對正确 URL 的請求變化。已经抓错的那部分,通常需要重新被發現,不會因為改回 base 就自動回到目标站。入口頁本身如果被缓存,還要確認缓存版本是否同步更新。
如果入口頁由 CDN 或反向代理提供,舊版本可能還在缓存中。搜尋蜘蛛抓到舊 HTML 时,base 和連結仍按舊版解析。此时除了改源文件,還要處理缓存刷新,否則修正不會立即反映到抓取端。
小结
base 标簽不是搜尋蜘蛛的盲区,它會影响相對連結的解析域名。入口頁出現連結“跑到別的站”或批量 404 时,優先检查 base。對蜘蛛池和站点运营来说,入口頁的連結最好用绝對地址,减少模板複製和环境切換带来的解析偏差。這样搜尋蜘蛛發現的 URL 才更接近你真正想提交的目标。