站点的相對連結寫法本身没有問题,但只要頁面里多出一個 base 标簽,所有相對路径的解析基准就會整体偏移。搜尋蜘蛛按 HTML 規則解析連結时遵循同一套基准拼接逻辑,一旦 base 指向了非预期目錄,原本存在的入口會變成一串不存在的地址,抓取日誌中則表現為成组出現的 404 與重复路径。
base 标簽如何改變連結的解析基准
在 HTML 規范中,相對 URL 需要先與文档的基准 URL 合並。預設基准是目前頁面的地址,而 base 标簽可以把它替換成任意地址或目錄。蜘蛛拿到源碼後做連結提取时同样走這一步,因此 base 寫错,等于把整頁内鏈的起点整体挪走。由于它通常寫在公共头部模板里,一次出错往往會波及大量頁面,而不是孤立的几篇内容。
常见的誤配场景
- 從測試环境或舊域名複製模板,base 中的绝對地址没有随上线改回正式域名。
- 使用目錄形式但不带结尾斜杠,例如 /news 與 /news/ 會解析出不同结果。
- 前置 CDN 或邊缘脚本在响應中注入了額外的 base,源站與线上看到的 DOM 不一致。
- 前端框架為兼容路由手寫 base,與服務端輸出的静態頁混用。
- 相對連結以斜杠開头时不受 base 影响,团队據此判断 base 無害,忽略了大量不带斜杠的相對連結。
排查顺序
- 用具备渲染能力的工具查看最终 DOM,確認 head 中 base 的實际取值、數量和出現位置。
- 取一個頁面,手工對比保留 base 與移除 base 两種情况下的連結最终地址,確認差异集中在哪些模板。
- 在抓取日誌中筛出狀態碼為 404 的 URL,观察是否成组出現同一前缀,這是基准偏移的典型特征。
- 核對 sitemap、canonical 與站内連結三處的地址寫法是否一致,找出哪一份是正确基准。
- 检查 CDN、反向代理與邊缘規則,確認是否在传輸环节改寫了 head 内容。
- 用不同 UA 和不同出口拉取同一 URL,確認是否只有部分鏈路被注入 base。
修复與驗證
優先去掉 base,改用绝對路径,或由後端统一拼接完整地址;确實需要保留时,應确保以斜杠结尾,且域名、协议與线上一致。相對連結與绝對連結混用的模板,修改後要逐頁確認,避免只修好首頁。
修复後不要只检查入口頁,應覆盖列表頁、詳情頁、分頁以及带參數的篩選頁,尤其是目錄层級較深的模板。驗證时可以用抓取日誌中新舊地址的訪問比例来判断收敛情况,而不是只看某一次抓取结果。
注意:調整 base 後,舊連結的解析结果會立即變化。如果此前已有一批错誤地址被抓取過,這些地址可能在一段時間内仍有訪問记錄,可以繼續观察其請求量是否逐步回落,不必急于下结论。
另外建议把 base 纳入上线前检查項,與 canonical、hreflang、favicon 路径等一起核對,這類問题往往源于模板层的改動,反复出現的概率並不低。
小结
base 标簽语法简單,但它作用于全頁連結,出错时的表征又和普通 404 很像,容易被誤判為内容刪除或路径改名。把排查重点放在最终 DOM 里的基准地址、日誌中成组的 404,以及 sitemap 與内鏈的地址一致性上,通常能較快定位問题来源。