做蜘蛛池入口頁时,連結寫相對路径還是绝對路径,几乎是每個做站的人都會纠结一遍的問题。有人担心相對路径搜尋蜘蛛看不懂,也有人認為绝對路径更稳妥。其實這属于連結解析层面的問题,和入口頁能不能被訪問、目标 URL 值不值得抓取是两回事。下面把判断逻辑和常见坑点说清楚。
两種寫法,搜尋蜘蛛都能解析
只要 HTML 结构正常,a 标簽的 href 里寫相對路径和寫绝對路径,最终都會被搜尋引擎解析成完整的 URL。搜尋蜘蛛抓到一個入口頁後,會先做一件事:按目前頁面的地址,把頁面上所有連結拼成绝對地址,然後再排重、排队抓取。所以單從能不能被發現這個角度看,两種寫法没有本质区別。
真正拉開差距的,是解析過程中容易出错的那些细节。相對路径依赖上下文,绝對路径依赖书寫規范,各有各的翻车方式。
相對路径容易出問题的几種情况
頁面里残留 base 标簽
如果入口頁的 head 里寫了 base href,頁面上所有相對連結都會以 base 里的地址為基准来拼接。做多子域、多目錄的入口頁时,模板里残留一個 base 标簽,可能让整頁連結全部指向错誤的域名或目錄。這種情况搜尋蜘蛛不會报错,它會照常去抓拼接後的地址,结果就是抓了一堆不存在的頁面。
入口頁被部署在非预期的目錄下
相對路径是按目前 URL 的层級来算的。同一個頁面文件放在根目錄和放在二級目錄,同样的 href 解析出来的结果完全不同。如果入口頁會被複製到多個路径下使用,相對路径的風險明顯更高。
頁面内容被采集或轉载到別處
相對路径只有在原始 URL 下才成立。一旦入口頁内容被搬到另一個域名,頁面上的相對連結會全部指向新域名下的路径,原本的目标 URL 就丢了。绝對路径没有這個問题。
绝對路径的常见坑
协议相對寫法
以两個斜杠開头的連結會繼承目前頁面的协议。入口頁用 http 訪問时,連結就是 http;用 https 訪問时就是 https。如果目标站点只支持其中一種,另一半就會落在 301 或者直接打不開上,拖慢發現效率。
http 與 https 混用
入口頁用 https,連結寫 http,或者反過来,都會多一次跳轉。跳轉本身不算大問题,但入口頁連結量大的时候,大量跳轉會把抓取节奏拖慢。
拼寫與規范化不一致
同一個目标 URL,有的带 www,有的不带;有的结尾带斜杠,有的不带。這些在解析层面属于不同地址,搜尋蜘蛛會当成多個 URL 分別處理,抓取次數被摊薄。寫绝對路径时最好统一一套規范,全站保持一致。
编碼和特殊字符才是更常见的错誤
相比路径寫法,下面這些更容易让連結解析失敗,也更值得優先排查。
- 連結里有空格:空格需要编碼成 %20,否則解析可能在這里断開。
- 參數里的 & 没有轉义:HTML 里應寫成實体形式,虽然多數解析器有容错,但參數一多就容易截断。
- 中文或其他非 ASCII 路径:建议直接寫成 UTF-8 百分号编碼形式,避免不同环境下编碼不一致。
- 大小寫混乱:路径在多數服務器上区分大小寫,寫在入口頁上的大小寫要和真實地址一致。
- 标簽没有正确閉合:a 标簽嵌套或者漏寫閉合标簽,可能让後面的連結被解析器直接丢弃。
一個简單的自查方法
- 把入口頁的 HTML 儲存下来,用開發者工具或抓取工具渲染一遍,導出頁面上實际解析出的連結列表。
- 和你在後台记錄的目标 URL 清單逐條對比,看數量、域名、路径是否對得上。
- 重点检查首尾几個連結和跳轉次數最多的那几條,位置越靠後越容易被解析問题影响。
- 在服務器日誌里確認搜尋蜘蛛訪問的是不是你预期的地址。如果出現大量 404 或者明顯異常的路径,通常就是拼接出了問题。
怎么選更合适
入口頁數量少、结构稳定,相對路径寫起来省事,也没什么問题。入口頁要批量生成、跨目錄部署,或者内容可能被別人轉载,绝對路径更省心。如果入口頁确實要用 base 标簽,務必先確認它指向哪里。
寫法只是把目标 URL 正确交到搜尋蜘蛛面前的第一步。連結能不能被發現,還取决于入口頁本身是否可訪問、連結有没有被限制、以及目标頁面是否有抓取價值,這几件事最好分開看。