搭建入口頁的时候,经常有人問:頁面里挂的目标 URL,到底寫成相對路径還是绝對路径?寫错了會不會让搜尋蜘蛛跟丢、發現不了目标頁面?這個問题没有想象中复杂,但确實有几處容易踩坑,值得單獨说清楚。
相對路径和绝對路径,搜尋蜘蛛都能處理
先说结论:對于一個正常可訪問的入口頁,連結寫成 /news/123.html 這類站内相對路径,或者寫成 https://目标域名/news/123.html 這類完整绝對路径,搜尋蜘蛛在解析时都會先根據目前頁面的地址把相對路径补全成完整 URL。两種寫法本身不會造成“發現不了”。
真正的差別在于容错:绝對路径把域名、协议、路径寫死,解析结果唯一,不受入口頁自身地址變化影响;相對路径依赖入口頁的最终 URL,一旦入口頁發生了跳轉、被镜像,或者部署到了不同的子目錄,补全出来的地址就可能不是你想要的。
容易让搜尋蜘蛛解析出错誤地址的几種寫法
1. 相對路径配合 base 标簽
如果入口頁里寫了 base 标簽,頁面内所有相對連結都會以 base 指向的地址為基准拼接。入口頁做模板批量生成时,base 很容易被複製成上一個模板的值,结果所有連結都指向了错誤的位置。這類問题在日誌里通常表現為:搜尋蜘蛛大量請求一個和你目标無關的地址。
2. 协议相對寫法
//example.com/page 這種省略协议的寫法會繼承入口頁目前的协议。入口頁是 HTTP 就按 HTTP 解析,是 HTTPS 就按 HTTPS 解析。如果你的目标站只支持其中一種,另一種就會走到跳轉甚至报错,白白消耗抓取预算。
3. 路径层級拼错
入口頁放在多級目錄下时,../ 的數量算错是最常见的低級错誤。解析出来的地址 404,搜尋蜘蛛會记錄一次失敗,反复出現就會降低對這個入口頁的抓取积极性。
4. 中文、空格和特殊字符没做编碼
URL 里带中文、空格、中文标点时,應当做百分号编碼。虽然大多數解析器會容错,但入口頁數量多、寫法杂的时候,未编碼的地址容易在日誌和統計工具里被重复計數,也會让排查變得困难。
實操建议
- 入口頁面向的目标 URL 比較多、来源比較杂时,優先用完整绝對路径,减少一层解析歧义。
- 如果必须用相對路径,确保入口頁的最终 URL 稳定,不要一邊挂連結一邊做跳轉實驗。
- 入口頁不要随意加 base 标簽;加了就要確認它指向的是真實的站点根地址。
- 同一批目标 URL 统一协议,避免 HTTP 和 HTTPS 混着寫。
- 連結地址里不要出現多余的空格、換行和全角字符。
- 部署後用抓取工具或浏览器直接查看渲染後的連結,確認和预期一致,再考虑批量放大。
怎么自查連結是否解析正确
- 随机抽几個入口頁,把頁面渲染出来的連結複製出来,看是否和目标地址逐字符一致。
- 看服務器日誌里搜尋蜘蛛請求的路径,有没有出現明顯不属于你目标站的地址。
- 關注入口頁目标連結的 404 比例,異常升高通常就是解析或改版導致的。
- 入口頁做過改版或迁移後,不要只检查首頁,要抽查深處頁面的連結。
路径寫法本身不是决定目标 URL 能否被發現的關键,能否被稳定、無歧义地解析才是。入口頁越批量、越模板化,越應该用最不容易出错的寫法。
最後提醒一句:連結路径寫對只是基础一环。目标 URL 能不能被尽快發現、能不能進入抓取队列,還和入口頁自身的抓取情况、目标站的响應质量有關。把入口頁的連結解析問题清理干净,是把後面的變量控制到最少,而不是某種“提速手段”。