Whoops

Lazy Loading 延遲載入指南:網站速度與 SEO 優化

Lazy Loading 延遲載入只先載入首屏資源,視窗外的圖片、影片、iframe 在使用者滑到時才動態抓取。本指南解析 loading=lazy、IntersectionObserver、首屏禁用、CLS 預留空間與 Google 收錄原則,教你正確延遲載入以改善 LCP、CLS 與 SEO。

作者:褚崇名(Sliven)

本頁目錄

其實不少人都遇過這種狀況:用 PageSpeed Insights 測自己的網站,分數永遠卡在六七十分,然後系統一直叫你「延後載入畫面外的圖片」。你照著做了,裝了外掛、加了 attribute,分數真的爬上去一點,可是過兩個月再看,行動版的 LCP(Largest Contentful Paint,最大內容繪製)反而變得更慢,搜尋排名也沒跟著起來。

這不是錯覺。延遲載入(Lazy Loading)是少數「做錯了比不做還慘」的效能優化手法。它原本是拿來救速度的,卻常常被當成萬靈丹亂貼,結果把首屏那張最該搶先下載的英雄圖,硬生生拖到最後才載。換句話說,問題常常不在主機不夠力,而在瀏覽器把每一張圖、每一段嵌入都當成「一進頁面就要搶著下載」,於是頻寬被一堆使用者根本還沒捲到、永遠不會看到的資源搶光。

三分鐘重點:延遲載入不是「開了就快」,而是「把下載的優先順序重排」。用對地方,首屏變快、頻寬變省;用錯地方,你最重要的那張圖會被你自己往後推。原生 loading="lazy" 解決了大多數情境,少數則要靠 fetchpriority 與 IntersectionObserver 收尾,而且 WordPress 從 5.5 開始會自動幫你加,你得更小心它有沒有加錯對象。

延遲載入到底在解決什麼問題:瀏覽器的下載佇列

要真的搞懂延遲載入,不能只記得「圖片慢點載」這五個字,得先理解瀏覽器開啟一個頁面時,背後那條看不見的下載佇列是怎麼運作的。

當瀏覽器拿到 HTML,它會一邊解析、一邊把遇到的資源(圖片、CSS、JavaScript、字型、iframe)丟進一個優先順序佇列。每一張 <img> 預設都會被當成「可以下載了」丟進去,瀏覽器再用它自己的啟發法決定誰先抓。問題來了:一個典型文章頁或商品頁,HTML 裡可能有二三十張圖,但使用者一打開只看得到前兩三張。剩下那二三十張,瀏覽器還是照樣發出 HTTP 請求去抓,把行動網路的頻寬、CPU、電池統統吃掉。

延遲載入做的事情很單純:把那些「還在畫面外」的資源,從這條佇列裡先挪開,等使用者真的捲動到接近它們時,再放回去開始下載。這個動作的價值,在行動裝置上尤其明顯。根據 Statista 的全球網頁流量統計(2026 年 4 月),行動裝置佔了全球網頁流量的一半以上,而行動網路的頻寬與穩定度遠不如桌機環境,每一張沒必要的圖都是在浪費使用者的時間與流量。

換個比喻:延遲載入就像一間吃到飽餐廳,不會在你一坐下就把桌上兩百道菜全部端上來,而是接近用到時再補下一輪。在手機或不穩定的網路上,這種「分批上菜」能減少不必要的下載。Google 的排名系統會使用 Core Web Vitals 等頁面體驗訊號,但這些只是眾多訊號的一部分,良好分數不保證排名提升;速度優化首先仍是為了使用者,這是 web.dev〈Why does speed matters?〉(2026)的立場。

原生 loading=lazy 帶來的典範轉移

在 2019 年以前,要做延遲載入只有一條路:寫 JavaScript。你得監聽捲動事件、計算元素跟視窗的距離、在對的時機把 data-src 換成 src。這條路能跑,但充滿地雷:捲動事件效能差、要手動 debounce、沒算好會閃一下空白、對 SEO 也不友善。

後來瀏覽器把這件事直接吃下來了。只要在 <img> 加上一個 attribute:

<img src="photo.jpg" loading="lazy" width="800" height="600" alt="商品照" />

瀏覽器就會自己在背景判斷這張圖距離視窗多遠,該載的時候才載。這是瀏覽器層級的實作,不靠 JavaScript、不需要任何函式庫,也比手寫的捲動監聽準確、省電。根據 MDN 對 <img> 元素 loading 屬性的文件(2025),這個屬性接受 eager(預設值,立刻載入)與 lazy(延遲到接近視窗才載入)兩個值。web.dev 的延遲載入指南(2024)也將原生延遲載入列為現代網站效能的基本功。

這個改變的影響是典範等級的:它把延遲載入從「需要前端工程師寫程式才能做到的事」,降級成「任何人加一個 attribute 就能開啟」的事。對 WordPress 這類內容管理系統來說尤其關鍵,因為它可以直接在輸出 HTML 時批次加上屬性,完全不碰 JavaScript。web.dev 的官方說明(2024)也詳細記錄了瀏覽器層級延遲載入的設計與演進。

有幾個細節多數人會忽略,這裡一次講清楚:

  • 一定要寫寬高widthheight 不能省。瀏覽器要靠這兩個值在圖片還沒下載前就先保留版面空間,否則圖片載入完成那一刻會把下面的內容往下推,造成 CLS(Cumulative Layout Shift,累計版面位移)爆炸,直接拖垮你的 Core Web Vitals 成績(見 web.dev 的 Core Web Vitals 說明,2024)。
  • 保留 src:就算用了延遲載入,src 還是要寫真實網址,不要把它清掉只留 data-src。那是舊式 JS 延遲載入的做法,搭配原生 loading="lazy" 反而會讓某些瀏覽器與爬蟲抓不到圖。
  • 距離門檻交給瀏覽器:原生延遲載入會在圖片距離視窗一段距離時就先開始下載(這段距離依瀏覽器與連線類型而不同),所以使用者捲到時通常已經載好了,不會有「圖片遲到」的感覺。你不需要、也不應該自己再去調這個門檻。

LCP 悖論:延遲載入反而拖慢首屏的時刻

接下來這段是整篇文章最該讀懂的部分,也是大多數通用教學會輕輕帶過、卻最能決定你網站生死的地方。

Core Web Vitals 裡有一個指標叫 LCP,它量測的是視窗內最大內容元素完成繪製的時間;在圖片導向的頁面,LCP 元素常是英雄圖、商品主圖或文章封面,但也可能是文字區塊或其他元素。Google 沒有公布 LCP、INP、CLS 各自的排名權重,不能把 LCP 稱為其中權重最高的一項(見 web.dev 的 Core Web Vitals 文件,2024)。

問題的核心在於:延遲載入會把一張圖從瀏覽器「立刻下載」的佇列裡挪走,改成「等它靠近視窗才下載」。如果這張圖剛好是首屏那張最大的圖,你等於是在告訴瀏覽器:「這張圖晚點再抓。」結果就是,頁面上最該搶先下載的元素,反而被你自己往後推,LCP 數字不降反升。

web.dev 在優化 LCP 的官方指南裡講得很白:LCP 元素(通常就是首屏大圖)應該優先載入,絕對不能延遲它。你可以用 fetchpriority="high" 這個屬性明確告訴瀏覽器「這張圖最重要、最先抓」,搭配上「首屏圖片一律不要加 loading="lazy"」的鐵律,才能避免自己人打自己人,這些原則出自 web.dev 的 Optimize LCP 指南(2024)。

底下整理一個判斷流程,照著走就不會踩雷:

  1. 打開你的頁面,用 Chrome DevTools 的 Performance 面板或 Lighthouse 找出 LCP 元素是哪一個。
  2. 如果 LCP 元素是一張圖,這張圖絕對不能loading="lazy",而且要加上 fetchpriority="high"
  3. 首屏(一進頁面就看得到)的其他圖片,也建議不要延遲載入,讓它們正常下載即可。
  4. 只有「需要往下捲才看得到」的圖片,才加上 loading="lazy"

這個原則聽起來簡單,可是在實務上會被自動化工具破壞。很多快取外掛、佈景主題、甚至 WordPress 核心本身,會「一律」幫所有圖片加上 loading="lazy",連首屏那張也不例外。這時候 LCP 就會莫名變慢,而你還會以為是主機或圖片太大的問題。這正是後面 WordPress 那一節要談的重點。

三條實作路線的取捨

延遲載入到今天有三條主要路線:原生 attribute、IntersectionObserver 自己寫、直接用現成函式庫。選哪一條,取決於你想解決的資源類型與你能投入的工程資源。

實作路線 最適合的場景 優點 主要限制
原生 loading="lazy" 圖片、iframe,絕大多數內容網站 零 JavaScript、省電、瀏覽器維護、SEO 友善 只適用 img 與 iframe,無法精確控制觸發距離與自訂動畫
IntersectionObserver 背景圖、輪播、無限捲動、影片、自訂元件 精確控制、可搭配任何資源類型、效能比捲動監聽好很多 需要寫 JavaScript、要處理 no-JS 退化與爬蟲可讀性
現成函式庫 有複雜互動需求、特效、佔位圖的進階專案 功能完整、有 placeholder 與模糊漸進等效果 多一層相依、檔案體積、可能與其他腳本衝突

實務上的建議是:原生能解決的,就別引入 JavaScript。一個普通的內容網站,九成的延遲載入需求靠 loading="lazy" 就夠了。只有當你碰到原生屬性管不到的東西,才往上走。

什麼時候一定要用 IntersectionObserver?答案是「資源不是 <img><iframe>」的時候。例如用 CSS background-image 設定的背景圖、用 <video> 的影片、用 <div> 包起來的自訂輪播元件,原生 loading="lazy" 對它們沒作用。這時候你用 IntersectionObserver 觀察元素,等它進入視窗再動態把網址塞進去。MDN 對 IntersectionObserver 的文件說明,這個 API 會在目標元素與視窗(或某個容器)產生交集時呼叫回呼函式,正好拿來做滾動觸發的延遲載入。

用 IntersectionObserver 時有兩個雷一定要避開。第一,一定要保留無 JavaScript 的退化版本:在 <noscript> 裡放一份正常的 <img src="...">,或直接讓 HTML 裡就有真實的 src,靠 JavaScript 把它暫時換成 data 屬性,這樣爬蟲與關閉 JavaScript 的使用者都還看得到圖。第二,觸發距離不要設太短:用 rootMargin 給個兩三百像素的緩衝,讓圖在使用者捲到之前就先開始抓,才不會出現「捲到了、圖還沒來」的空白。

給你一段實務可用的最小骨架,概念是:HTML 裡先放真實網址在 data-srcsrc 留一張極小的佔位圖;觀察器在元素進入視窗前一段距離時,把 data-src 接回 src,瀏覽器就會開始下載。關鍵是 rootMargin: "300px" 這個預載緩衝,以及 unobserve 之後元素就不再被觀察,避免重複觸發。這套寫法對背景圖、輪播元件、自訂嵌入都通用,只要你把「觸發條件」換成對應的屬性替換邏輯就好。實際上線前,記得關掉瀏覽器 JavaScript 再開一次頁面,確認 noscript 退化版本裡的圖片還能正常顯示,這個動作能幫你擋掉絕大多數 SEO 與無障礙的坑。

WordPress 用戶非知不可的自動延遲載入

如果你用 WordPress,有一段歷史你一定要知道,因為它直接影響你網站現在的行為。

從 WordPress 5.5(版本代號 Eckstine,2020 年 8 月發布)開始,核心會自動在 <img> 標籤加上 loading="lazy" 屬性。也就是說,你什麼外掛都沒裝、什麼程式都沒寫,WordPress 預設就已經在幫你做延遲載入了,發布內容見 WordPress.org 的 5.5 版本公告。這個出發點是好的,它讓數百萬個不懂前端的站長,一夕之間拿到了免費的效能提升。

但早期的自動加註有個盲點:它沒有特別排除首屏那張 LCP 圖。這代表很多升級到 5.5 之後的網站,雖然下方圖片不再搶頻寬,可是首屏主圖也跟著被延遲了,LCP 反而惡化。後來的版本陸續修正這個行為,會盡量跳過頁面最前面的圖片,但「自動判斷首屏」這件事本身不完美,尤其是版面複雜、圖片位置由 CSS 或 JavaScript 動態決定的時候,它還是會猜錯。

實務上建議 WordPress 用戶做接下來幾件事,別把延遲載入完全交給核心:

  • 手動確認首屏圖:用瀏覽器開檢視元素,確認你的首屏主圖沒有被加上 loading="lazy"。如果有,想辦法把它拿掉,再加上 fetchpriority="high"。很多佈景主題與 SEO 外掛現在都有這個設定選項。
  • 檢查快取外掛:WP Rocket、LiteSpeed Cache 這類外掛會自己再覆蓋一次延遲載入設定,有可能跟核心的行為疊在一起,產生意料之外的結果。設定時只留一套,不要多重啟用。
  • 圖片一定要有寬高:WordPress 上傳圖片時通常會自動產生寬高屬性,可是如果你是用自訂 HTML 區塊或頁面編輯器手動插入,記得補上,否則 CLS 會跟著延遲載入一起炸。

如果你想要一套更系統化的 WordPress 加速設定,相關的完整教學在Core Web Vitals 實戰,那邊把快取、圖片、主機這幾個環節都串起來談。延遲載入只是其中一塊,單獨做對、其他環節沒跟上,分數一樣上不去。搭配WordPress 圖片優化的壓縮與格式轉換一起做,效果才會疊加。

延遲載入會不會害 Google 看不到內容

這大概是站長最焦慮的一個問題:把圖片或內容延遲載入,Google 爬蟲會不會以為這頁沒東西、然後排名掉下去?

答案要看你「怎麼做」。Google Search Central 針對延遲載入有正式的說明文件,核心原則是:內容必須出現在最終渲染後的 DOM 裡,爬蟲才看得到。Google 現在用的是現代版的 Chromium 來渲染網頁,所以它具備執行 JavaScript 的能力,理論上能夠觸發大部分的延遲載入邏輯,細節見前述 Google Search Central 的延遲載入說明

但「理論上能」不等於「一定會」。實務上有幾種做法會出事:

  • 無限捲動沒有可抓取分頁:那種「捲到底自動載入下一頁」的設計,如果沒有提供可直接存取的分頁網址與可點擊連結,Googlebot 不會靠捲動畫面發現後面的內容。sitemap 只能協助發現網址,不能取代這套分頁結構。
  • 把圖片網址塞進 data 屬性、清空 src:舊式做法把真正的網址放在 data-srcsrc 留空或放一張空白圖,等 JavaScript 觸發再替換。這種做法在 Google 渲染時,如果腳本沒跑、或跑得慢,圖片等於不存在,圖片搜尋的流量會直接歸零。
  • 內容本體靠 JavaScript 注入:把文章文字本身都延遲載入,這是最危險的。圖片看不到頂多少流量,但文字內容看不到,等於整頁對 Google 是空的。

安全的做法是:用原生 loading="lazy",讓 src 永遠是真實網址,圖片資訊(alt、周圍文字)都在 HTML 裡。這樣一來,就算爬蟲完全不執行 JavaScript,它讀 HTML 的第一手過程就抓得到圖片網址與替代文字,延遲載入對 SEO 來說是隱形的。如果你的網站有大量需要爬蟲理解的內容結構,技術性 SEO 指南JavaScript SEO 兩篇有更深入的說明。

不要把延遲載入當成節省爬取預算的主要手段。Googlebot 仍可能為了轉譯頁面抓取圖片與相關資源;大型網站更該先處理重複網址、錯誤回應、伺服器容量與內部連結。若網站頁面數量很大,可以另外參考爬取預算的優化思路。

依資源類型決定要不要延遲載入

延遲載入不是一套設定走天下。不同類型的資源,該不該延遲、怎麼延遲,答案完全不一樣。底下這張表是實務上常用的判斷依據,你可以直接套用。

資源類型 建議做法 要注意的事
首屏主圖(LCP 元素) 不要延遲,加 fetchpriority="high" 這是延遲載入最容易犯的錯,會直接拖慢 LCP
文章內文中下方的圖片 loading="lazy",附寬高 記得寬高,否則 CLS 會跑掉
嵌入的 YouTube、地圖 iframe loading="lazy" iframe 很重,延遲效益最大
輪播圖的第二張以後 延遲,只首圖正常載 輪播第一張常是 LCP,別延遲它
背景圖(CSS background-image) 用 IntersectionObserver 延遲 原生屬性管不到,要自己寫或靠外掛
影片(<video>) preload="none" 或 IntersectionObserver 別整段影片都預載,流量兇手
網頁字型 通常不延遲,改用 font-display: swap 字型延遲會造成文字閃動,用 swap 更安全

這張表的精神只有一句話:會出現在首屏的、是 LCP 元素的,不要延遲;要捲動才看得到的、體積大的,才延遲。記住這條線,九成情境不會出錯。

有些延伸的主題值得順著看下去。圖片延遲載入要搭配壓縮與格式轉換才完整,圖片壓縮工具WebP、JPG、PNG 圖片格式比較可以一起讀;如果你用的是 WordPress,Smush 外掛本身就把延遲載入整合進去了,設定上更省事。把圖片這條線照顧好,再去處理主機與快取,可以參考網站快取CDN的運作原理。

優先順序的全貌:preload、fetchpriority 與 lazy 怎麼分工

延遲載入說到底,只是瀏覽器「資源優先順序」這套大系統裡的一個開關。要看懂它為什麼有時幫倒忙,你得先把整個優先順序的機制摸清楚,才不會把三個看起來都在「管載入」的工具搞混。

瀏覽器決定資源何時下載,會綜合發現時間、資源類型、目前網路與瀏覽器內部排程。開發者也能提供提示:<link rel="preload">可讓特定資源提早被發現,fetchpriority 可用 high、low、auto 表達相對優先程度,loading="lazy" 則延後畫面外圖片或 iframe 的下載。這些都是提示,不是跨瀏覽器都完全相同的固定排程;提示下得太多或互相衝突,反而可能搶走真正關鍵資源的頻寬。

這三個工具彼此獨立,卻會疊加。最常見的問題是:你用 preload 提早發現一張首屏圖,卻同時讓外掛給它加上 loading="lazy",形成互相矛盾的提示。判斷準則很樸素:preload 用來提早發現資源,fetchpriority 用來調整相對優先級,loading=lazy 用來延後畫面外資源。首屏 LCP 圖不要延遲;畫面外的圖再考慮 lazy。是否同時使用 preload 與 fetchpriority,則應以實際請求瀑布圖驗證,避免重複下載或無效預載。

預載首屏圖時,要確保 hrefimagesrcsetimagesizes、跨來源設定與頁面實際使用的圖片一致;否則瀏覽器可能把它當成另一個資源,再下載真正要用的版本。fetchpriority="high" 可以用在確定的 LCP 圖,但不是每個 preload 都必須搭配。用 DevTools 的 Network 面板確認是否重複下載,以及請求優先級是否符合預期。

延遲載入遇上回應式圖片:srcset 與 picture 的搭配

現代網站幾乎都會做回應式圖片(Responsive Images),用 srcsetsizes 讓瀏覽器依螢幕寬度挑選不同解析度的圖檔,或用 <picture> 元素做更精細的藝術指導(Art Direction)。延遲載入跟這套機制能不能並存?答案是能,而且搭配得很好,但有幾個細節值得釐清。

原生 loading="lazy" 完全相容於 srcset。瀏覽器在「決定要不要下載」這一步會看 loading,在「要下載哪一個版本」這一步會看 srcsetsizes,兩個決策是分開的。也就是說,你可以在同一張 <img> 上同時寫 loading="lazy"srcsetwidthheight,瀏覽器會在使用者捲到這張圖時,依當下螢幕寬度挑最合適的那一版來抓,不會衝突。

<picture> 做藝術指導時,原則一樣:loading="lazy" 寫在最內層的 <img> 上即可,<source> 不用、也不應該額外加。常見的錯誤是有人把 loading="lazy" 寫到 <source> 上,瀏覽器會直接忽略它,因為延遲載入的開關只在 <img> 身上有效。另一個陷阱是藝術指導的首圖:很多首頁用 <picture> 在手機版與桌機版切換不同的英雄圖,這時那張內層 <img> 同樣是 LCP 元素,一樣不能延遲、一樣要掛 fetchpriority="high",觀念完全延續前面 LCP 那一節。

還有一個延伸觀念:延遲載入本身並不會幫你「挑小圖」。如果你的 srcset 設得不對,瀏覽器可能挑了一張過大的圖,就算延遲到下方才載,下載那一刻還是抓了一個肥檔。延遲載入解決的是「時機」,回應式圖片解決的是「體積」,兩者搭配才能同時兼顧下載順序與檔案大小。把手機版圖片壓到合理大小,可以參考回應式網頁設計的觀念,搭配前面提過的圖片格式選擇。

實際專案常見的失敗模式

延遲載入的失敗,往往不是技術本身錯,而是「用錯了地方」或「沒有配套」。接下來這幾種是實務上重複出現、值得你特別小心的模式。

第一種,電商商品頁把主圖也延遲了。商品主圖通常是那個頁面的 LCP 元素,也是決定消費者要不要繼續看的關鍵。有些商品頁為了統一管理,把頁面上所有圖片一律加上延遲載入,結果主圖反而最後才出現,行動版的 LCP 明顯惡化。延遲載入在商品頁的正確用法是:主圖與前幾張縮圖正常載入,下方推薦商品、評論區的圖片才延遲。一個頁面裡,「要不要延遲」是逐張判斷的,不是一刀切。

第二種,服務型網站把作品集圖片延遲,卻忘了留寬高。像月子中心、室內設計、醫美這類高度依賴視覺的網站,作品集圖片多又大。延遲載入沒問題,可是沒寫寬高的話,圖片一張張載入完成時,整個版面會不斷往下跳,使用者被畫面抖到煩、Google 也會把 CLS 判為不及格。解法很無聊卻有效:每一張圖都補上 widthheight,或用 CSS 的 aspect-ratio 預留比例。

第三種,無限捲動沒給爬蟲退路。有些內容站用無限捲動把文章持續載入,但 Googlebot 不會像使用者一樣捲動頁面。每一批內容都要有可直接連到、回傳 200 的分頁網址,頁面上也要提供可被爬蟲發現的連結;sitemap 有助於發現網址,但不能取代分頁連結與可抓取內容。

第四種,快取外掛與核心延遲載入打架。WordPress 核心會自動加 loading="lazy",WP Rocket 這類外掛也會加,如果兩邊規則不一致,有時同一張圖被加兩次、有時首屏圖被誤判進延遲佇列。實務上建議擇一啟用,並用檢視元素實際確認輸出的 HTML 是不是你預期的樣子。

第五種,拿延遲載入掩蓋根本的肥胖問題。有些網站圖片根本沒壓縮,一張商品圖 5MB,站長不去處理壓縮,反而只開延遲載入,覺得「反正晚點載沒差」。可是當使用者真的捲到那張圖,5MB 還是要抓 5MB,行動網路下載體驗一樣糟糕。延遲載入是「重排優先順序」,不是「讓檔案變小」,這兩件事不能混為一談。

這些模式背後有一個共同的教訓:延遲載入是術,不是道。它解決的是「資源下載的時機」,解決不了「資源本身的體積」與「頁面結構的缺陷」。如果你的網站還是慢,先別急著調延遲載入,把網站變慢的真正原因找出來,會更有效率。

怎麼驗證延遲載入真的發揮作用

做完了不等於做對了。延遲載入一定要驗證,否則你只是把一個猜測放上線。建議用這個流程,從開發者工具一路看到真實使用者數據。

第一步,用 Chrome DevTools 的 Network 面板。打開你的頁面、開啟 Network、勾選「Disable cache」、把節流調成行動網路(Slow 4G 是很好的模擬環境),然後重新載入。觀察圖片的下載順序:首屏圖片應該在前幾個請求就出現,下方圖片一開始不應該有請求。接著慢慢往下捲,你會看到下方的圖片開始一張張被抓下來,這就代表延遲載入在運作。如果一進頁面就看到二三十張圖同時在下載,代表延遲載入根本沒生效。

第二步,用 Lighthouse 找出 LCP 元素。Lighthouse 報告裡會明確寫出「Largest Contentful Paint element」是哪一個。確認這個元素沒有被加上 loading="lazy",這是前面反覆強調的鐵律。如果你發現 LCP 元素居然有 lazy 屬性,那就是找到兇手了。

第三步,看 Core Web Vitals 的實測數據。Lab 數據(Lighthouse 跑出來的)跟 Field 數據(真實使用者資料)常常不同。Google 的 Core Web Vitals 排名訊號使用真實使用資料,但它只是眾多排名訊號之一,不能把報表狀態直接等同排名結果。你可以用 Search Console 的 Core Web Vitals 報表,或 PageSpeed Insights 的實際使用者體驗區塊,看 LCP、CLS、INP 表現。想做更完整的速度量測,網站速度測試工具那篇比較了幾個主要平台。

第四步,追蹤調整前後的變化。改一次設定就記錄一次數據,隔一兩週再比對。延遲載入的影響有時不會立刻在 Lab 數據上顯現,卻會在兩週後的 Field 數據裡看出 LCP 或 CLS 的移動。如果你想更全面理解這三個指標的關係,Core Web Vitals 完全攻略CWV 白話文介紹是很好的搭配讀物。

這裡要提醒一個心理準備:Field 數據需要累積足夠的樣本才會更新,流量較低的頁面可能要等更久才看得到變化。不要因為改完三天數字沒動就判定沒用、又把設定改回去,那反而會讓你永遠測不出真實效果。給數據兩到四週的觀察期,是比較健康的節奏。同時也要注意,PageSpeed Insights 的 Lab 分數跟 Search Console 的 Field 狀態不一定同步,兩者看的東西不同,別拿 Lab 分數去苛求 Field 馬上轉綠。

無障礙與資料節省:常被丟掉的兩個面向

延遲載入的討論九成集中在速度與 SEO,卻很少有文章談兩個同樣重要、卻容易被丟掉的面向:無障礙體驗與使用者的資料節省需求。這兩件事做對了,不但不會拖累速度,還會讓你的網站在 Google 的體驗評估裡更站得住腳。

先談無障礙。延遲載入對螢幕閱讀器(Screen Reader)使用者的影響,取決於你「怎麼實作」。原生 loading="lazy" 對輔助技術是友善的,因為圖片的 alt 替代文字、src 網址、寬高都還在 HTML 裡,螢幕閱讀器讀 DOM 時抓得到這些資訊,不會因為圖片還沒下載就朗讀不到。真正的麻煩出現在 JavaScript 式的延遲載入:如果你把 src 整個清空、只留 data-src,有些螢幕閱讀器會把這張圖判定為「沒有內容的破圖」,直接跳過。判斷準則:不管用哪種延遲方式,HTML 裡永遠要保留 alt 文字與真實的圖片網址(哪怕是佔位圖)。這同時也是 SEO 的要求,兩者完美重疊。

再談資料節省。現代瀏覽器與作業系統開始提供「資料節省模式」或「低資料模式」的選項,使用者一開啟,瀏覽器會更積極地延後非必要資源。延遲載入跟這個偏好方向一致:使用者想要省流量,你的網站配合它只載必要的圖,體驗是加分的。你可以更進一步,用 CSS 的 prefers-reduced-data 媒體查詢(在支援的瀏覽器上)判斷使用者是否開啟了低資料模式,主動降級圖片品質或減少裝飾性圖片。這個功能目前支援度還不全面,屬於漸進增強的範疇,但對重度依賴圖片的網站(攝影集、電商、旅遊)來說,是未來一兩年值得提前布局的方向。

還有一個相關但常被誤解的觀念:prefers-reduced-motion。這個媒體查詢管的是動畫與過場效果,不是圖片下載,所以它跟延遲載入沒有直接關係。但如果你在延遲載入時搭配了淡入、模糊漸進這類進場動畫,記得在 prefers-reduced-motion: reduce 時把動畫關掉,直接顯示圖片。對前庭功能敏感的使用者來說,一堆圖片同時淡入閃動會造成不適,這個小細節展現的是你對「所有人」的體驗都認真看待,而不只是衝分數。

把無障礙、資料節省、動作敏感這三件事納進來,延遲載入就不只是一個技術設定,而是以使用者為中心的體驗設計。這些改善對使用者有直接價值,但不應承諾排名會因此自然上升。

把延遲載入做對的行動清單

讀到這裡,你手上的資訊已經夠用了。接下來是把觀念變成動作的時候。底下整理成一份六步清單,照著走一遍,你的延遲載入設定就能從「大概有做」升級到「確定做對」。

  1. 盤點首屏:列出你網站每一種主要頁面(首頁、文章頁、商品頁),找出每一種頁面的 LCP 元素是什麼。這些元素是你的保護對象,絕對不能延遲。
  2. 清掉錯誤的 lazy:用瀏覽器檢視元素,確認 LCP 元素與首屏圖片都沒有 loading="lazy"。有的話拿掉,並補上 fetchpriority="high"
  3. 確認寬高:逐頁抽查圖片是否都有 widthheight。沒有的補上,或改用 CSS aspect-ratio。這一步直接決定你的 CLS 會不會炸。
  4. 開啟下方延遲:確認畫面外、需要捲動才看得到的圖片與 iframe,都有 loading="lazy"。WordPress 核心通常已自動處理,自訂 HTML 要自己加。
  5. 驗證一遍:用 DevTools Network 看下載順序、用 Lighthouse 確認 LCP 元素、用 PageSpeed Insights 看實測數據,三者都過關才算數。
  6. 兩週後回看:回 Google Search Console 的 Core Web Vitals 報表,比對調整前後的 Field 數據變化。數字會告訴你這次調整有沒有用。

延遲載入看起來只是個小 attribute,背後牽動的是瀏覽器資源排程、Core Web Vitals、搜尋引擎爬蟲這三個大工程。把它當成「加一個屬性就好的小設定」,你會在 LCP 與 SEO 上付出代價;把它當成「需要逐頁判斷、需要驗證的工程決策」,它才會真的變成你網站速度的助力,而非絆腳石。

如果你看完這篇,發現自己的網站在速度這條路上還有很多環節要補,我們的網頁速度優化與前面提過的 Core Web Vitals 實戰,把更完整的藍圖都畫出來了。延遲載入只是其中一塊拼圖,實際效果仍要和圖片壓縮、快取、主機回應與前端程式一起量測。每一項效能優化都有取捨;先確認瓶頸、調整後再用同一套條件驗證,才知道改動是否真的有幫助。

常見問題

Lazy Loading 會影響 SEO 排名嗎?
它本身不是直接的 Google 排名因素,但用對時會把 LCP、CLS 與行動體驗帶往好的一方,屬於間接加分。大前提只有一個:內容必須在不要求使用者點按或滑動的情況下就能載入。
Lazy Loading 會害 Google 收錄不到內容嗎?
使用原生 loading=lazy 或 IntersectionObserver 時,內容會在接近視窗時自動載入,風險低。真正的地雷是「點閱讀更多才展開」「滑到最底才載入」這類需要使用者互動才觸發的設計,Google 不會替你模擬這些動作,內容可能整段缺席。
Lazy Loading 與 Eager Loading 有什麼不同?
Eager Loading 在頁面一開時就把全部內容載入,服務首屏必看的元素;Lazy Loading 把資源拖到要用那一刻才載入,對付視窗外那些不急的內容。跑得快的網站幾乎都是兩種混著用,不是二選一。
WordPress 站要自己實作延遲載入嗎?
通常不必自己刻。WordPress 自 5.5 版起會自動為圖片補上 loading="lazy",多數站長再裝個效能外掛就夠用,只要記得別連首屏主圖也一起延遲就好。

主題聚落|技術 SEO 與網站架構 看「SEO 搜尋引擎優化」中樞 →

相關文章

褚崇名(Sliven) 創辦人・巫普斯科技有限公司

長期投入技術 SEO、GEO/AEO 與 AI 搜尋實務。本站文章以可驗證資料、公開來源與實作觀察整理而成。

完整作者介紹LinkedInGitHubX

想把這篇的方法用在自己的站上?

SEO 健檢、GEO/AEO 引用優化、網頁設計諮詢——把文章裡的方法落地到你的網站。