入口頁的連結寫成 /go/123 還是 https://example.com/go/123,是搭建蜘蛛池时经常被問到的問题。從搜尋引擎的解析逻辑看,只要最终拼出来的绝對地址一致,两種寫法没有本质区別;但實际运维中,相對路径出問题的概率明顯更高,排查起来也更绕。下面把常见情况拆開说。
相對路径本身没問题,前提是基准地址正确
搜尋引擎解析 HTML 时,會把相對路径和目前頁面的最终 URL 拼在一起,得到要抓取的绝對地址。這里的“最终 URL”指的是经過所有跳轉之後、真正返回 200 的那個地址,而不是你以為的入口地址。所以凡是會改變地址的行為——301/302 跳轉、末尾斜杠規范化、大小寫重寫、多個域名指向同一套頁面——都會连带改變相對連結的解析结果。
最容易踩坑的几種情况
- 入口頁 302 跳到另一個域名:源碼里寫 /target/a,會被解析到跳轉後的域名下,而不是入口頁所在的域名。
- 模板里带了 base 标簽:base href 一旦指向別處,整頁所有相對連結都會跟着變,包括你没留意的那部分。
- 伪静態或重寫規則不規范:/go/123 被改寫成 /go/123/ 或附加參數,相對路径的拼接基准就變了。
- 同一套模板复用到不同层級目錄:從 /a/ 和 /a/b/ 两個入口頁輸出同一段相對連結,解析出的绝對地址並不一样。
绝對路径在實际运维里的好處
寫成完整的 https:// 開头地址,好處不是“更利于抓取”,而是省事:日誌里的 URL 和頁面源碼里的 URL 能直接對上,不用反推当时的基准地址;模板复用到任何目錄都不出错;跨站、跨子域的連結不會因為跳轉變形。對于需要長期執行、经常調整連結结构的人来说,這種稳定性比少打几個字符更重要。
协议相對寫法要谨慎
//example.com/a 這種寫法會繼承目前頁面的协议。入口頁是 http、目标站只支持 https,就可能多出一次跳轉,而每一次跳轉都是一個可能中断的环节。直接寫完整协议头更省心。
结尾斜杠和參數也要统一
同一個目标站,有人寫 /a,有人寫 /a/,有人带跟踪參數,有人不带。這些在搜尋引擎看来可能是不同地址,抓取结果會分散。入口頁模板里最好统一一種形態,不要让不同批次的模板各寫各的。
怎么驗證解析结果對不對
- 用不执行 JS 的抓取工具或 curl 拉一遍入口頁,看返回的 HTML 里連結長什么样。
- 把頁面地址和源碼里的連結一起做 URL 解析,確認拼出来的绝對地址就是你要的。
- 看服務器日誌里實际被請求的地址與预期是否一致;如果大量出現 404 或全部落到首頁,基本就是基准地址错了。
- 入口頁存在跳轉、CDN 改寫、base 标簽时,上述步骤要重复驗證,不要只测一次就上线。
一條實用規則
如果入口頁结构稳定、域名固定、没有跳轉,用相對路径完全可以;只要涉及多域名、跳轉、模板复用、CDN 改寫中的任意一項,就统一寫绝對路径。這不是為了讨好搜尋引擎,而是让“你以為的連結”和“蜘蛛實际請求的連結”尽量保持一致。
連結寫法不會决定頁面能不能被收錄,但它决定了出問题时你要花多少時間去定位。把變量减少到最少,通常比事後從日誌里倒推更划算。