改善 Mail.ru 首頁的網站體驗核心指標資料,轉換率平均提升 10%

經過數個月的努力,Mail.ru 的首頁 Core Web Vitals 改善了 60%,累積版面配置位移 (CLS) 的 75 百分位數也提升了 60%,平均工作階段時間增加了 2.7%,核心版面配置的轉換率也提高了 10% 以上。

Denis Stasyev
Denis Stasyev
Sven May
Sven May

我們的起點

Mail.ru 是俄語網際網路上最受歡迎的電子郵件服務之一,在俄羅斯的流量排名前 5 名網站。Mail.ru 對許多人而言是重要的資源,這個網站每月有數億次造訪,是使用者存取電子郵件、新聞、社群媒體、網路搜尋結果等內容的入口網站。

Mail.ru 希望為訪客提供高品質的使用者體驗,因此開始著手改善 Core Web Vitals。在討論最佳化策略之前,請先注意 Mail.ru 首頁的幾項技術細節。

雖然這個專案長期以來都是使用我們自家的範本引擎 Fest 開發,但我們在 2019 年開始遷移至 Svelte 3

Svelte 實作回應功能的方式不使用虛擬 DOM,因此資源需求較低。Svelte 的方法會從正式版套件中移除未使用的函式,因為如果未使用函式,編譯器就不會產生實作函式的程式碼。系統會在編譯期間移除未使用的程式碼,因此產生的套件會比較小。這可能有助於縮短頁面啟動期間的總封鎖時間 (TBT)

追蹤成效指標

在改善 Core Web Vitals 之前,建議先評估實地成效。在 Core Web Vitals 推出之前,我們會在內部成效資訊主頁追蹤其他指標,例如首次顯示內容所需時間 (FCP)

我們修改了指標收集指令碼,收集 Core Web Vitals 並傳送至成效資訊主頁,以便進行視覺化呈現。為了符合 Google 的建議,我們的指令碼會使用 PerformanceObserver API 取得指標,這項指標是 Mail.ru 內通用前端「Platform」的一部分。

資訊主頁會顯示下列使用者指標 (2021 年 3 月 15 日至 21 日當週的平均值):

指標群組名稱 Core Web Vitals 其他網站體驗指標
指標名稱 LCP FID CLS FCP TBT TTI
根據 Core Web Vitals 門檻計算的使用者比例 不錯 52% 92% 33% 35% 42% 43%
needs-improvement 19% 5% 23% 38% 16% 25%
29% 3% 44% 27% 42% 32%
2021 年 3 月 15 日至 21 日當週的指標
在最佳化前,Core Web Vitals 顯示約有 1/3 的使用者屬於「不佳」類別。
改善前 Web Vitals 值。

改善 Core Web Vitals

雖然有許多指引可供改善 Core Web Vitals,但每個專案都會面臨獨特的挑戰。針對 Mail.ru 首頁,我們發現下列商機:

改善 CLS 的骨架

CLS 是 Mail.ru 首頁成效最差的欄位指標之一。接著,我們在 Chrome 開發人員工具的 「效能」面板中對這個網頁進行剖析,發現問題源於廣告。為了改善版面配置的穩定性,我們的團隊決定在廣告載入前使用預留位置,為廣告預留空間。

導入預留位置時,第一步是決定要替換預留位置的內容尺寸。幸運的是,Mail.ru 電腦版首頁的廣告尺寸已嚴格記錄。與設計團隊討論後,我們決定使用 SVG 動畫 UI 骨架做為預留位置,因為這可縮短內容的載入時間

SSR 回歸

為了讓 Fest 轉換至 Svelte 更容易,我們並未重新開始,而是逐步重寫現有專案。截至 2021 年 3 月,我們已將大部分前端遷移至 Svelte,並在分類並修正後端效能問題後,最終將 SSR 納入正式版應用程式。

實作 SSR 後,團隊發現最初未察覺的 CLS 回歸問題原因:在網頁上顯示第一個內容時,並未插入新聞部分。伺服器提供的網頁標記初始繪製作業,與在用戶端插入新聞部分之間存在延遲。這項行為導致廣告骨架移位,導致 CLS 惡化。

雖然 Chrome 的開發人員工具顯示版面配置偏移事件,但我們一開始並未找到原因。雖然 SSR 本身並非問題,但後來我們還是透過 SSR 找出解決方案。修正造成繪圖延遲的程式碼,改善了新聞元件的版面配置穩定性。

啟用的 JavaScript 只會在新聞部分顯示空白頁面,隱藏版面配置跳轉。
在停用 JavaScript 的情況下找出新聞繪製問題。
停用 JavaScript 後,原本隱藏的版面配置變更會顯示出來。
修正在停用 JavaScript 時出現的新聞繪製問題。

SSR 對 CLS 的另一個影響,是重新整理前後元件的移動,這可能會導致進一步的版面配置位移。我們特別在行動版中遇到這個問題,因此需要特別留意已復原的元件標記。解決這個問題的最佳方法,就是盡可能將顯示邏輯從 JavaScript 轉移至 CSS。

程式碼分割和未使用的 polyfill

為了改善使用者感知的網頁載入速度,我們必須降低 LCP 和 FID 值。其中一種方法是透過分割程式碼。除了 Mail.ru 首頁本身,我們的團隊也正在開發用於入口網站導覽的小工具。目前已嵌入公司許多專案

基於歷史原因,小工具會以同步載入指令碼的形式插入網頁開頭。這個指令碼中的 polyfill 比例隨時間增加。為限制載入這些 polyfill 的負面效應,我們為新式和舊版瀏覽器實作了程式碼分割。

我們決定不使用 module/nomodule 模式,為新式或舊版瀏覽器載入 JavaScript 套件,因為 <script> 元素的 type="module" 屬性並未指定符合我們需求的新式瀏覽器。為解決這個問題,Mail.ru 使用了內部工具,可在後端識別新版瀏覽器,並據此調整瀏覽器。

一旦在後端可辨識瀏覽器,我們就會為新式和舊版瀏覽器實作程式碼分割。結果是,針對新型瀏覽器,同步載入的 JavaScript 小工具大小減少了 43.3%。我們也將這項做法套用至其他一些入口網站指令碼。

除了減少套件大小並對 Core Web Vitals 產生正面影響之外,程式碼分割也能改善開發人員體驗。只有 3.5% 的使用者使用舊版瀏覽器,而且這類使用者的比例呈現下降趨勢,因此開發人員實作程式碼分割功能後,就能使用最新的瀏覽器 API,不必為所有使用者導入舊版瀏覽器所需的 polyfill 膨脹問題。

結果

在進行最佳化後,我們觀察到 2021 年 5 月 24 日至 30 日當週的欄位資料平均值:

指標群組名稱 Core Web Vitals 其他網站體驗指標
指標名稱 LCP FID CLS FCP TBT TTI
根據 Core Web Vitals 門檻計算的使用者比例 不錯 58% (+6%) 93% (+1%) 93% (+60%) 43% (+8%) 49% (+7%) 51% (+8%)
needs-improvement 18% 4% 3% 34% 17% 24%
24% 3% 4% 23% 34% 25%
2021 年 3 月 24 日至 30 日當週的指標
良好值區中的所有指標至少提升 1%。CLS 甚至可減少 60%。
比較 Web Vitals 前後的差異 (括號內為「良好」群組的變化)。

下方圖表顯示網頁成效指標值的變化情形,並依「平台」分類。請注意圖表中的兩個重要日期:

  • 2021 年 3 月 23 日:發布迭代版本,其中最後一個頁面部分已遷移至 Svelte;
  • 2021 年 4 月 19 日:發布使用傳回 SSR 的迭代版本,並修正版面配置,以修正 CLS 回歸。

5 月 1 日至 5 月 10 日的值會下降,是因為俄羅斯在 5 月有假期。

從 2021 年 3 月到 6 月 1 日的 LCP,顯示隨著時間推移,成效有小幅改善。
「平台」中的 LCP 圖表:2021 年 3 月 16 日至 6 月 1 日。
2021 年 3 月 16 日至 6 月 1 日的 FID 顯示整體有微幅改善。
「平台」中的 FID 圖表:2021 年 3 月 16 日至 6 月 1 日。
2021 年 3 月 16 日至 6 月 1 日的 CLS,顯示自 4 月 23 日起大幅改善。
「Platform」中的 CLS 圖表:2021 年 3 月 16 日至 6 月 1 日。

使用「平台」取得的結果,與 Chrome UX 報告 (CrUX) 中指標值的成長趨勢一致。

CrUX 的 LCP 指標顯示「良好」區塊的 LCP 從 51% 提高到 58%。
2021 年 CrUX 中的 LCP 指標變更。
CrUX 的 FID 指標顯示,在良好分類中,FID 從 91% 略微改善至 93%。
2021 年 CrUX 的 FID 指標變更。
CrUX 中的 CLS 指標顯示,良好分類中的 CLS 從 46% 大幅提升至 98%。
2021 年 CrUX 中的 CLS 指標變更。

比較初步改善措施推出前 1 週和推出後 1 週的平均使用者工作階段時間值,可發現使用者工作階段時間成長了 2.7%。此外,網頁的大部分部分轉換次數整體大幅增加。具體來說,Mail.ru 電子郵件應用程式的轉換次數增加了 11.6%,新聞部分的轉換次數則增加了 13.5%。

181%

提高達到良好 CLS 門檻的網頁比例

2.7%

平均工作階段持續時間較長

13.5%

提高新聞專區的轉換率

最出乎意料的結果是,行銷橫幅的點閱率 (CTR) 提升了 17.4% (由於導入 SSR 和預先載入標記,其算繪時間大幅縮短)。

分析網頁上其他部分後,我們發現其中大多數的效能都有顯著改善。即使是天氣和新型冠狀病毒等非重點頁面,轉換率也分別提高了 9.6% 和 9.5%。

結論

改善效能是一項挑戰,因為相關工作可能會持續一段時間。您應定期監控指標的變化,確保所有新產品功能不會導致 Core Web Vitals 的回歸。為達成這項目標,我們會監控成效預算中的 Core Web Vitals 變化。

最重要的是,我們向產品團隊的所有成員 (從經理和設計師到測試人員和品質確保人員) 強調網站體驗核心指標的重要性。每位團隊成員都應瞭解成效指標,並有能力改善成效。我們也會定期將成效最佳化目標納入業務流程。只有所有團隊成員共同努力,才能成功提供優質的使用者體驗。