Load GPT and bids in parallel
Stay organized with collections
Save and categorize content based on your preferences.
Overview
This audit checks whether or not header bidding requests are deferred until the
Google Publisher Tag (GPT) library loads. In most cases, these requests are not
dependent on GPT and can be made in parallel with the library being loaded to
speed up ad loading.
Recommendations
Ensure that header bidding requests do not wait on googletag.pubadsReady()
or
googletag.cmd.push()
.
Prebid.js Example
Incorrect |
window.pbjs = pbjs || {};
pbjs.que = pbjs.que || [];
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
googletag.cmd.push(function() {
googletag.pubads().disableInitialLoad();
// Incorrect: Making bid requests dependent on GPT loading.
pbjs.que.push(function() {
pbjs.requestBids({
bidsBackHandler: handleBidResponse
});
});
});
|
Correct |
window.pbjs = pbjs || {};
pbjs.que = pbjs.que || [];
// Correct: Making bid requests independent of GPT loading.
pbjs.que.push(function() {
pbjs.requestBids({
bidsBackHandler: handleBidResponse
});
});
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
googletag.cmd.push(function() {
googletag.pubads().disableInitialLoad();
});
|
The list of supported ad exchanges and supply side platforms this audit
evaluates can be found in
our GitHub repository.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-06-26 UTC.
[null,null,["Last updated 2024-06-26 UTC."],[[["\u003cp\u003eThis audit checks if header bidding requests are delayed until the Google Publisher Tag library loads, potentially slowing down ad loading.\u003c/p\u003e\n"],["\u003cp\u003eIt's recommended to make header bidding requests independent of GPT loading to improve performance.\u003c/p\u003e\n"],["\u003cp\u003eYou can make your header bidding requests independent of GPT by ensuring they don't wait for \u003ccode\u003egoogletag.pubadsReady()\u003c/code\u003e or \u003ccode\u003egoogletag.cmd.push()\u003c/code\u003e, as demonstrated in the Prebid.js example.\u003c/p\u003e\n"],["\u003cp\u003eA list of supported ad platforms evaluated by this audit is available on the project's GitHub repository.\u003c/p\u003e\n"]]],["The audit checks if header bidding requests are unnecessarily delayed by waiting for the Google Publisher Tag (GPT) library to load. Header bidding requests should be independent of GPT to speed up ad loading. Avoid using `googletag.pubadsReady()` or `googletag.cmd.push()` to trigger bid requests. The correct approach, exemplified with Prebid.js, is to initiate `pbjs.requestBids` outside of the `googletag.cmd.push()` function, making the bid requests run in parallel to GPT loading.\n"],null,["# Load GPT and bids in parallel\n\nOverview\n--------\n\nThis audit checks whether or not header bidding requests are deferred until the\nGoogle Publisher Tag (GPT) library loads. In most cases, these requests are not\ndependent on GPT and can be made in parallel with the library being loaded to\nspeed up ad loading.\n\nRecommendations\n---------------\n\nEnsure that header bidding requests do not wait on `googletag.pubadsReady()` or\n`googletag.cmd.push()`.\n\n### Prebid.js Example\n\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Incorrect** | ```javascript window.pbjs = pbjs || {}; pbjs.que = pbjs.que || []; window.googletag = window.googletag || {}; googletag.cmd = googletag.cmd || []; googletag.cmd.push(function() { googletag.pubads().disableInitialLoad(); // Incorrect: Making bid requests dependent on GPT loading. pbjs.que.push(function() { pbjs.requestBids({ bidsBackHandler: handleBidResponse }); }); }); ``` |\n| **Correct** | ```javascript window.pbjs = pbjs || {}; pbjs.que = pbjs.que || []; // Correct: Making bid requests independent of GPT loading. pbjs.que.push(function() { pbjs.requestBids({ bidsBackHandler: handleBidResponse }); }); window.googletag = window.googletag || {}; googletag.cmd = googletag.cmd || []; googletag.cmd.push(function() { googletag.pubads().disableInitialLoad(); }); ``` |\n\nMore information\n----------------\n\nThe list of supported ad exchanges and supply side platforms this audit\nevaluates can be found in\n[our GitHub repository](https://github.com/googleads/publisher-ads-lighthouse-plugin/blob/HEAD/lighthouse-plugin-publisher-ads/utils/bidder-patterns.js). \n[View audit source](https://github.com/googleads/publisher-ads-lighthouse-plugin/tree/HEAD/lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel.js) [Improve this article](https://github.com/googleads/publisher-ads-lighthouse-plugin/tree/HEAD/docs/audits/gpt-bids-parallel.md) [Report an issue](https://github.com/googleads/publisher-ads-lighthouse-plugin/issues/new?labels=documentation&template=documentation-feedback.md&title=Documentation+feedback%3A+gpt-bids-parallel.md)\n\n\u003cbr /\u003e"]]