如何提高 Web Push 的推播展示數量
「推播發出去了,但展示數量遠低於預期」是 Web Push 接入方最常見的問題之一。展示數量並不是一個孤立的指標,它是訂閱、發送、送達等多個環節層層折損後的結果。本文協助您按漏斗逐層定位展示量偏低的原因,針對每類原因給出優化手段,並在最後提供一套可持續執行的綜合方案。
先統一口徑:展示在漏斗的哪一層
EngageLab 對每條推播按以下階段統計,各階段定義見 推播統計 與 統計 API:
flowchart LR
plan["計畫目標"]
targets["有效目標<br/>365 天內活躍過的裝置"]
sent["發送數量<br/>伺服器成功建立發送任務"]
delivered["送達數量<br/>實際送達至 Web 端"]
impressions["展示數量<br/>在終端成功展示"]
clicks["點擊數量"]
plan --> targets --> sent --> delivered --> impressions --> clicks| 指標 | 定義 | 計算方式 |
|---|---|---|
| 有效目標數 | 推播任務所選目標人群經有效性篩選後的裝置數量 | — |
| 發送數量 | 有效目標中,EngageLab 伺服器實際成功建立發送任務的裝置數量 | — |
| 送達數量 | 通知發送後實際送達至 Web 端的數量 | — |
| 展示數量 | 通知送達後,實際在裝置終端成功展示的數量 | — |
| 送達率 | — | 送達數量 / 發送數量 |
| 展示率 | — | 展示數量 / 送達數量 |
| 點擊率 | — | 點擊數量 / 送達數量 |
關於「展示」有三點必須先明確,否則很容易把統計口徑問題誤判為推播問題:
- 展示由 SDK 上報。 回呼 API 中
Impression狀態的定義是「Web Push 通知訊息和應用內訊息由 SDK 上報展示成功」,見 回呼 API。沒有經過 SDK 上報的展示不會計入展示數量。 - 自訂訊息預設不計展示。 建立推播 API 中的
message(自訂訊息)不會展示在瀏覽器上,而是透傳給您的網頁;如需統計展示,需要您在網頁中呼叫customDisplayReport主動上報,見 Web SDK API。 - 統計視窗為 5 天。 發送成功 5 天之後產生的送達與展示不再計入統計,也不再回呼。
因此,排查展示量低時,請先區分「展示率低」(送達了但沒展示)與「展示數低但展示率正常」(問題出在更上游的訂閱、發送、送達環節)。這兩類問題的原因和解法完全不同。
一、展示量低如何排查原因
建議按漏斗從上游到下游逐層排查,每一層先看資料、再定位原因。
1.1 訂閱池是否足夠大
展示數量的上限由訂閱使用者規模決定。如果訂閱使用者本身很少,再高的送達率與展示率也無法帶來可觀的展示數。
看哪裡:
- 使用者概況:對比「訂閱使用者」與「活躍使用者」。訂閱使用者是成功訂閱並同意接收通知的唯一使用者裝置數,若訂閱使用者遠低於活躍使用者,說明大量訪客沒有完成授權。
- 概況:查看裝置通知權限開啟率與「關閉通知使用者」數量。
- 資料查詢:抽查具體 Registration ID 的線上狀態與最後上線時間,確認訂閱是否仍然有效。
- 使用「直接申請」方式彈出瀏覽器原生授權框,使用者一旦點擊 Block / Don't Allow,之後無法再次申請,除非使用者自行修改瀏覽器設定。
- 站點未使用 HTTPS 或網域未在主控台設定,無法彈出原生授權提示,也無法訂閱。
- Service Worker 未放在網站根目錄,或與站點已有的 PWA Service Worker 作用域衝突,導致訂閱失敗。
- iOS 使用者未將網站加入主畫面,或授權請求不是由使用者手勢觸發。
- 使用者使用無痕模式、私密瀏覽模式或訪客模式,這些模式不支援 Web Push。
- 同一
user_str在多個瀏覽器或裝置上訂閱時,新訂閱會取代舊訂閱,只有最後一次訂閱的裝置能收到訊息。
1.2 有效目標到發送是否有大量折損
看哪裡:
- 推播記錄:對比單條推播的有效目標數與發送數,並查看訊息詳情中的失敗原因。
- 統計 API 的推播生命週期查詢:
target_invalid、sent_failed狀態可定位具體裝置的折損階段。
常見原因:
- 有效目標口徑為「過去 365 天活躍過」,長期不活躍的訂閱不會成為有效目標。
- 進階設定 中設定了單裝置每小時 / 每天 / 每週的推播上限或可推播時間段,超出限制或不在時段內的訊息會被直接丟棄。
1.3 發送到送達是否有大量折損
這是最容易被誤判為「展示低」的一層。送達數低,展示數一定低,但此時展示率可能是正常的。
看哪裡:
- 推播記錄中單條推播的送達率;推播統計中按瀏覽器(Chrome、Safari、Firefox、Edge、EngageLab 通道等)拆分的送達資料。
- 統計 API 回傳的
sub欄位可分別查看notification與message兩類訊息的送達與展示,engageLab_web、chrome、safari、firefox、edge等欄位可按通道拆分。
常見原因(見 建立推播 API 與 FAQ):
time_to_live設為 0:不保留離線訊息,僅目前線上的使用者能收到;預設值為 86400 秒(1 天),最長 15 天。- 通道差異:EngageLab 通道需要使用者開啟您的站點頁面才能收到;系統通道(Chrome、Edge、Firefox 等)只要瀏覽器程序在作業系統中存在即可收到,瀏覽器程序完全退出則收不到;Safari 系統通道無需瀏覽器執行。
- 使用者清除了瀏覽器 Cookie / 快取,廠商通道的訂閱資訊隨之遺失;若通知權限仍為允許,使用者回到站點初始化 SDK 後會自動重新訂閱並取得新的 Registration ID,若權限已改為「詢問」或「封鎖」則不會自動重新訂閱。
third_party_channel.w3push.distribution下發策略與您的使用者行為不匹配,例如使用者很少停留在站點卻強制使用mtpush(僅 EngageLab 通道)。- 瀏覽器廠商通道不穩定,FAQ 建議此時可切換為 EngageLab 通道優先下發。
1.4 送達到展示是否有折損(展示率低)
送達數正常、展示數明顯偏低時,才是真正的「展示率」問題。
看哪裡:
- 推播記錄詳情中按平台展示的「送達數 / 展示數」及比率。
- 回呼 API 的
Impression與impression_failed事件。
常見原因:
| 現象 | 可能原因 | 驗證位置 |
|---|---|---|
| 自訂訊息展示數接近 0 | message 不會展示在瀏覽器上,且未呼叫 customDisplayReport 上報 |
統計 API sub.message;網頁程式碼 |
| Safari 通道展示數為 0 或明顯偏低 | Safari 使用系統通道下發,SDK 無法取得展示與點擊回呼 | 推播統計按瀏覽器拆分 |
| 短時間內向同一使用者發送多條通知,展示數只有一條 | Chrome、Edge、Firefox 有覆蓋機制,每個通知會被更新的通知取代,僅展示最後一條;EngageLab 通道與 Safari 無覆蓋機制 | FAQ「同一時間給同一個使用者發送多條訊息,訊息都會展示嗎」 |
應用內訊息回呼 impression_failed |
解析失敗、超過訊息展示有效期、本機快取超限被刪除或圖片下載失敗 | 回呼 API;建立推播 中的展示有效期設定 |
| 特定使用者群體始終不展示 | 網頁通知權限、瀏覽器應用通知權限被關閉;Windows 焦點輔助、macOS 請勿打擾 / 專注模式生效 | FAQ「通知收不到排查方式」 |
| 統計對不上 | 只統計發送成功後 5 天內的展示;同一使用者多裝置只算一個訂閱使用者 | 推播統計定義 |
1.5 排查檢查表
排查時建議按下表順序逐項確認,先排除口徑與上游問題,再看展示本身:
| 順序 | 檢查項 | 判斷標準 | 參考 |
|---|---|---|---|
| 1 | 訊息類型 | 通知訊息還是自訂訊息?自訂訊息是否已上報展示 | Web SDK API |
| 2 | 訂閱使用者規模 | 訂閱使用者 / 活躍使用者是否明顯偏低 | 使用者概況、概況 |
| 3 | 授權方式 | 是否使用引導申請(軟提示) | 基礎設定 |
| 4 | HTTPS、網域、Service Worker | 是否全部滿足且無作用域衝突 | Web SDK 整合指南 |
| 5 | 有效目標 → 發送 | 是否被頻控或可推播時段丟棄 | 進階設定、推播記錄 |
| 6 | time_to_live |
是否為 0 或過短 | 建立推播 API |
| 7 | 下發策略 distribution |
是否與使用者停留習慣匹配 | 建立推播 API |
| 8 | 按通道拆分 | Safari、EngageLab 通道、Chrome 等的送達 / 展示是否差異懸殊 | 推播統計、統計 API |
| 9 | 發送頻率 | 是否短時間內向同一使用者發多條 | FAQ |
| 10 | 使用者端系統設定 | 通知權限、焦點輔助、請勿打擾 | FAQ |
二、排查到原因後如何對症優化
2.1 擴大訂閱池
- 改用引導申請(軟提示)。 在 基礎設定 的通知授權中選擇「引導申請」:先用自訂樣式向使用者說明通知價值,使用者表示意願後再觸發原生授權框,避免使用者在不了解價值的情況下直接點擊 Block 導致永久無法再申請。軟提示支援設定初次提示間隔(預設 3 天)與後續提示間隔(預設 7 天),直到使用者訂閱。
- 確保前置條件完整。 站點使用 HTTPS 並在【整合設定】-【網站網域】中設定網域(最多 100 個);Service Worker 檔案放在網站根目錄以取得最大作用域;如站點已有 PWA Service Worker,將兩者合併或確保作用域不重疊,參考 Web SDK 整合指南 與 FAQ。
- 為 iOS 使用者提供引導。 iOS / iPadOS 16.4 及以上的 Safari 需要使用者先將網站加入主畫面並從主畫面開啟,再由使用者手勢(如點擊訂閱按鈕)觸發授權,建議在頁面上放置橫幅引導。
- 避免多裝置互相擠掉。 若您使用
user_str標識使用者,注意同一user_str在多瀏覽器 / 多裝置訂閱時只有最後一次訂閱的裝置能收到訊息;如需覆蓋使用者的全部裝置,請勿在不同裝置上重複使用同一user_str。 - 遷移時不要遺失訂閱。 從其他服務商遷移到 EngageLab 時,按 如何避免 Web 推播遷移中的訂閱使用者流失 處理舊 Service Worker,已授權使用者初始化後不會再次彈出授權框。
2.2 減少有效目標到發送的折損
- 在 進階設定 中根據業務需要設定單裝置推播上限與可推播時間段。頻控是保護使用者體驗的手段,但設定過嚴會直接丟棄訊息,請結合推播計畫評估。
- 定期透過 刪除使用者 API 清理確認不再活躍的訂閱,使有效目標數更準確地反映可觸達使用者,避免統計被無效訂閱稀釋。刪除操作不可復原,請謹慎執行。
2.3 提升送達
合理設定
time_to_live。 不要使用 0;保持預設 1 天或按內容時效延長,最長 15 天。對時效性不強的內容適當延長離線保存時間,可以讓離線使用者在重新開啟瀏覽器後仍能收到。選擇匹配的下發策略。 在
third_party_channel.w3push.distribution中:first_ospush(預設):優先系統通道,無效再走 EngageLab 通道;secondary_push:優先 EngageLab 通道,使用者不在線再走系統通道,建立推播 API 建議使用此方式;mtpush:強制 EngageLab 通道,僅適合使用者長時間停留在站點的場景;ospush:強制僅系統通道。
當瀏覽器廠商通道不穩定時,可暫時切換為 EngageLab 通道優先。
謹慎使用
override_msg_id。 覆蓋上一條未清除的通知會讓使用者只看到最新一條,適用於內容更新的場景,不適用於希望多條通知都展示的場景。大促或大批量推播使用定速推播。 透過
big_push_duration將推播在指定分鐘數內均勻下發(最大 1440 分鐘),避免瞬時峰值。
2.4 提升展示
- 優先使用通知訊息。 需要在通知欄展示並統計展示數的內容,請使用
notification而非message;若業務確實需要自訂訊息,在網頁展示後呼叫customDisplayReport('msg_id')上報展示,點擊時呼叫customClickReport('msg_id')。 - 避免短時間內向同一使用者連續推播多條通知。 在 Chrome、Edge、Firefox 上後一條會取代前一條,使用者最終只看到最後一條,展示數也只計入一條。將多條內容合併為一條,或拉開發送間隔。
- 注意素材與文案的瀏覽器相容性。
icon建議 192×192、不超過 1M,僅 Chrome、Firefox 支援自訂,Safari 與 Edge 使用系統預設圖示;image建議 360×180、不超過 1M,僅 Chrome、Edge 支援,Firefox 與 Safari 不支援。系統通道對標題長度有限制(中文少於 20 字、英文少於 40 字元),超長可能影響展示效果。 - 為應用內訊息設定合理的展示有效期。 超過展示有效期後使用者再進入頁面不會展示,並觸發
impression_failed。時效性不強的內容適當延長有效期,並控制圖片體積以避免圖片下載失敗。 - 在使用者活躍時段推播。 使用 定時任務 的智慧投遞或結合推播統計中的活躍時間匹配資料,在使用者更可能開啟瀏覽器的時段下發,減少離線過期。
- 正確解讀 Safari 資料。 Safari 系統通道無法取得展示與點擊回呼,該通道展示數偏低屬於統計能力限制,不代表通知未展示;評估展示率時建議將 Safari 與其他通道分開看。
三、綜合方案:系統性提高展示數量
單點優化只能解決某一層的問題,要持續提高展示數量,建議把「訂閱增長、送達保障、展示監控」作為一套日常機制來營運。
3.1 建立分通道的監控視圖
- 每日關注 概況 中的推播轉化漏斗與送達率、展示率、點擊率趨勢,以及通知權限開啟 / 關閉使用者數。
- 在 推播統計 中按瀏覽器拆分查看送達與展示,重點關注 Chrome 與 EngageLab 通道;Safari 單獨評估。
- 透過 回呼 API 接收
delivered、Impression、impression_failed、click等事件並落庫,可以按使用者、按訊息做比主控台更細粒度的分析(單條訊息統計在 EngageLab 側最多保留一個月)。 - 為送達率與展示率分別設定基線:送達率異常下降優先排查
time_to_live、下發策略與廠商通道;展示率異常下降優先排查訊息類型、多條覆蓋與使用者端權限。
3.2 分階段行動清單
接入期(上線前後)
- 使用 HTTPS,設定網域,Service Worker 放根目錄並確認無作用域衝突;
- 通知授權選擇「引導申請」,設定軟提示文案與間隔;
- 為 iOS 使用者準備加入主畫面的引導;
- 以通知訊息(
notification)而非自訂訊息(message)作為主要觸達方式; - 聯調時用推播記錄與資料查詢確認目標裝置的線上狀態、送達與展示都能正常計數。
增長期(日常營運)
- 每週對比訂閱使用者與活躍使用者增長,訂閱轉化不佳時調整軟提示文案與觸發時機;
time_to_live保持 1 天以上,distribution使用secondary_push或預設策略;- 控制向同一使用者的推播頻率,避免覆蓋導致的展示損失,同時設定頻控保護體驗;
- 借助智慧投遞或活躍時間匹配資料選擇發送時段;
- 定期清理長期不活躍訂閱。
大促期(高峰推播)
- 使用定速推播平滑峰值;
- 對時效性強的內容適當縮短
time_to_live,對可延後觸達的內容延長離線保存; - 多條行銷通知合併為一條,或按使用者分批錯峰發送;
- 推播後按通道復盤送達率與展示率,將異常通道的經驗回填到下次推播設定。
3.3 一句話總結
展示數量 = 訂閱使用者 × 有效目標比例 × 送達率 × 展示率。先用漏斗資料判斷折損發生在哪一層,再針對該層優化;對「展示」這一層本身,核心是使用通知訊息並確保 SDK 上報、避免多條覆蓋、分通道解讀資料。










