把目标 URL 挂到入口頁上,是蜘蛛池最基础的用法。不少站点模板會在 head 里顺手寫上一行 base href,用来统一控制相對资源的基准地址。這個标簽本身没有問题,但一旦它和入口頁實际的連結寫法對不上,搜尋蜘蛛拼出来的目标 URL 就可能落到別的路径上去,日誌里看到的抓取地址和你以為的完全不是一回事。
base href 到底改了什么
它只做一件事:给頁面里的相對 URL 提供基准。绝對 URL 不受它影响。
- 没有 base 时,相對連結按目前頁面 URL 所在目錄来拼接。
- 有 base 时,相對連結按 base 的地址来拼接,base 末尾有没有斜杠會改變结果。
- 以 http 或 https 開头的绝對地址不走這套規則,寫什么就是什么。
換句话说,base 影响的是那些你寫得比較省事的連結,比如只寫路径、只寫文件名、寫上一級目錄這類形式。
搜尋蜘蛛會不會按 base 来解析
主流搜尋引擎在解析 HTML 連結时,一般會遵循 HTML 規范,也就是會考虑頁面里的 base。這意味着你寫一個相對連結指向某個文件,配上 base 之後,最终组合出来的地址可能和你的预期不一致。
如果目标是让蜘蛛發現一個明确的目标 URL,最稳的做法是把它寫成绝對地址,而不是依赖 base 加相對路径的组合去推。
常见的几種跑偏场景
- base 指向 CDN 或静態资源域名。相對連結會被拼到那個域名下面,蜘蛛請求到的其實是另一份内容,或者干脆是 404。
- base 末尾的斜杠丢了。带斜杠和不带斜杠解析出来的路径不同,前者會当成目錄,後者會把最後一段当成文件名替換掉。
- 模板里的 base 是寫死的歷史域名。站点已经換過域名,但 base 一直没更新,連結就都指向舊地址。
- base 里带了參數或锚点,或者值寫得比較特殊,解析行為更容易和预期不一致。
- 頁面一部分連結是绝對地址,一部分是相對地址,出問题时只排查了一半。
怎么自查
- 打開入口頁源碼,把 base 和每一類相對連結人工组合一遍,算出實际目标 URL,和你想投放的地址對照。
- 對比服務器日誌里蜘蛛實际請求的路径。這一步最直接,谁被請求了、請求的域名對不對,一眼能看出来。
- 用浏览器的開發者工具查看連結的绝對地址,或者用抓取類工具跑一遍入口頁,導出發現的 URL 列表。
- 確認入口頁有没有多套模板。同一個站点不同栏目用了不同模板时,base 的處理方式可能並不统一。
處理建议
入口頁承担的是 URL 發現的职责,中間环节越少越可控。可以按下面的顺序處理:
- 入口頁里的目标連結尽量寫成完整的绝對 URL,天然不受 base 影响。
- 如果确實需要 base,確認它指向的域名和路径就是入口頁真正部署的位置,並且末尾斜杠與目錄结构一致。
- 改動之後观察一段時間的抓取日誌,確認蜘蛛請求的地址和预期一致,再繼續扩展入口頁規模。
最後提醒一句:URL 被發現只是第一步,能不能被抓取、能不能進入索引,還取决于目标 URL 自身的狀態碼、内容情况、robots 設定和站点整体质量。入口頁寫得再規范,也不等于收錄有保證。