發布日期:2025 年 9 月 22 日,上次更新時間:2026 年 1 月 7 日
對使用者來說,最令人沮喪的莫過於網頁突然變慢、耗盡電池電量,或用完每月數據用量。有時,罪魁禍首並非他們想看的內容,而是背景執行的廣告。
為保護使用者體驗,Chrome 會限制廣告可用的資源。如果廣告超出這些限制,就會成為耗用大量資源的廣告,Chrome 會卸載這類廣告,釋出裝置資源。
本文說明這項干預措施的運作方式、相關的具體門檻,以及確保廣告順利放送的最佳做法。
什麼是重度耗資源廣告干預措施?
Chrome 的干預機制會監控廣告影格的資源用量,如果廣告耗用的頻寬或 CPU 處理能力過多,Chrome 會卸載該特定廣告影格。
使用者不會看到廣告,而是會看到灰色方塊,內含「廣告已移除」訊息,通常還會附上「詳細資料」連結,說明廣告使用的資源過多。
廣告何時會被視為耗用大量資源?
Chrome 會根據三個特定門檻判斷廣告是否過於耗用資源。如果使用者未與廣告互動,且廣告符合下列任一條件,系統就會卸載廣告:
- 網路用量:廣告使用的網路頻寬超過 4 MB。
- CPU 使用率尖峰:廣告在任何 30 秒的時段內,使用主執行緒的時間超過 15 秒。
- CPU 總用量:廣告使用主執行緒的時間總計超過 60 秒。 廣告影格任何後代 iframe 使用的所有資源,都會計入該廣告的干預措施限制。
這項介入措施的常見觸發條件有哪些?
相較於其他廣告行為,某些類型的廣告行為更容易觸發這類介入措施。常見原因包括:
- 未壓縮的媒體:載入極大或壓縮品質不佳的圖片。
- 大量使用 JavaScript:執行大量作業,例如使用 JavaScript 解碼影片檔案。
- 大量計算:在背景執行複雜的計算。
- 沒有手勢的影片內容:在使用者與廣告互動前載入大型影片檔案。
移除廣告會有什麼影響?
Chrome 偵測到廣告超出大量廣告門檻時,會立即採取行動,保護使用者的裝置資源。
使用者體驗
從使用者的角度來看,廣告會立即卸載。Chrome 會改為顯示灰色方塊和「廣告已移除」訊息。如果使用者點按容器中的「詳細資料」,就會看到具體說明。
開發人員體驗
Chrome 也會使用 Reporting API 產生干預措施報告,讓您瞭解確切發生了什麼事。先前,這些報表只會傳送至廣告影格本身及其子代影格。不過,發布商通常無法得知自家網頁上的廣告遭到移除。為解決這個問題,Chrome 擴大了回報機制。除了廣告影格本身,系統現在也會將干預措施報告傳送至內嵌影格 (根廣告影格的上層)。傳送至內嵌頁框的報表會包含子頁框的 ID 和廣告頁框網址。
如要為 HTTP 報表設定網頁,回應應包含 Report-To 標頭:
Reporting-Endpoints: default="https://example.com/reports"
觸發的 POST 要求會包含類似下列的報表:
POST /reports HTTP/1.1
Host: example.com
…
Content-Type: application/report
[{
"type": "intervention",
"age": 60,
"url": "https://example.com/url/of/ad.html",
"body": {
"sourceFile": null,
"lineNumber": null,
"columnNumber": null,
"id": "HeavyAdIntervention",
"message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384?utm_source=devtools"
}
}]
內嵌頁框會收到類似的報告,但收件者是內嵌頁框網址,且訊息會額外包含子頁框的 ID 和特定網址:
...
"message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384?utm_source=devtools (id=123;url=http://example2.com/pre-redirect-ad-url.html)"
...
JavaScript API 會透過 observe() 方法提供 ReportingObserver,可用於觸發介入措施的指定回呼。如要將額外資訊附加至報表,協助偵錯,這項功能就非常實用。
// callback that will handle intervention reports
function sendReports(reports) {
for (let report of reports) {
// Log the `report` json using your own reporting process
navigator.sendBeacon('https://report.example/your-endpoint', report);
}
}
// create the observer with the callback
const observer = new ReportingObserver(
(reports, observer) => {
sendReports(reports);
},
{ buffered: true }
);
// start watching for interventions
observer.observe();
由於干預措施會卸載 iframe 網頁 (例如廣告),請使用 pagehide 事件,確保回報回呼會在網頁消失前擷取干預措施報告。
window.addEventListener('pagehide', (event) => {
// pull all pending reports from the queue
let reports = observer.takeRecords();
sendReports(reports);
});
JavaScript 產生的 JSON 類似於 POST 要求中傳送的 JSON:
[
{
type: 'intervention',
url: 'https://example.com/url/of/ad.html',
body: {
sourceFile: null,
lineNumber: null,
columnNumber: null,
id: 'HeavyAdIntervention',
message:
'Ad was removed because its network usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384',
},
},
];
開發人員最佳做法
為避免廣告顯示在重度廣告橫幅下方,請參考下列最佳做法:
- 要求使用者與耗用大量資源的內容互動:干預條件適用於使用者未互動的廣告。如果使用者點按或輕觸您的廣告,就不會再受到資源限制。如果是影片或多媒體體驗,請等待使用者手勢 (例如「按一下即可播放」),再載入大型素材資源。
- 最佳化圖片和影片:確保圖片經過壓縮,且影片已針對網路最佳化。避免自動載入大型影片檔案,改為使用輕量型預留位置,直到使用者互動為止。
- 稽核 CPU 使用率:觸發持續版面配置和繪製作業的複雜動畫或 JavaScript 作業,可能會導致 CPU 使用率飆升。使用工具找出程式碼中的瓶頸,這些瓶頸可能會導致主執行緒長時間忙碌。
- 監控子代影格:請注意,資源計數包含廣告 iframe 內的所有內容。如果廣告載入第三方追蹤像素或子影格,這些資源用量會計入限制。
- 隔離非廣告內容:將非廣告內容框架分別放入不同網域或可辨識的模式,以免篩選器清單供應商的政策將其視為廣告網域。
如何偵錯及診斷干預措施的原因?
如要有效排解及解決干擾性廣告介入問題,您必須先瞭解 Chrome 的偵測邏輯如何將內容識別為廣告,然後使用內建開發人員工具稽核導致移除的特定資源觸發條件
Chrome 如何偵測廣告?
Chrome 會比對資源要求與篩選器清單,將內容標記為廣告。偵測邏輯會套用至 iframe 內的內容。即使主頁框含有廣告指令碼,系統也不會將其視為與廣告相關。請注意,即使該影格也載入了其他非廣告內容,只要是從篩選器清單相符的資源載入的 iframe,都會視為廣告。舉例來說,在標記為廣告的 iframe 中載入影片播放器時,也可能會載入非廣告內容。
如何驗證廣告偵測功能?
開發人員可以使用 Chrome 開發人員工具,以視覺化方式驗證 Chrome 是否已成功將內容偵測為廣告。
- 醒目顯示廣告影格:在「算繪」面板中,選取「醒目顯示廣告影格」,系統會以紅色在畫面上醒目顯示偵測到的廣告影格。
- 元素註解:在「元素」面板中,系統偵測到的廣告 iframe 會在開頭
<iframe>標記旁顯示廣告註解。 - 網路活動:在「網路」面板中,根據
Is ad-related布林值篩選要求。 - 廣告狀態:在「影格」部分下方的應用程式面板中,標記廣告的影格會包含
Ad Status屬性。
如何診斷介入措施的原因?
Chrome 提供相關工具,可稽核及提升網頁品質和效能。在 Chrome 開發人員工具中執行 Lighthouse,取得網頁效能報告。您也可以參閱 web.dev/fast 系列文章,進一步瞭解 網站使用體驗核心指標。
網路用量
在 Chrome 開發人員工具中開啟「網路」面板,即可查看廣告的整體網路活動。勾選「停用快取」選項,確保重複載入時結果一致。
頁面底部的轉移值會顯示整個頁面的轉移金額。如要將要求限制為僅與廣告相關,請使用頂端的「篩選器」輸入內容。
如果找到廣告的初始請求 (例如 iframe 的來源),請使用請求中的「發起者」分頁,查看觸發的所有請求。
依大小排序整體要求清單,是找出過大資源的好方法。常見原因包括未經過最佳化的圖片和影片。
此外,依名稱排序也是找出重複要求的絕佳方式。觸發介入措施的原因可能不是單一大型資源,而是大量重複要求,導致資源逐漸超出限制。
CPU 使用率
DevTools 中的「效能」面板可協助診斷 CPU 使用率問題。開啟「擷取設定」選單。使用「CPU」下拉式選單,盡可能降低 CPU 速度。相較於高階開發機器,CPU 介入措施更可能在低功率裝置上觸發。
接著,按一下「記錄」按鈕,開始記錄活動。建議您嘗試錄製不同時間長度的追蹤記錄,因為載入時間較長的追蹤記錄可能需要一段時間。載入錄影內容後,即可使用頂端的時間軸選取錄影內容的某個部分。著重於圖表上以實心黃色、紫色或綠色表示的指令碼、算繪和繪製區域。
探索底部的「Bottom-Up」、「Call Tree」和「Event Log」 分頁。依「自我時間」和「總時間」排序這些資料欄,有助於找出程式碼中的瓶頸。
相關聯的來源檔案也會連結至該處,因此您可以透過「來源」面板追蹤檔案,檢查每一行的費用。
常見問題包括最佳化程度不佳的動畫,導致系統持續進行版面配置和繪製,或是內含程式庫中隱藏的耗用資源作業。
如何回報不正確的介入措施?
如果非廣告內容已標示為廣告,請考慮變更程式碼,避免與篩選規則相符,或直接與 EasyList 維護人員聯絡,變更篩選規則。請注意,大量廣告干擾措施不會影響含有使用者手勢的影格,因此您可以在載入內容前要求點選播放按鈕,藉此排除影片。如果 EasyList 與您的內容不符,且 Chrome 誤將內容歸類為廣告相關,您可以使用這個範本向 Chrome 提出問題。提出問題時,請附上擷取的干預措施報表範例,以及可重現問題的範例網址。