打開 PageSpeed Insights,分數紅紅的一片,你想對症下藥,卻發現報告裡那行「最大內容繪製元素」要嘛指向一張你根本沒注意過的圖,要嘛在手機跟電腦上指到完全不同的東西,更糟的是有時候那一欄根本是空的。沒先確認 LCP 元素到底是誰,後面所有優化都是瞎猜,壓縮錯圖片、preload 錯資源,分數一動也不動。
WordPress LCP 優化的第一步從來不是「裝個快取外掛」,而是先把那個拖慢頁面的最大元素揪出來,再判斷它卡在載入流程的哪一段。這篇會帶你從找出 LCP 元素開始,拆解它為什麼抓不到、抓到之後怎麼對應到正確的修法,把力氣花在真正會動分數的地方。
LCP 元素到底是什麼?為什麼要先找出它
最大內容繪製(Largest Contentful Paint,LCP)量的是「畫面可視範圍內,最大那個內容元素」完整顯示出來所花的時間。它是 Google Core Web Vitals 三項指標之一,也是排名訊號,目標是在 2.5 秒內完成;2.5 到 4 秒算「需要改善」,超過 4 秒就是不及格。Google 採用第 75 百分位來判定,也就是要有 75% 的造訪都落在 2.5 秒內才算過關。
這個「最大元素」通常是三種其中之一:一張圖(文章的精選圖、首頁的 hero 背景圖)、一段文字(多半是 H1 標題或大段落),或是帶有預覽圖的影片。它是頁面上單一面積最大的可視內容,不是整頁、也不是最重要的內容,純粹是「最大」。
先找出它的理由很實際:LCP 永遠存在,你不是在「修掉」LCP,而是在縮短它出現的時間。如果你連是哪個元素都不知道,就無從判斷該優化圖片、該改字型、還是該動伺服器。在地經驗上,最常見的浪費就是看到分數差就先去壓縮全站圖片,結果 LCP 元素其實是一段被字型卡住的標題文字,圖片壓得再小也沒用。
WordPress LCP 元素抓不到、找不到怎麼辦
先講結論:報告裡「找不到 LCP 元素」或元素一直跳動,幾乎都不是工具壞掉,而是你的頁面把那個元素藏起來、或是不同情境下的最大元素本來就不一樣。把下面幾種情況對號入座,就知道該怎麼處理。
情況一、手機和電腦的 LCP 元素不同。 這是最常被忽略的。手機畫面窄,可視範圍內最大的可能是 H1 文字;電腦寬螢幕下,hero 圖一進入可視範圍就變成最大元素。PageSpeed Insights 預設先給你手機資料,你卻照著電腦的直覺去優化圖片,自然對不上。解法是進 PSI 後手動切換「行動裝置」與「電腦」兩個分頁,分別看各自的 LCP 元素,兩邊要分開優化。
情況二、實驗室資料和真實使用者資料指到不同元素。 PSI 上半部「探索你的實際使用者體驗」是 CrUX 真實使用者資料(過去 28 天統計),下半部「診斷效能問題」才是 Lighthouse 當場測一次的實驗室資料。兩者測法不同,挑出的最大元素也可能不同。如果你的網址有足夠的 CrUX 資料,以真實使用者那份為準;資料不足時 PSI 會改顯示整個網域的平均值,那份就別拿來判斷單一頁面。
情況三、LCP 元素是 CSS 背景圖,瀏覽器太晚才發現它。 很多 WordPress 佈景主題與頁面建構器(page builder)的 hero 區塊用的是 CSS background-image,不是 <img> 標籤。瀏覽器的預載掃描器(preload scanner)只看得懂 HTML 裡的 src、srcset,看不到藏在 CSS 裡的背景圖,必須等樣式表下載並開始渲染,才發現「原來還要載這張圖」。在報告裡的表現就是這張圖的「載入延遲」特別長,元素也可能因為一直沒被算進去而顯得抓不穩。
情況四、LCP 圖被 JavaScript 動態塞進頁面,或被延遲載入(lazy load)藏住 src。 如果你的圖是靠 JS 載入,或被 lazy load 外掛改寫成 data-src,HTML 原始碼裡看不到真正的圖片網址,瀏覽器就得先跑完腳本才知道要載這張圖。這類情況下,工具當下抓到的 LCP 元素會不穩定,因為元素出現的時機被推遲了。
把元素本身找出來,最可靠的兩個地方:一是 PSI 下半部 Lighthouse 區,用 LCP 篩選器只看相關項目,裡面的「最大內容繪製元素」診斷會直接給你那個元素的截圖、文字內容或圖片 alt、以及對應的 HTML 程式碼;二是 Chrome DevTools 的 Performance 面板,錄一段頁面載入,時間軸上會標出 LCP 標記,點下去能看到該元素的 DOM 路徑與尺寸。確認元素是圖、是文字還是背景圖,下一步才有方向。
把 LCP 拆成四段,找出真正的瓶頸
抓到元素只是上半場。真正決定怎麼修的,是把整段 LCP 時間拆成四個互不重疊、加起來剛好等於總時間的子區段。這套拆法來自 web.dev 的官方方法論,PSI 與 Lighthouse 的「最大內容繪製元素」診斷裡也直接列出這四段。
收到首位元組
越接近 0 越好
下載資源本身
越接近 0 越好
四段的意思分別是:
- 首位元組時間(TTFB):從使用者點下連結,到瀏覽器收到 HTML 文件第一個位元組的時間。
- 資源載入延遲:從收到首位元組,到瀏覽器開始下載 LCP 資源(那張圖或那個字型)之間的空檔。如果 LCP 元素是用系統字型的純文字,不需要額外載資源,這段是 0。
- 資源載入時間:實際下載那個 LCP 資源花掉的時間。純文字元素一樣是 0。
- 渲染延遲:LCP 資源下載完成後,到元素真正畫到畫面上之間的延遲。
名字裡帶「延遲」的兩段(載入延遲、渲染延遲)是你要想辦法壓到接近 0 的;另外兩段牽涉真實的網路傳輸,本來就要花時間。web.dev 給的判斷準則很直接:LCP 的時間絕大部分應該花在下載 HTML 與 LCP 資源上,任何一段「這兩個資源都沒在下載」的空檔,都是可以優化的破口。
這裡有個多數 WordPress 教學都漏掉、卻最容易踩的陷阱:只壓一個子區段,省下的時間常常只是平移到另一段,總 LCP 一動也不動。 web.dev 舉的例子很經典:你把 LCP 圖片從 JPG 換成 WebP,載入時間是縮短了,但如果這張圖本來就被 JavaScript 藏到腳本跑完才一次顯示,省下的時間會原封不動跑到「渲染延遲」那段。所以拆四段的意義在於:先看哪一段最長,再針對那一段下手,而不是把所有招數一次全上。
不同 LCP 元素與瓶頸,分別怎麼對應修法
確認了元素類型、也看出哪一段最長之後,修法其實有跡可循。下面這張對照表把「元素是什麼」「哪段最長」對應到該優先做的事。
| LCP 元素 | 最長的子區段 | 優先處理方向 |
|---|---|---|
<img> 精選圖 |
載入延遲高 | 確認沒被 lazy load、加上 fetchpriority="high",必要時 preload |
| CSS 背景圖 | 載入延遲高 | 手動 preload 背景圖(瀏覽器掃不到 CSS 裡的圖) |
| 任何圖 | 載入時間高 | 壓縮、改 WebP/AVIF、依實際顯示尺寸縮圖、上 CDN |
| 文字標題 | 渲染延遲高 | 字型 font-display: swap、字型本機化並 preload、減少阻擋渲染的 CSS |
| 任何元素 | TTFB 高 | 升級 PHP、上快取、用輕量主題、必要時邊緣快取 |
接著逐段展開。
載入延遲高,代表 LCP 資源太晚才被發現
這段是 WordPress 站最常出問題、也最容易見效的地方。理想狀態是 LCP 資源跟頁面第一個資源「同時」開始下載;如果它晚很多才開始,就有救。
如果 LCP 是 <img> 圖片,先確認它沒有被加上 loading="lazy"。WordPress 從 5.5 版起替所有圖片自動加 lazy load,曾被整個業界批評,因為連可視範圍內、很可能是 LCP 的圖也一起被延遲了;5.9 版才修正成「跳過頁面前三張圖」的強化版 lazy load。但這不保證萬無一失,有些主題或效能外掛會再自己偷偷把 LCP 圖 lazy load 回去,等於把官方的修正蓋掉,這點要特別檢查。
確認沒被延遲後,給它 fetchpriority="high"。WordPress 自 6.3 版起會自動替「它猜測是 LCP 的圖」加上這個屬性,根據官方釋出說明,這項功能「通常能改善 LCP 約 5% 到 10%」,觸發條件是該圖沒被 lazy load、尚未有 fetchpriority 屬性、且尺寸大於 5 萬平方像素。問題在於,這個自動判斷並不總是準,實務上常見它把高優先權加到錯的圖(例如可視範圍外的圖)。如果你發現核心加錯了對象,部分效能外掛提供「停用核心 fetchpriority」的選項,讓你手動指定正確的那張。
如果 LCP 是 CSS 背景圖,問題本質不同:瀏覽器的預載掃描器看不到 CSS 裡的圖,所以不管你怎麼設 fetchpriority 都沒用,因為它根本還沒發現這張圖。正解是在 HTML 的 <head> 手動 preload,並帶上高優先權:
<link rel="preload" fetchpriority="high" as="image" href="/wp-content/uploads/hero.webp" type="image/webp">
要注意整頁只給「一到兩張」圖高優先權就好,全部都標高等於沒標,瀏覽器無法分辨誰才該先載。
載入時間高,代表資源本身太大
這段是純下載時間,方向只有一個:讓資源變小、變近。
圖片優先轉成新世代格式。WordPress 自 5.8 版起原生支援 WebP,全球瀏覽器支援度已超過 90%,可以直接上傳使用;AVIF 壓得更小但 WordPress 核心尚未原生支援,要靠外掛轉換。圖片要依「實際顯示尺寸」縮好再上傳,hero 大圖桌機約 1920px 寬、手機約 750px 寬就夠,內容圖桌機約 1200px、手機約 600 到 800px。單張圖建議控制在 100KB 以內,尤其是手機版。WordPress 媒體庫本身會自動產生多種尺寸並寫好 srcset,多數情況讓瀏覽器自己挑合適尺寸即可。
距離方面,用內容傳遞網路(CDN)把資源放到離訪客最近的節點,圖片型 CDN 還會順手幫你做格式與尺寸優化。最後,設定合理的快取標頭(Cache-Control),讓回訪者直接從瀏覽器快取拿圖,這段時間能直接歸零。
渲染延遲高,代表資源載完了卻畫不出來
資源都下載完了,元素卻遲遲不顯示,多半卡在這幾件事:<head> 裡有還沒載完、阻擋渲染的樣式表或同步腳本;LCP 元素還沒被加進 DOM(在等 JavaScript);或主執行緒被長任務塞住。
對 WordPress 站來說,最常見的是肥大的 CSS 阻擋渲染。處理順序是先移除未使用的 CSS(很多主題與外掛把整份樣式表全站載入,用不到的佔一大半),再把非關鍵 CSS 延後載入,關鍵 CSS 才考慮內嵌進 HTML。JavaScript 則盡量加 defer 或 async,避免同步腳本卡在 <head>。這些動作多數效能型外掛都能一鍵處理,重點是先解決「未使用的 CSS/JS」,連帶就把阻擋渲染的問題一起修掉了。
如果 LCP 元素是文字,渲染延遲往往來自字型。瀏覽器預設會等字型完全下載才顯示文字,造成一段「看不見的文字」空窗,把 LCP 一起卡住。對策是把字型設成 font-display: swap,先用系統字型墊著、字型載好再換;同時把 Google 字型下載到本機代管,並針對關鍵字型 preload。許多主題與頁面建構器現在也支援本機上傳字型,用哪種方法不重要,把字型放到自己主機上對效能與隱私都更好。
TTFB 高,代表伺服器太慢吐出 HTML
這段排最後,不是因為不重要,而是因為它通常最不受你直接控制,卻又會連動影響後面每一段,前端在後端吐出第一個位元組之前什麼都做不了。
WordPress 站能著力的點:用品質好、伺服器夠力的主機;PHP 升到最新版(較新版本通常比舊版快約一成);換一套輸出 HTML 精簡的輕量主題;裝好快取方案(伺服器層或外掛皆可),有國際訪客就再加上邊緣快取。另外,不必要的外掛能砍就砍,每多一支外掛都會增加伺服器的運算負擔,直接墊高 TTFB。也別忽略多重轉址:訪客經過廣告連結或短網址一層層跳轉,會讓 TTFB 在還沒進到你的站之前就被拖長。
WordPress 內建幫了多少、還缺哪一塊
把這些做完之前,先認清 WordPress 核心已經默默替你扛了一部分,剩下的才是你要補的。
核心預設就有的:自 4.4 版起自動產生多尺寸圖片與 srcset、sizes,讓瀏覽器挑合適尺寸;自 5.8 版起支援 WebP 上傳;自 5.9 版起的強化 lazy load 會跳過前三張圖;自 6.3 版起自動替推測的 LCP 圖加 fetchpriority="high"。較新版本還內建了推測性載入(Speculative Loading),能在使用者滑鼠移到連結上時,預先抓取甚至預先渲染下一頁,讓站內導覽的感知速度大幅變快。
但核心顧不到的,正是前面整篇的重點:它不會幫你判斷 CSS 背景圖該 preload、自動 fetchpriority 還可能加錯對象、未使用的 CSS/JS 它不會清、字型的 font-display 與本機化要你自己設、TTFB 牽涉的主機與 PHP 更是它管不到的。換句話說,核心解決了「最大公約數」,而你的 LCP 卡在哪一段,得靠前面那套「找元素、拆四段、對症下藥」的流程自己定位。
順帶一提,網路上有種說法是「乾脆把精選圖從文章頁拿掉,讓 H1 文字當 LCP 元素,文字比圖快」。這在某些版型確實能讓 LCP 下降,但它換來的是版面與內容呈現的取捨,不是無痛優化,要不要用得看你的內容策略,別當成萬靈丹。
從找元素到看見分數變綠,該怎麼跑這套流程
WordPress LCP 優化會卡住,幾乎都卡在跳過了第一步。先用 PageSpeed Insights 或 Chrome DevTools 把 LCP 元素確實揪出來,分清手機與電腦、實驗室與真實資料各自指向誰;接著把 LCP 拆成 TTFB、載入延遲、載入時間、渲染延遲四段,看哪一段最長,記住省一段常常只是把時間平移到另一段,所以要打最痛的那段;最後照元素類型對應修法,圖片處理發現與優先權、文字處理字型與渲染、伺服器處理 TTFB。
別一次把所有招數全上,那只會讓你分不清到底是哪一步見效。改一段、重測三次取穩定值、再看真實使用者資料是否跟著往綠色走,這樣的節奏才能把力氣花在真正會動分數的地方。把這套定位流程養成習慣,下次再打開那張紅通通的報告,你會知道第一個該點開的不是任何外掛設定,而是那行「最大內容繪製元素」。