在蜘蛛池入口頁里放連結,看起来只是複製粘贴的事,但連結的寫法會直接影响搜尋蜘蛛能不能把一個干净、可訪問的目标地址记進待抓列表。相對路径本身不是错誤,搜尋引擎處理相對路径是常規能力,問题通常出在解析基准上。
相對路径是怎么被解析的
搜尋蜘蛛拿到入口頁 HTML 後,會把頁面自身的 URL 当作基准,把相對路径拼接成完整地址。例如入口頁是 https://pool.example.com/a/index.html,頁面里寫 href="../target/1.html",解析结果就是 https://pool.example.com/target/1.html。如果頁面里存在 base 标簽,基准會換成 base 指定的地址,這一点经常被忽略。
也就是说,相對路径能否指向你想要的地址,取决于三件事:入口頁實际返回的 URL、頁面里的 base 标簽、以及入口頁 URL 的目錄层級是否符合预期。
容易出错的情况
- base 标簽寫错或指向別的域名:所有相對路径都會解析到 base 指定的地址,目标 URL 整体跑到错誤的域名或目錄下。
- 入口頁 URL 带參數或做了路径重寫:入口頁真實地址和以為的地址不一致,相對路径的基准目錄跟着變,容易拼出 404 地址。
- 路径层級寫错:多寫或少寫一层 ../,指向的位置完全不同,蜘蛛跟着走只會拿到 404。
- 末尾斜杠和大小寫不统一:/A/1 與 /a/1、/a/1 與 /a/1/ 在蜘蛛眼里都是不同地址,同一目标反复出現會變成多個待抓 URL。
- 連結里带锚点或跟踪參數:地址中的 # 片段不會發送到服務器,不构成新的抓取地址;而 utm 之類的參數會让同一個頁面變成多個 URL。
- 中文或空格没有轉义:地址里出現未轉义字符时,解析结果可能與服務器實际能响應的地址不一致,取决于中間环节的處理方式。
协议相對與绝對路径
寫成以 // 開头的协议相對形式,一般會跟随入口頁的协议解析,在 https 頁面下就變成 https。它比纯相對路径少一层目錄風險,但如果协议與入口頁不一致,仍可能出現跳轉或無法訪問。相比之下,直接寫完整的绝對 URL 最不容易出错。
相對路径是不是就不能用
不是。站点内部連結大量使用相對路径,解析一直很正常。区別在于:站内相對路径的基准就是自己的頁面,层級可控;而蜘蛛池入口頁往往批量生成、模板拼接,基准更容易被 URL 參數、重寫規則或 base 标簽改變。所以關键不在相對還是绝對,而在解析结果是否唯一、是否可訪問。
判断标准很直接:把入口頁 HTML 里的每個連結按解析規則還原成完整 URL,看它是否正好等于你想让蜘蛛發現的那個地址。
實操建议
- 入口頁里的目标連結優先寫完整绝對 URL,协议用 https,域名寫全。
- 统一域名形式:是否带 www、是否带末尾斜杠,只保留一種寫法。
- 去掉跟踪參數,只留必要查询參數,保證同一目标只出現一個地址。
- 检查頁面里有没有多余的 base 标簽,有的话確認它指向入口頁自己的地址。
- 确實要用相對路径时,先在浏览器打開入口頁,複製連結地址,看解析结果對不對。
- 看日誌时不要只數請求量,要確認蜘蛛請求的是你希望的 URL,而不是拼错的地址或重复形式。
怎么驗證解析是否正确
用抓取工具或浏览器開發者工具查看入口頁最终生成的連結地址;用 curl 請求入口頁,检查返回 HTML 里的連結原文;再對照服務器日誌里蜘蛛實际請求的路径和狀態碼。如果日誌里出現大量 404,或者同一個目标以多種域名形式、多種斜杠形式反复出現,基本可以判断是連結寫法或解析基准出了問题。
連結寫法本身不带来收錄,它只决定蜘蛛有没有机會拿到一個干净、可訪問的目标地址。把這一步做稳,後面的抓取和收錄才有讨论的基础。