常见問题

入口頁連結的相對路径、大小寫和 URL 编碼不统一,搜尋蜘蛛還能找到目标 URL 吗

入口頁連結看似最基础,但相對路径的解析基准、大小寫、末尾斜杠和 URL 编碼不统一时,搜尋蜘蛛可能抓到另一個地址,甚至直接落到 404。本文梳理搜尋蜘蛛解析連結的規則,给出排查清單和统一 URL 寫法的實操建议。

常见問题

入口頁連結的相對路径、大小寫和 URL 编碼不统一,搜尋蜘蛛還能找到目标 URL 吗

入口頁上的目标連結怎么寫,是蜘蛛池里最容易被忽略的一环。很多“蜘蛛来過入口頁,却没抓目标 URL”的情况,根源並不在抓取配額或模板數量,而在連結字符串本身:相對路径解析到了別處、大小寫不一致、特殊字符没编碼、末尾斜杠不统一。搜尋蜘蛛解析連結的規則和浏览器大体一致,真正出問题的是寫法不统一——目标 URL 變成了另一個地址,或者同一個地址被拆成了好几個。

相對路径不是問题,解析基准才是關键

搜尋蜘蛛會按 URL 标准規則,把 href 里的相對路径拼到入口頁自身的地址上。所以 href=“target.html” 最终指向入口頁所在目錄下的文件,href=“/target.html” 指向根目錄下的文件。只要入口頁的目錄结构稳定,相對路径完全可用。

容易踩坑的是两種情形:一是入口頁里寫了 base 标簽,解析基准被整体改寫,所有相對連結都拼到 base 指定的地址上;二是入口頁 URL 本身带參數或被重寫、被代理,蜘蛛看到的是重寫後的地址,而你按原始目錄结构寫的相對路径就错位了。這两種情况下連結不會消失,但會指向一個不存在的地址並返回 404,目标 URL 自然不會被抓。

大小寫與末尾斜杠:由服務器决定

URL 的路径部分在标准上是区分大小寫的。在 Linux 配 Nginx、Apache 這類区分大小寫的环境里,/Target.html 和 /target.html 是两個不同资源;而部分 Windows、IIS 环境不区分,两者都能打開。隐患在于:入口頁混用了大小寫,在区分大小寫的服務器上會有一部分連結 404;在不区分的服務器上,同一個目标可能出現多種寫法,被抓取时被当成多個 URL。

末尾斜杠同理。/list 和 /list/ 在有些配置下是同一资源,在另一些配置下一個是文件、一個是目錄索引,甚至触發 301 跳轉。如果入口頁里两種寫法都有,建议统一成一種,並让服務器把另一種 301 到标准形式。

特殊字符與 URL 编碼:不一致會拆散同一個地址

中文、空格、加号、井号這些字符出現在 URL 里时,需要按規則编碼。問题在于寫法可能有多種:空格寫成 %20 或加号,中文既可以直接寫字符,也可以寫成百分号编碼。多數服務器會做归一化,两種寫法落到同一個资源;但也有服務器不做归一化,于是同一個目标被当成两三個 URL 分別抓取,而抓到的那一份未必是你希望被收錄的那一份。

容易被忽略的细节:HTML 里的 &

連結放在 HTML 属性里时,查询參數之間的分隔符号嚴格来说應该寫成 &。寫成裸符号时,如果後面紧跟的字母恰好构成 HTML 實体名(例如參數以 copy、reg、amp 之類開头),浏览器和解析器可能把它当實体處理,參數就被截断了。搜尋蜘蛛同样按 HTML 規則解析,參數一错,抓到的就是另一個 URL,或者落到預設頁面。

排查清單

  • 抓下入口頁 HTML,逐個把 href 解析成绝對地址,和日誌里出現的 URL 對照。
  • 检查頁面是否存在 base 标簽,或是否被重寫、代理導致目錄结构變化。
  • 抽查目标 URL 的大小寫,與服務器上的實际文件名是否一致。
  • 统一末尾斜杠寫法,並確認服務器對另一種寫法是否做 301。
  • 带中文或空格的 URL,確認實际訪問地址與编碼寫法一致,不要中文和百分号编碼混用。
  • 检查參數分隔符号是否寫成實体形式,尤其是參數名以字母開头、容易构成實体的。

實操建议

  1. 入口頁里的目标連結尽量用完整绝對地址,含协议和域名,省掉解析基准带来的不确定性。
  2. 路径统一小寫,末尾斜杠统一加上或统一去掉,並在服務器上把非标准寫法 301 到标准形式。
  3. 特殊字符一律用百分号编碼,避免中文與编碼两種寫法在同一個入口頁里並存。
  4. 改完寫法後,用日誌观察目标 URL 的抓取是否集中到标准地址上,再判断是否需要繼續調整。
相對路径、相對协议這些寫法本身不是問题,搜尋蜘蛛處理得和浏览器一样。影响發現效率的是解析基准不确定、大小寫和斜杠不统一、编碼方式混杂——它們會让一個目标 URL 變成好几個,也會让一部分連結直接落到 404。