Éviter les erreurs courantes d'implémentation
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Les scénarios suivants représentent certaines des erreurs les plus courantes observées lors de l'implémentation de GPT. Bien que de telles implémentations puissent sembler fonctionner correctement avec la
de GPT, il n'est pas garanti qu'ils continuent à le faire à l'avenir. Dans les cas les plus extrêmes, ces implémentations peuvent entraîner la défaillance de la diffusion des annonces de manière imprévisible.
Elles sont considérées comme des implémentations non compatibles.
Chaque scénario inclut une suggestion d'approche pour résoudre le problème affiché.
Notez que cette liste n'est pas exhaustive, mais elle devrait vous aider à identifier les types de problèmes qui peuvent nécessiter une attention particulière.
De plus, selon votre implémentation, vous devrez peut-être rechercher tous les endroits où de telles modifications peuvent être nécessaires sur votre site.
Erreurs fréquentes
Scénario 1: Utiliser des copies non officielles de bibliothèques JavaScript GPT
Description générale du cas d'utilisation |
Hébergement de gpt.js, pubads_impl.js ou de toute bibliothèque qu'ils chargent à partir de vos propres serveurs, ou chargement de ces fichiers à partir d'une source non officielle.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
|
Suggestions de solutions pour corriger l'erreur |
// Correct: Access these files from a Google domain
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async></script>
// Also correct, if using Limited Ads
<script src="https://pagead2.googlesyndication.com/tag/js/gpt.js" async></script>
|
Scénario 2: Utiliser des écouteurs de tags de script gpt.js
Description générale du cas d'utilisation |
Supposons que l'API GPT est prête à être appelée lorsque le fichier JavaScript
gpt.js est chargé correctement, car certaines parties de l'API sont fournies par
pubads_impl.js . Il est donc incorrect de s'appuyer de quelque manière que ce soit (y compris les frameworks) sur l'API à partir des écouteurs d'événements associés à la balise de script.
|
Exemple d'extrait de code avec erreur |
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
// Incorrect: Attaching a callback to the script's onload event.
tag.onload = callback;
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(tag, node);
|
Suggestions de solutions pour corriger l'erreur |
// Make sure that googletag.cmd exists.
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
// Correct: Queueing the callback on the command queue.
googletag.cmd.push(callback);
|
Explication/Description de la correction |
googletag.cmd gère une liste de commandes qui seront exécutées dès que GPT sera prêt. Il s'agit de la bonne méthode pour vous assurer que votre rappel est exécuté une fois le tag GPT chargé.
|
Scénario 3: Vérifier l'objet googletag pour savoir si GPT est prêt
Description générale du cas d'utilisation |
Étant donné que l'API GPT peut ne pas être prête lorsque le fichier JavaScript gpt.js est chargé ou lorsque l'objet googletag est défini, il n'est pas fiable de vérifier cet objet pour voir si l'API GPT est disponible.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
functionProcessingGPT();
}
|
Suggestions de solutions pour corriger l'erreur |
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
functionProcessingGPT();
}
|
Explication/Description de la correction |
GPT insère l'indicateur booléen
googletag.apiReady dès que
l'API est prête à être appelée afin que vous puissiez effectuer des assertions fiables.
|
Scénario 4 : S'appuyer sur la syntaxe du code obscurci
Description du cas d'utilisation général |
Si vous vous appuyez sur la syntaxe précise du code de la bibliothèque GPT minifiée, vous rencontrerez presque certainement des erreurs. Veuillez limiter votre utilisation à l'API décrite dans le guide de référence de l'API, car nous modifions continuellement le fonctionnement interne de GPT pour l'améliorer en permanence.
Par exemple, il est courant de déterminer
si PubAdsService est entièrement chargé
pour appeler refresh() .
|
Exemple d'extrait de code avec erreur |
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
functionProcessingGPT();
}
|
Suggestions de solutions pour corriger l'erreur |
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
functionProcessingGPT();
}
|
Explication / Description du correctif |
Seule l'API publique peut être utilisée. Pour savoir si PubAdsService est entièrement chargé, nous utilisons une valeur booléenne googletag.pubadsReady.
|
Scénario 5 : Écrasement d'une fonction ou d'une variable de GPT
Description générale du cas d'utilisation |
Les cas d'utilisation basés sur l'écrasement de toute fonction ou variable utilisée par GPT peuvent se briser à tout moment, car il ne s'agit pas d'un cas d'utilisation accepté. Les modifications de timing dans les éléments internes de GPT peuvent entraîner ce type de comportement incorrect en cas de panne.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
|
Suggestions pour corriger l'erreur |
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];
|
Scénario 6: Ordre incorrect des appels aux tags GPT
Description du cas d'utilisation général |
Les conditions de course peuvent entraîner des pannes à mesure que les composants internes de GPT évoluent. Une erreur
ensemble ordonné d'instructions fonctionnelles en raison de délais d'exécution spécifiques
risquent de ne pas rester opérationnels à l'avenir.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
|
Suggestions de solutions pour corriger l'erreur |
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
|
Explication/Description de la correction |
Évitez les conditions de concurrence en vous assurant de respecter le calendrier habituel de la GPT. Exemple valide
les ordres partiels incluent:
<ph type="x-smartling-placeholder"></ph>
-
Define-Enable-Display
- Définir les paramètres au niveau de la page
- Définir des emplacements
- enableServices()
- Emplacements d'écran
-
Activer la définition d'affichage
- Définir les paramètres au niveau de la page
- enableServices()
- Définir des emplacements
- Emplacements d'écran
|
Scénario 7 : Utilisation incorrecte des fermetures et du champ d'application des variables JavaScript
Description générale du cas d'utilisation |
Hypothèses incorrectes concernant le champ d'application des variables JavaScript et la valeur des variables
capturé dans la fonction transmise à googletag.cmd.push .
|
Exemple d'extrait de code avec erreur |
// Incorrect: Variable x is declared outside the anonymous function
// but referenced within it.
for (var x = 0; x < slotCount; x++) {
window.googletag.cmd.push(
function(){
// If GPT is not yet loaded, this code will be executed subsequently when
// the command queue is processed. Every queued function will use the last value
// assigned to x (most likely slotCount).
// This is because the function closure captures the reference to x,
// not the current value of x.
window.googletag.display(slot[x]);
})
}
}
|
Suggestions de solutions pour corriger l'erreur |
window.googletag.cmd.push(
function(){
// Correct: We both declare and reference x inside the context of the function.
for (var x = 0; x < slotCount; x++){
window.googletag.display(slot[x]);
}
}
)
|
Explication / Description du correctif |
En JavaScript, les fermetures capturent les variables par référence plutôt que par valeur. Cela signifie que si une variable est réaffectée, sa nouvelle valeur sera utilisée lorsque la fermeture de fonction qui l'a capturée sera exécutée ultérieurement. Ainsi, le comportement du code dans la fermeture
peut changer selon que le rappel est exécuté immédiatement ou retardé.
Dans le cas d'un GPT chargé de manière asynchrone, selon la rapidité avec laquelle le GPT charge les rappels sur la file d'attente de commandes, ils peuvent s'exécuter immédiatement ou non. Dans l'exemple précédent, cela modifie le comportement des commandes mises en file d'attente.
Pour éviter tout problème, le code doit être écrit sans présumer que les fonctions
placé dans la file d'attente de commandes s'exécute immédiatement,
en ce qui concerne les règles
de champ d'application de JavaScript.
|
Scénario 8 : Déplacer des conteneurs d'emplacements dans le DOM après avoir appelé l'affichage
Description du cas d'utilisation général |
Déplacer ou insérer des conteneurs d'emplacements dans le DOM après avoir appelé l'affichage peut entraîner un refoulement indésirable et un comportement imprévisible dans GPT.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Moving slot containers after calling display
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
...
// Inserting another element before the slot container, pushing the slot container down the page.
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
|
Suggestions pour corriger l'erreur |
// Correct: Make any DOM order changes before calling display
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
...
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
|
Scénario 9 : Remplacement des API du navigateur
Description générale du cas d'utilisation |
Il n'est pas possible d'écraser (également appelé "monkey patching" ou "polyfilling) des API de navigateur dans GPT.
Cette pratique peut endommager les scripts tiers tels que GPT de manière inattendue.
|
Exemple d'extrait de code avec erreur |
// Incorrect: Overwriting window.fetch
const { fetch: originalFetch } = window;
window.fetch = (...args) => {
console.log('Fetching!');
return originalFetch(resource, config);
};
|
Suggestions de solutions pour corriger l'erreur |
// Correct: Avoid making changes to browser APIs.
// If you need custom logic, consider leaving the browser API intact.
const myFetch = (...args) => {
console.log('Fetching!');
return window.fetch(...args);
}
|
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[null,null,["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eAvoid unofficial copies of GPT JavaScript libraries, always access them from an official Google domain.\u003c/p\u003e\n"],["\u003cp\u003eUtilize \u003ccode\u003egoogletag.cmd.push\u003c/code\u003e to queue functions and ensure they execute when GPT is ready, rather than relying on script tag listeners or checking the \u003ccode\u003egoogletag\u003c/code\u003e object directly.\u003c/p\u003e\n"],["\u003cp\u003eStrictly adhere to the documented GPT API and refrain from relying on obfuscated code or overwriting any GPT functions or variables to prevent breakages.\u003c/p\u003e\n"],["\u003cp\u003eMaintain the correct order of GPT calls, like defining page-level settings and slots before enabling services and displaying ads, to avoid race conditions.\u003c/p\u003e\n"],["\u003cp\u003eBe mindful of JavaScript variable scoping and closures, especially when using \u003ccode\u003egoogletag.cmd.push\u003c/code\u003e, to prevent unexpected behavior due to delayed execution.\u003c/p\u003e\n"],["\u003cp\u003eEnsure slot containers are positioned correctly in the DOM before calling \u003ccode\u003edisplay\u003c/code\u003e to avoid reflows and unpredictable rendering.\u003c/p\u003e\n"],["\u003cp\u003eRefrain from overwriting browser APIs, as it can negatively impact the functionality of third-party scripts like GPT.\u003c/p\u003e\n"]]],["The content outlines unsupported methods of implementing GPT (Google Publisher Tag) that may cause unpredictable ad serving issues. Key actions to avoid include: using unofficial GPT JavaScript libraries, relying on script tag listeners or the `googletag` object to determine API readiness, using obfuscated code syntax, overwriting GPT functions/variables, mis-ordering GPT calls, and misusing JavaScript variable scoping. Correct implementations involve using Google-hosted libraries, leveraging `googletag.cmd.push`, respecting API timing, and modifying the DOM before calling display. Also, avoid overwriting browser APIs.\n"],null,[]]