ควบคุมการโหลดและรีเฟรชโฆษณา
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
ในตัวอย่างการเริ่มต้นใช้งานและแนวคิดพื้นฐานของเรา มีการใช้เมธอด display()
ของไลบรารีแท็กผู้เผยแพร่โฆษณาผ่าน Google (GPT) เพื่อลงทะเบียนและแสดงช่องโฆษณา แต่ก็มีบางครั้งที่
ที่ต้องการหรือแม้กระทั่งจำเป็นต่อการแยกการดำเนินการเหล่านี้ เพื่อเพิ่ม
ควบคุมได้อย่างแม่นยำว่าระบบจะโหลดเนื้อหาโฆษณาเมื่อใด เช่น เมื่อทํางานร่วมกับแพลตฟอร์มการจัดการความยินยอมหรือขอเนื้อหาโฆษณาตามการกระทําของผู้ใช้
ในคู่มือนี้เราจะสำรวจกลไกที่ GPT มีให้เพื่อ
ควบคุมการโหลดเนื้อหาโฆษณาและดึงเนื้อหาโฆษณาใหม่ตามคำขอ ดูโค้ดแบบเต็มสำหรับตัวอย่างนี้ได้ในหน้าตัวอย่างคําขอตามเหตุการณ์
ควบคุมการโหลดโฆษณา
โดยค่าเริ่มต้น ลักษณะการทำงานของเมธอด display()
คือ
ลงทะเบียน ส่งคำขอ และแสดงเนื้อหาโฆษณาในช่องโฆษณา คุณปิดใช้การขอและการแสดงผลเนื้อหาโฆษณาโดยอัตโนมัติได้โดยใช้เมธอด PubAdsService.disableInitialLoad()
เมื่อปิดใช้การโหลดครั้งแรก การเรียก display()
จะลงทะเบียนเฉพาะช่องโฆษณาเท่านั้น
จะไม่มีการโหลดเนื้อหาโฆษณาจนกว่าจะมีการดำเนินการครั้งที่ 2 ซึ่งจะช่วยให้คุณควบคุมเวลาที่สร้างคําขอโฆษณาได้อย่างแม่นยำ
คุณต้องเรียกใช้ 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()
คุณควรปฏิบัติตามแนวทางปฏิบัติแนะนำบางอย่าง
อย่ารีเฟรชเร็วเกินไป
การรีเฟรชช่องโฆษณาเร็วเกินไปอาจทำให้คำขอโฆษณาถูกควบคุม
เพื่อป้องกันปัญหานี้ ให้หลีกเลี่ยงการรีเฟรชสล็อตบ่อยกว่า 1 ครั้งในทุกๆ 30
วินาที
อย่าโทรหา clear()
โดยไม่จำเป็น
เมื่อรีเฟรชช่องโฆษณา อย่าเรียกใช้ PubAdsService.clear()
ก่อน ขั้นตอนนี้ไม่จำเป็น เนื่องจาก
refresh()
แทนที่เนื้อหาของช่องที่ระบุโดยไม่คำนึงถึง
เคยโหลดเนื้อหาโฆษณามาก่อนไหม การเรียก clear()
ทันทีก่อนเรียก refresh()
จะทําให้ผู้ใช้เห็นช่องว่างนานขึ้นเท่านั้น
รีเฟรชเฉพาะช่องโฆษณาที่มองเห็นได้
การใช้ refresh()
เพื่อแทนที่เนื้อหาของช่องโฆษณาที่ไม่เคยมีการแสดงผลอาจทำให้อัตรา ActiveView ลดลงอย่างมาก
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();
});
เนื้อหาของหน้าเว็บนี้ได้รับอนุญาตภายใต้ใบอนุญาตที่ต้องระบุที่มาของครีเอทีฟคอมมอนส์ 4.0 และตัวอย่างโค้ดได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0 เว้นแต่จะระบุไว้เป็นอย่างอื่น โปรดดูรายละเอียดที่นโยบายเว็บไซต์ Google Developers Java เป็นเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-05-09 UTC
[null,null,["อัปเดตล่าสุด 2025-05-09 UTC"],[[["\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 });"]]