網路架站

啟用 HTTP/3 後,SEO 排名就會變好嗎?中間其實隔著一層

把網站效能能做的優化幾乎都做過的人不在少數:圖片壓縮、CSS 與 JS 精簡、快取設定都已經設好,連核心網頁指標(Core Web Vitals)的 LCP、INP、CLS 也調到綠燈。速度卻還是卡在某個天花板,再怎麼修都上不去,而問題其實不在應用層,是在更底下一層。網頁怎麼從伺服器送到瀏覽器手上,靠的是雙方都要遵守的傳輸協定;這套協定本身若有先天限制,例如建立連線要來回好幾趟、路上掉了一個封包就得全部停下來等,應用層做得再乾淨也繞不開。HTTP/3 正是為了解決這一層限制而生的新一代傳輸協定,它跟前一代 HTTP/2 的差別不是介面調整,而是把地基整個換掉。這套地基怎麼換掉,決定了網站速度與 SEO 能拿到多少實際幫助。

核心網頁指標做完之後,限制網站速度的下一層變數

最大內容繪製(LCP)、與下一個顯示內容的互動(INP)、累計版面配置轉移(CLS)這三項核心網頁指標,多數做過網站優化的人都不陌生,調校方向也大致固定,像是壓縮圖片、延遲載入非首屏內容、預先保留版面空間。這幾項指標鎖定的是頁面載入之後、瀏覽器怎麼呈現這個環節,調校手段幾乎都發生在應用層,伺服器準備好資料之後,程式碼、樣式、圖片檔案怎麼被瀏覽器處理,才是應用層真正管的範圍。

但有一項指標的位置不太一樣。首位元組時間(Time to First Byte,簡稱 TTFB)量的是瀏覽器發出請求後,第一個位元組送回來要等多久,這段時間包含連線建立、伺服器處理、資料傳輸最初幾步,跟傳輸協定的關係比其他三項都直接。換句話說,應用層的優化做完,跟傳輸層有沒有跟上,是兩件不同的事。圖片壓縮再徹底、CSS 精簡到極致,只要連線建立本身要來回好幾趟,或者一個封包遺失拖住整批資料,TTFB 依然會被拖慢,連帶影響後面的 LCP。這個容易被忽略的變數,就是傳輸協定本身,而它最新一代,叫 HTTP/3。

傳輸層從 TCP 換成 QUIC,是 HTTP/3 的核心改變

HTTP/3 由網際網路工程任務組(IETF)於 2022 年 6 月正式標準化為 RFC 9114。第一件該弄清楚的事,是它改變的不是 HTTP 的語意。方法(GET、POST)、狀態碼(200、404)、標頭欄位這些網頁溝通的規則,HTTP/3 跟 HTTP/2、HTTP/1.1 完全一樣;真正換掉的是底層的傳輸協定。HTTP/2 以前都架在 TCP(傳輸控制協定)之上,HTTP/3 改成架在 QUIC 之上,而 QUIC 本身建構在 UDP(使用者資料流協定),不是 TCP。

HTTP/3 只換掉底層傳輸協定,把 TCP 換成架在 UDP 上的 QUIC,方法、狀態碼、標頭這套 HTTP 語意兩邊完全相同。
HTTP/3 沿用同一套 HTTP 語意,真正換掉的是底下扛資料的傳輸層:TCP 換成建構在 UDP 上、整合了 TLS 1.3 的 QUIC。

這個差異聽起來像規格書裡的枝微末節,實際上是整套傳輸邏輯的翻新。RFC 9114 把 QUIC 具備的串流多工、逐串流流量控制、低延遲連線建立這幾項特性,列為對 HTTP 有直接助益的能力,這些特性不是靠應用層額外加工出來的,而是 QUIC 這個傳輸協定本身就具備的。也因為傳輸層整組換掉,HTTP/3 才有辦法解決幾個 HTTP/2 在 TCP 架構下始終繞不開的先天問題,其中對效能影響最直接的,是隊頭阻塞。

一個封包遺失,讓整條 TCP 連線停滯的隊頭阻塞

HTTP/2 最大的賣點是多工,同一條連線可以同時搬運好幾個資源,不用像 HTTP/1.1 那樣一個接一個排隊。但這個多工是在應用層做的,底下扛著的仍然是同一條 TCP 連線。TCP 規定封包必須依照送出的順序抵達,只要其中一個封包在路上遺失,這條連線上的其他所有資源,就算它們其實已經送到了,都得停下來等那個遺失的封包重新傳送完成。這個現象叫隊頭阻塞(Head-of-Line Blocking),而且它發生在 TCP 這一層,HTTP/2 不管在應用層怎麼優化,都碰不到這個問題的核心。

QUIC 的做法,是把多工的實作直接搬進傳輸層本身。每一條資料流都有自己獨立的封包序號空間,一條流的封包遺失,只會讓那一條流暫停等待重傳,其他流照樣正常送達,不會被拖下水。RFC 9114 在前言裡明講,設計 HTTP/3 的目的之一,就是解決 HTTP/2 架在 TCP 上時仍然存在的跨串流隊頭阻塞問題;QUIC 本身的規格 RFC 9000,也定義了每條串流各自獨立的傳送與遺失偵測狀態。對你來說,實際感受到的差別是,一個網站同時載入好幾張圖片、字型、樣式表,其中一個檔案的傳輸出了狀況,不會拖慢整批資源的顯示速度。

TCP 上一個封包遺失會讓整條連線的資源全部停下等待,QUIC 各流獨立,只有出狀況的那一條暫停,其他流照常送達。
隊頭阻塞發生在傳輸層:HTTP/2 走 TCP 時一個封包遺失會全部卡住,HTTP/3 走 QUIC 只有那一條流暫停等待。

QUIC 與 TLS 1.3 整合後的連線建立速度

在 TCP 加 TLS 的舊架構裡,連線建立跟加密協商是兩件分開的事。瀏覽器要先完成 TCP 的三方交握,確認雙方都能收發資料,才能開始進行 TLS 的加密金鑰協商,兩邊各自都要走一輪網路來回,加起來才能真正開始傳送網頁內容。距離越遠、網路延遲越高,這幾趟來回累加起來的時間就越明顯。

QUIC 把加密機制 TLS 1.3 直接整合進傳輸層本身,連線建立與加密協商合併處理。對一條全新的連線,QUIC 最快只要一次往返時間(1-RTT)就能開始傳送資料,比 TCP 加 TLS 分開處理省下至少一輪來回。如果瀏覽器先前已經連過同一台伺服器,還保留著上次協商的連線參數,甚至可以在送出的第一個封包就直接帶著網頁請求,業界稱為 0-RTT,等於完全省掉一次等待。RFC 9000 與專為 QUIC 設計的 TLS 標準 RFC 9001 都定義了這兩種交握路徑,但也明確提醒 0-RTT 傳送的資料沒有重播攻擊的防護,同一個請求理論上可能被重複送出並執行,所以這個做法只適合用在冪等(重複執行結果不變)的安全請求,像單純讀取頁面內容;涉及扣款、送出表單這類會改變狀態的操作,不適合走 0-RTT。

TCP 加 TLS 要先三方交握再協商加密、至少兩趟來回才開始傳資料,QUIC 把連線與加密合併,最快一次往返、重連可 0-RTT。
QUIC 把連線建立與加密協商合併,全新連線最快 1-RTT 就開始傳資料,比 TCP 加 TLS 分開處理省下來回。

換了網路也不必重新握手的連線遷移機制

TCP 連線是靠用戶端 IP 位址與埠號、伺服器 IP 位址與埠號這組四元組來辨識的。手機從 Wi-Fi 切換到行動網路,或者行動網路基地台之間交接,只要用戶端的 IP 位址一換,原本那條 TCP 連線的四元組就對不上了,系統只能把連線整個中斷、重新建立,前面提到的握手流程得再走一次。

QUIC 改用一組獨立的連線識別碼(Connection ID)來辨識連線,這組識別碼跟裝置的 IP 位址完全脫鉤。RFC 9000 把這個特性定義為連線遷移(Connection Migration),就算裝置換了網路介面、IP 位址整個改變,只要連線識別碼還在,同一條 QUIC 連線就能無縫接續,不用重新握手。這對經常帶著手機移動的使用者特別有感,搭捷運進站訊號變差、電梯裡網路短暫中斷、從辦公室 Wi-Fi 走出來切回行動網路,這些原本會讓 TCP 連線中斷重連的情境,QUIC 都能撐過去,使用者感覺不到中斷。

HTTP/3 對核心網頁指標與 SEO 排名的影響是間接的

把前面三項技術優勢收斂回來,你真正關心的問題通常是這跟 SEO 有沒有關係。HTTP/3 改善的是使用者的瀏覽器載入頁面的速度與穩定性,連線建立更快、隊頭阻塞的機率更低、換網路不用重新握手,這些體驗會反映在核心網頁指標上,尤其是跟連線與載入最相關的 TTFB 與 LCP,INP 也會因為資源載入更順而間接受益。核心網頁指標,是 Google 現有排名訊號的其中一項。

但 Google 抓取網站內容,跟使用者瀏覽網站,目前用的是兩套不同的協定支援現況,不能混為一談。所以正確的說法不是開了 HTTP/3 排名就會上升,而是 HTTP/3 讓網站的體質變好,體質變好之後,才透過核心網頁指標間接反映到 SEO 上,中間隔著一層,不是直接加分。

Googlebot 抓取尚未支援 HTTP/3

Google 官方文件〈Google 抓取工具與擷取工具總覽〉寫得很明確,Google 的抓取工具與擷取工具目前支援的通訊協定是 HTTP/1.1 和 HTTP/2,抓取工具會自動挑選能提供最佳抓取效能的版本,預設使用的通訊協定版本是 HTTP/1.1。這份文件目前並沒有把 HTTP/3 列進支援清單。

同一份文件也特別註明,透過 HTTP/2 進行抓取,對 Google 來說有機會節省頻寬與 Googlebot 自己的運算資源,但這不會直接帶來排名上的好處,官方文件明確指出,這麼做不會提升 Google 搜尋排名。把這兩件事對照起來看就很清楚,HTTP/3 現階段能發揮價值的地方,是使用者透過瀏覽器載入網頁的那一段;至於 Google 抓取那一段,不論網站有沒有開 HTTP/3,Googlebot 目前都還是用 HTTP/1.1 或 HTTP/2 在跟伺服器溝通,開了 HTTP/3 並不會讓抓取變快,也不會因此多拿到排名分數。

主機與 CDN 跟不跟得上,決定 HTTP/3 能不能派上用場

前面談的種種技術優勢,你能不能真的用到,決定權其實不在網站本身的程式碼或內容,而在兩層基礎設施有沒有跟上。一層是主機用的網頁伺服器軟體支不支援 HTTP/3,另一層是有沒有掛一層支援 HTTP/3 的 CDN(內容傳遞網路)。就算把網站的前端優化做到極致,只要這兩層還停在舊協定,瀏覽器跟伺服器之間照樣走的是 TCP,前面講的那些連線建立速度、隊頭阻塞改善,一項都用不上。

會有這個落差,主要原因是不同的網頁伺服器軟體支援 HTTP/3 的成熟度落差很大,有的軟體幾年前就原生支援,有的至今仍停在實驗階段,甚至完全沒有官方支援。CDN 則提供了另一條相對好取得的捷徑,不用更換主機,只要在 CDN 後台打開一個開關,使用者跟 CDN 之間的連線就能先用上 HTTP/3。這件事目前處在什麼階段,先看一組數字。

全球網站的採用比例已破四成,瀏覽器早已就緒

W3Techs(網站技術使用調查平台)的統計顯示,全球有 40.7% 的網站在使用 HTTP/3,這項數據每日更新。對照瀏覽器那一端,Can I Use(瀏覽器功能支援對照平台)的數據顯示,全球使用者裡超過九成、約 94.5% 的人,目前使用的瀏覽器版本已經支援 HTTP/3,Chrome 早在 2020 年、Firefox 在 2021 年就已預設支援;Safari 從 16 版起就具備支援能力,但實際開放給所有使用者,要到 2024 年 9 月才全面到位。

全球約 40.7% 的網站已採用 HTTP/3,而超過九成、約 94.5% 使用者的瀏覽器早已支援,落後的是網站與伺服器端。
瀏覽器端超過九成就緒,網站採用率才四成出頭(資料來源:網站採用率 W3Techs、瀏覽器支援率 Can I Use)。

這兩組數字放在一起看,結論很清楚。瀏覽器端早就準備好了,超過九成的使用者隨時可以用上 HTTP/3,問題不是技術不成熟。真正還沒跟上的是網站與伺服器那一端,四成出頭的採用率代表大多數網站其實還沒開啟,你的網站很可能就落在還沒跟上的那一邊,值得回頭檢查一下主機軟體與 CDN 有沒有把開關打開。

伺服器軟體對 HTTP/3 的支援程度並不一致

同樣是主機,用的網頁伺服器軟體不同,支援 HTTP/3 的程度有明顯落差。LiteSpeed Web Server 官方文件記載,LiteSpeed 從 5.4 版起就原生支援 QUIC 與 HTTP/3,是目前三款主流軟體裡支援得最成熟、也最早到位的一款。

Nginx 官方文件則載明,QUIC 與 HTTP/3 支援從 1.25.0 版起才納入官方的 Linux 二進位套件,但目前仍標示為實驗性(experimental)支援,對應的模組(ngx_http_v3_module)也不是預設編譯進去的,要在編譯時額外加上 –with-http_v3_module 這個參數才會啟用。即使主機用的是新版 Nginx,也不代表 HTTP/3 已經自動開著。至於 Apache,根據 Apache 官方問題追蹤系統 Bugzilla 上的第 64462 號功能請求,Apache HTTP Server 到目前為止,官方的 2.4.x 正式版都還沒把 HTTP/3 原生支援併進去,相關的 QUIC 連線處理改動仍在等待合併與社群測試。如果你的網站架在 Apache 上,原生取得 HTTP/3 這條路,現階段還走不通。

LiteSpeed 5.4 版起原生支援 HTTP/3,Nginx 1.25.0 版起仍是實驗性、需編譯啟用,Apache 2.4.x 正式版尚未原生支援。
同樣是主機,LiteSpeed 原生支援、Nginx 還是實驗性、Apache 尚未併入,用哪款伺服器決定能不能原生取得 HTTP/3。

CDN 開關式支援、主機端原生支援兩種路徑

實務上,你有兩條路可以取得 HTTP/3。一條是主機本身的網頁伺服器軟體原生支援,像上一節提到的 LiteSpeed、或設定妥當的新版 Nginx;另一條是在網站前面掛一層支援 HTTP/3 的 CDN,讓使用者到 CDN 這一段先用上 HTTP/3,不必更換主機本身的軟體。

以 Cloudflare 為例,官方文件說明,HTTP/3(搭配 QUIC)在 Cloudflare 所有方案都可以使用,包括免費版,只要網域在 Cloudflare 的邊緣網路上有 SSL 憑證,就能在後台「Speed(速度)」底下的「Protocol Optimization(通訊協定最佳化)」設定分頁把 HTTP/3 切換開啟。但這條捷徑有個要誠實面對的限制,CDN 的開關只處理使用者與 CDN 之間這一段連線,Cloudflare 官方文件也明確註記,CDN 到原始主機(origin)之間目前還不支援用 HTTP/3 連線。也就是說,如果主機本身的軟體還沒跟上,CDN 到主機那一段照樣走傳統協定,主機端該做的優化仍然不能省。這兩條路徑不互斥,同時採用反而是比較完整的做法。

從瀏覽器工具到指令列都能檢測實際使用的傳輸協定

知道原理跟現況之後,下一步是實際查一次,你自己的網站有沒有用上 HTTP/3。最快的做法不需要額外安裝任何東西,打開瀏覽器內建的開發者工具就能看到答案。

開發者工具 Network 分頁的 Protocol 欄位

Chrome 與 Firefox 的開發者工具裡,「Network(網路)」分頁預設不會顯示協定欄位,要自己叫出來。做法是打開開發者工具、切到 Network 分頁,在欄位標題列(通常顯示 Name、Status、Type 這幾欄的那一列)按右鍵,勾選「Protocol」欄,接著重新整理頁面,這時候每一列資源後面就會出現它實際使用的協定,標示是 http/1.1、h2 或 h3。

這個做法的好處是能看到逐筆資源各自用哪個版本載入,而不是只看網站整體有沒有宣告支援。同一個網站的 HTML 本身、CSS 樣式表、圖片、字型檔,很可能因為經過不同的 CDN 節點或快取規則,各自標示不一樣的協定版本。Chrome DevTools 官方文件也說明,Network 面板可以透過欄位設定顯示 Protocol 欄,用來檢視每個請求實際使用的通訊協定版本,這比只看一個籠統的支援與否判斷,更貼近真實狀況。

線上檢測工具、curl 指令都能驗證支援結果

不想開發者工具、只想要一個直接答案的話,還有兩個替代做法。一個是輸入網址就能查詢的線上檢測工具,直接回報這個網域是否有對外宣告支援 HTTP/3,操作起來最簡單,適合先做一次快速篩檢。

另一個是熟悉指令列的做法,直接用 curl 帶上 –http3 參數對網址發出請求,測試連線協商是不是真的能走到 HTTP/3。像這樣下指令:

curl --http3 -I https://example.comCode language: Bash (bash)

這個方式測的是實際的連線協商過程,不只是讀取網站宣告的標頭資訊。如果連線真的用 HTTP/3 談成,curl 的回應裡會顯示對應的協定版本;談不成則會退回 HTTP/2 或 HTTP/1.1,這個差異比線上工具單純的支援與否判斷,更接近真實連線狀況。

確認不支援之後,下一步是詢問主機商或 CDN

查完如果發現網站還沒用上 HTTP/3,下一步該往哪裡問,分兩種情況。第一種情況,網站前面已經掛了支援 HTTP/3 的 CDN,例如前面提到的 Cloudflare,那多半只是後台開關還沒打開,直接進 CDN 後台的通訊協定設定分頁檢查一次,把開關打開通常就能生效。

第二種情況,網站沒有用這類 CDN、瀏覽器直接連到主機,這時候你該回頭問主機商幾個具體問題:目前用的網頁伺服器軟體是哪一款、版本是不是夠新、有沒有把 HTTP/3 支援排進升級計畫。這幾個問題直接對應前面拆解過的三款軟體支援現況,問下去多半能得到明確答案。查出結果之後,不論是打開 CDN 開關,還是等主機商升級軟體版本,都是你接下來能實際採取的下一步。

HTTP/3 真正解決的問題,是傳輸層那套跑了幾十年的舊規則,終於補上串流各自獨立、加密與連線合併協商、換網路不斷線這幾塊拼圖。它不會讓一個內容空洞的頁面突然衝上排名第一,但如果核心網頁指標已經調到接近天花板,速度還是卡著,問題很可能不在網站本身,而在傳輸協定這一層還沒跟上。查一次自己的網站現在走哪個協定,再對照主機軟體與 CDN 有沒有開啟,這是少數不用改內容、不用重寫程式碼,只要調對開關就能拿到的效能優化。

資料來源
  1. RFC 9114: HTTP/3 — IETF
  2. RFC 9000: QUIC: A UDP-Based Multiplexed and Secure Transport — IETF
  3. RFC 9001: Using TLS to Secure QUIC — IETF
  4. Google 抓取工具與擷取工具(使用者代理程式)總覽 — Google
  5. Usage Statistics of HTTP/3 for Websites — W3Techs
  6. HTTP/3 protocol | Can I use — Can I Use
  7. QUIC and HTTP/3 Support — LiteSpeed
  8. Support for QUIC and HTTP/3 — Nginx
  9. Bug 64462 – [Feature Request] Support for HTTP/3 — Apache
  10. HTTP/3 — Cloudflare
  11. Inspect network activity — Chrome DevTools