控制廣告載入和重新整理
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
為入門和基本概念範例
Google 發布商廣告代碼
(GPT) 程式庫的 display()
方法
註冊並顯示廣告版位不過,有時您可能會希望或甚至需要分開這些動作,以便更精確地控制廣告內容的載入時間。例如,使用同意聲明管理平台或在使用者採取行動後要求廣告內容。
在本指南中,我們將探討 GPT 提供的機制,以便控管廣告內容的載入作業,並依需求擷取新的廣告內容。完整程式碼
都可以根據事件式請求
範例網頁。
控管廣告載入作業
根據預設,display()
方法的行為為
註冊、要求並將廣告素材顯示在廣告版位中。自動
您可以使用
PubAdsService.disableInitialLoad()
方法,增加圍繞地圖邊緣的邊框間距。
在停用初始載入功能的情況下,對 display()
的呼叫只會登錄廣告版位。直到使用者採取第二項動作,系統才會載入廣告內容。這樣一來,
能精準控制發出廣告請求的時機
為避免意外發出廣告請求,您必須呼叫 disableInitialLoad()
再啟用服務以及呼叫 display()
。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Request GPT ads based on events." />
<title>Event-based ad requests</title>
<script
async
src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"
crossorigin="anonymous"
></script>
<script>
window.googletag = window.googletag || { cmd: [] };
googletag.cmd.push(() => {
// Define the ad slot.
googletag
.defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
.setTargeting("test", "event")
.addService(googletag.pubads());
// Disable initial load.
// This prevents GPT from automatically fetching ads when display is called.
googletag.pubads().disableInitialLoad();
googletag.enableServices();
});
</script>
<style></style>
</head>
<body>
<div id="div-for-slot" style="width: 300px; height: 250px"></div>
<script>
googletag.cmd.push(() => {
// Register the ad slot.
// An ad will not be fetched until refresh is called.
googletag.display("div-for-slot");
});
</script>
</body>
</html>
在這個範例中,系統會停用初始載入,確保不會發出任何廣告請求
呼叫 display()
時就不會顯示廣告素材。時段已準備就緒
可以接受並顯示廣告,但只有在版位出現後,才會提出廣告請求
重新整理。
重新整理
PubAdsService.refresh()
方法可用來填入
版位或版位來放送新的廣告素材這個方法可用於
尚未載入任何內容 (因為 disableInitialLoad()
),或用其他值取代
即可。不過,只有
凡是透過呼叫 display()
註冊的行為,都可重新整理。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Request GPT ads based on events." />
<title>Event-based ad requests</title>
<script
async
src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"
crossorigin="anonymous"
></script>
<script>
window.googletag = window.googletag || { cmd: [] };
googletag.cmd.push(() => {
// Define the ad slot.
googletag
.defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
.setTargeting("test", "event")
.addService(googletag.pubads());
// Disable initial load.
// This prevents GPT from automatically fetching ads when display is called.
googletag.pubads().disableInitialLoad();
googletag.enableServices();
});
</script>
<style></style>
</head>
<body>
<div id="div-for-slot" style="width: 300px; height: 250px"></div>
<button id="showAdButton">Show/Refresh Ad</button>
<script>
googletag.cmd.push(() => {
// Register the ad slot.
// An ad will not be fetched until refresh is called.
googletag.display("div-for-slot");
// Register click event handler.
document.getElementById("showAdButton").addEventListener("click", () => {
googletag.cmd.push(() => {
googletag.pubads().refresh();
});
});
});
</script>
</body>
</html>
在本例中,使用者點按「顯示/重新整理廣告」時按鈕,
系統會呼叫 refresh()
方法。這會觸發要求,擷取新的廣告內容並載入已註冊的版位,覆寫任何先前存在的內容。
請注意,在上述範例中,呼叫 refresh()
方法時不會呼叫
參數,以便重新整理所有已註冊的廣告版位。
不過,您也可以將版位陣列傳遞至 refresh()
方法,藉此重新整理特定廣告版位。請參閱重新整理廣告版位
舉例來說
最佳做法
使用 refresh()
時,建議您提供一些最佳做法
遵守所有適用的原則
不要太快重新整理。
重新整理廣告版位過於頻繁,可能會導致廣告請求受到節流。為避免這種情況,請避免每 30 秒就重新整理一次時段。
避免對 clear()
進行不必要的呼叫
重新整理廣告版位時,請勿先呼叫 PubAdsService.clear()
。這是不必要的,因為
refresh()
會取代指定版位的內容,無論
指出是否先前已載入任何廣告素材立即撥打 clear()
只有在呼叫 refresh()
之前,空白時段才會增加
不會向使用者顯示
只重新整理可視廣告版位
使用refresh()
取代不可見的廣告版位內容
可能會大幅降低 Active View 率
ImpressionViewableEvent 可用於
決定廣告版位為可視的時間點,如下所示
範例:
googletag.cmd.push(function() {
var REFRESH_KEY = 'refresh';
var REFRESH_VALUE = 'true';
googletag.defineSlot('/6355419/Travel',[728, 90], 'div-for-slot')
.setTargeting(REFRESH_KEY, REFRESH_VALUE)
.setTargeting('test', 'event')
.addService(googletag.pubads());
// Number of seconds to wait after the slot becomes viewable.
var SECONDS_TO_WAIT_AFTER_VIEWABILITY = 60;
googletag.pubads().addEventListener('impressionViewable', function(event) {
var slot = event.slot;
if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) {
setTimeout(function() {
googletag.pubads().refresh([slot]);
}, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000);
}
});
googletag.enableServices();
});
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-05-09 (世界標準時間)。
[null,null,["上次更新時間:2025-05-09 (世界標準時間)。"],[[["\u003cp\u003eGoogle Publisher Tag (GPT) allows you to separate ad slot registration and ad content loading for more control, useful for scenarios like consent management or user-triggered ad requests.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003edisableInitialLoad()\u003c/code\u003e prevents automatic ad requests upon calling \u003ccode\u003edisplay()\u003c/code\u003e, giving you control over when to fetch ads using the \u003ccode\u003erefresh()\u003c/code\u003e method.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003erefresh()\u003c/code\u003e method fetches new ad content for registered ad slots, either initially or to replace existing content; refreshing all slots or specific ones is possible.\u003c/p\u003e\n"],["\u003cp\u003eBest practices include avoiding excessive refreshes (more frequent than every 30 seconds), refraining from unnecessary \u003ccode\u003eclear()\u003c/code\u003e calls before \u003ccode\u003erefresh()\u003c/code\u003e, and prioritizing refreshing viewable ad slots to improve ActiveView rates.\u003c/p\u003e\n"]]],["The Google Publisher Tag (GPT) allows control over ad loading using `disableInitialLoad()`, preventing automatic ad requests upon `display()`. This method only registers the slot, enabling precise control over ad requests. The `refresh()` method populates slots with new content, either in previously registered slots or as replacement for existing content. Best practices include limiting refresh frequency to at least every 30 seconds, avoiding unnecessary `clear()` calls, and only refreshing viewable slots using the `impressionViewable` event.\n"],null,["# Control ad loading and refresh\n\nIn our getting started and basic concept examples, the Google Publisher Tag\n(GPT) library's [`display()`](/publisher-tag/reference#displayadunitpath,-size,-opt_div,-opt_clickurl) method is used\nto register and display an ad slot. However, there are times when it may be\npreferable or even necessary to separate these actions, in order to more\nprecisely control when ad content is loaded. For example, when working with a\nconsent management platform or requesting ad content as the result of a user\naction.\n\nIn this guide we'll explore the mechanisms provided by GPT to\ncontrol the loading of ad content and fetch new ad content on demand. Full code\nfor this example can be found on the [event based requests](/publisher-tag/samples/event-based-requests)\nsample page.\n\nControl ad loading\n------------------\n\nBy default, the behavior of the [`display()`](/publisher-tag/reference#displayadunitpath,-size,-opt_div,-opt_clickurl) method is to\nregister, request, and render ad content into an ad slot. The automatic\nrequesting and rendering of ad content can be disabled using\n[`googletag.setConfig({ disableInitialLoad: true })`](/publisher-tag/reference#googletag.config.PageSettingsConfig.disableInitialLoad).\n\nWith initial load disabled, calls to `display()` will only register the ad slot.\nNo ad content will be loaded until a second action is taken. This lets you\nprecisely control when ad requests are made.\n\nTo avoid making unintentional ad requests,\n`googletag.setConfig({ disableInitialLoad: true })` must be called before\nenabling the service and before calling `display()`. \n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n \u003chead\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e\n \u003cmeta name=\"description\" content=\"Request GPT ads based on events.\" /\u003e\n \u003ctitle\u003eEvent-based ad requests\u003c/title\u003e\n \u003cscript\n async\n src=\"https://securepubads.g.doubleclick.net/tag/js/gpt.js\"\n crossorigin=\"anonymous\"\n \u003e\u003c/script\u003e\n \u003cscript\u003e\n window.googletag = window.googletag || { cmd: [] };\n\n googletag.cmd.push(() =\u003e {\n // Define the ad slot.\n googletag\n .defineSlot(\"/6355419/Travel\", [728, 90], \"div-for-slot\")\n .addService(googletag.pubads())\n .setConfig({\n targeting: {\n test: \"event\",\n },\n });\n\n // Disable initial load to prevent GPT from automatically fetching ads when\n // display() is called.\n googletag.setConfig({\n disableInitialLoad: true,\n });\n\n // Enable services.\n googletag.enableServices();\n });\n \u003c/script\u003e\n \u003cstyle\u003e\u003c/style\u003e\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cdiv id=\"div-for-slot\" style=\"width: 300px; height: 250px\"\u003e\u003c/div\u003e\n \u003cscript\u003e\n googletag.cmd.push(() =\u003e {\n // Register the ad slot.\n // An ad will not be fetched until refresh is called.\n googletag.display(\"div-for-slot\");\n });\n \u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n```\n\nIn this example, initial load is disabled ensuring that no ad request is made\nand no ad content is rendered when `display()` is called. The slot is ready to\naccept and display an ad, but an ad request won't be made until the slot is\nrefreshed.\n\nRefresh\n-------\n\nThe [`PubAdsService.refresh()`](/publisher-tag/reference#googletag.PubAdsService_refresh) method is used to populate a\nslot or slots with new ad content. This method can be used on slots that have\nyet to load any content (due to\n`googletag.setConfig({ disableInitialLoad: true })`), or to replace the contents\nof an already populated slot. However, only slots which have been registered by\ncalling `display()` are eligible to be refreshed.\n**Important:** To comply with Google policy and enable your inventory to compete on Ad Exchange, you must [declare which portions of your inventory refresh](//support.google.com/admanager/answer/6286179). \n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n \u003chead\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e\n \u003cmeta name=\"description\" content=\"Request GPT ads based on events.\" /\u003e\n \u003ctitle\u003eEvent-based ad requests\u003c/title\u003e\n \u003cscript\n async\n src=\"https://securepubads.g.doubleclick.net/tag/js/gpt.js\"\n crossorigin=\"anonymous\"\n \u003e\u003c/script\u003e\n \u003cscript\u003e\n window.googletag = window.googletag || { cmd: [] };\n\n googletag.cmd.push(() =\u003e {\n // Define the ad slot.\n googletag\n .defineSlot(\"/6355419/Travel\", [728, 90], \"div-for-slot\")\n .addService(googletag.pubads())\n .setConfig({\n targeting: {\n test: \"event\",\n },\n });\n\n // Disable initial load to prevent GPT from automatically fetching ads when\n // display() is called.\n googletag.setConfig({\n disableInitialLoad: true,\n });\n\n // Enable services.\n googletag.enableServices();\n });\n \u003c/script\u003e\n \u003cstyle\u003e\u003c/style\u003e\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cdiv id=\"div-for-slot\" style=\"width: 300px; height: 250px\"\u003e\u003c/div\u003e\n \u003cbutton id=\"showAdButton\"\u003eShow/Refresh Ad\u003c/button\u003e\n \u003cscript\u003e\n googletag.cmd.push(() =\u003e {\n // Register the ad slot.\n // An ad will not be fetched until refresh is called.\n googletag.display(\"div-for-slot\");\n\n // Register click event handler.\n document.getElementById(\"showAdButton\").addEventListener(\"click\", () =\u003e {\n googletag.cmd.push(() =\u003e {\n googletag.pubads().refresh();\n });\n });\n });\n \u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n```\n\nIn this modified example, when a user clicks the \"Show/Refresh Ad\" button, the\n`refresh()` method is called. This triggers a request to fetch new ad content\nand load it into the registered slot, overwriting any pre-existing content.\n\nNote that in the preceding example the `refresh()` method is called with no\nparameters, which has the effect of refreshing **all** registered ad slots.\nHowever, it's also possible to refresh specific ad slots by passing an array of\nslots to the `refresh()` method. See the [Refresh ad slots](/publisher-tag/samples/refresh)\nsample for an example of this.\n\n### Best practices\n\nWhen working with `refresh()`, there are some best practices that should be\nadhered to.\n\n1. Don't refresh too quickly.\n\n Refreshing ad slots too quickly may cause your ad requests to be throttled.\n To prevent this, avoid refreshing slots more frequently than once every 30\n seconds.\n2. Don't call `clear()` unnecessarily\n\n When refreshing an ad slot, don't call\n [`PubAdsService.clear()`](/publisher-tag/reference#googletag.PubAdsService_clear) first. This is unnecessary, since\n `refresh()` replaces the contents of the specified slot, regardless of\n whether any ad content was previously loaded. Calling `clear()` immediately\n before calling `refresh()` will only increase the amount of time a blank slot\n is visible to the user.\n3. Only refresh viewable ad slots\n\n Using `refresh()` to replace the contents of ad slots that are never viewable\n can significantly lower your ActiveView rate. The\n [ImpressionViewableEvent](/publisher-tag/reference#googletag.events.impressionviewableevent) can be used to\n determine when an ad slot has become viewable, as shown in the following\n example: \n\n googletag.cmd.push(function() {\n var REFRESH_KEY = 'refresh';\n var REFRESH_VALUE = 'true';\n\n const slot = googletag.defineSlot('/6355419/Travel',[728, 90], 'div-for-slot')\n .addService(googletag.pubads());\n slot.setConfig({\n targeting: {\n [REFRESH_KEY]: REFRESH_VALUE,\n 'test': 'event'\n }\n });\n\n // Number of seconds to wait after the slot becomes viewable.\n var SECONDS_TO_WAIT_AFTER_VIEWABILITY = 60;\n\n googletag.pubads().addEventListener('impressionViewable', function(event) {\n var slot = event.slot;\n if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) \u003e -1) {\n setTimeout(function() {\n googletag.pubads().refresh([slot]);\n }, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000);\n }\n });\n\n googletag.enableServices();\n });"]]