Cómo evitar errores comunes de implementación
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Los siguientes escenarios representan algunos de los errores más comunes observados cuando
implementar etiquetas GPT. Si bien esas implementaciones pueden parecer funcionar bien con la versión actual de GPT, no se garantiza que continúen haciéndolo en el futuro. En los casos más extremos, estas implementaciones pueden hacer que la publicación de anuncios falle de forma impredecible.
Se consideran implementaciones no admitidas.
Cada situación incluye un enfoque sugerido para corregir el problema que se muestra.
Ten en cuenta que esta lista no es exhaustiva, pero se espera que sirva como guía útil para identificar los tipos de problemas que se pueden abordar.
Además, según su implementación, quizás necesite buscar todos los lugares donde
estos cambios pueden ser necesarios en su sitio.
Errores comunes
Situación 1: Usa copias no oficiales de las bibliotecas JavaScript de GPT
Descripción del caso de uso de alto nivel |
Alojamiento de gpt.js, pubads_impl.js o cualquier biblioteca que cargue desde tus propios servidores, o carga de estos archivos desde una fuente no oficial
|
Ejemplo de fragmento de código con error |
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
|
Formas sugeridas de corregir el error |
// 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>
|
Situación 2: Uso de los objetos de escucha de la etiqueta de secuencia de comandos de gpt.js
Descripción del caso de uso de alto nivel |
Suponer que la API de GPT está lista para que se la llame cuando se carga el archivo JavaScript gpt.js es incorrecto, ya que el archivo pubads_impl.js proporciona algunas partes de la API. Confiar en la API de cualquier manera (incluidos los frameworks)
de los objetos de escucha de eventos adjuntos a la etiqueta de la secuencia de comandos es incorrecto.
|
Ejemplo de fragmento de código con error |
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);
|
Formas sugeridas de corregir el error |
// 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);
|
Explicación o descripción de la corrección |
googletag.cmd mantiene una lista de los comandos que se ejecutarán en cuanto GPT
está listo. Esta es la forma correcta de asegurarse de que se ejecute la devolución de llamada cuando se cargue la etiqueta GPT.
|
Situación 3: Cómo verificar el objeto googletag para saber si GPT está listo
Descripción del caso de uso de alto nivel |
Dado que es posible que la API de GPT no esté lista cuando se cargue el archivo JavaScript gpt.js o cuando se defina el objeto googletag , no es confiable verificar ese objeto para ver si la API de GPT está disponible.
|
Ejemplo de fragmento de código con error |
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
functionProcessingGPT();
}
|
Formas sugeridas de corregir el error |
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
functionProcessingGPT();
}
|
Explicación o descripción de la corrección |
GPT propagará la marca booleana
googletag.apiReady en cuanto
la API esté lista para que se la llame, de modo que puedas realizar aserciones confiables.
|
Situación 4: Cómo depender de la sintaxis de código ofuscada
Descripción del caso de uso de alto nivel |
Si dependes de la sintaxis precisa del código de la biblioteca de GPT reducido, es casi seguro que experimentes fallas. Limita tu uso a la API documentada en la Guía de referencia de la API, ya que cambiamos continuamente
el funcionamiento interno de GPT para realizar mejoras constantes.
Por ejemplo, un requisito común es detectar cuándo PubAdsService se carga por completo para llamar a refresh() .
|
Ejemplo de fragmento de código con error |
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
functionProcessingGPT();
}
|
Formas sugeridas de corregir el error |
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
functionProcessingGPT();
}
|
Explicación o descripción de la corrección |
Solo se puede confiar en la API pública. En el caso de detectar si PubAdsService se cargó por completo, tenemos un valor booleano googletag.pubadsReady.
|
Situación 5: Se reemplaza cualquier función o variable de GPT
Descripción del caso de uso de alto nivel |
Los casos de uso basados en el reemplazo de cualquier función o variable utilizada por GPT podrían fallar en cualquier momento
ya que este no es un caso de uso admitido. Los cambios de tiempo en las funciones internas de GPT pueden generar este tipo de comportamiento incorrecto debido a las fallas.
|
Ejemplo de fragmento de código con error |
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
|
Formas sugeridas de corregir el error |
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];
|
Situación 6: Llamadas a GPT con el orden incorrecto
Descripción del caso de uso de alto nivel |
Es posible que las condiciones de carrera generen fallas a medida que los componentes internos de GPT evolucionen. Una
un conjunto ordenado de sentencias que fueron funcionales debido a tiempos específicos en la ejecución
puede no seguir funcionando en el futuro.
|
Ejemplo de fragmento de código con error |
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
|
Formas sugeridas de corregir el error |
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
|
Explicación o descripción de la corrección |
Para evitar condiciones de carrera, asegúrate de respetar los tiempos habituales de GPT. Ejemplo válido
las órdenes parciales incluyen:
-
Definir-Habilitar-Pantalla
- Define la configuración a nivel de la página
- Define los horarios
- enableServices()
- Ranuras de visualización
-
Habilitación, definición y visualización
- Cómo definir la configuración a nivel de página
- enableServices()
- Define las ranuras
- Ranuras de visualización
|
Situación 7: Usar de manera inadecuada clausuras y alcances de la variable de JavaScript
Descripción del caso de uso de alto nivel |
Suposiciones incorrectas sobre el alcance de la variable de JavaScript y el valor de las variables
se captura en la función que se pasa a googletag.cmd.push .
|
Ejemplo de fragmento de código con error |
// 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]);
})
}
}
|
Formas sugeridas de corregir el error |
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]);
}
}
)
|
Explicación o descripción de la corrección |
En JavaScript, los cierres capturan variables por referencia en lugar de por valor. Esto significa que, si se vuelve a asignar una variable, se usará su valor nuevo cuando se ejecute más adelante el cierre de la función que la capturó. Por lo tanto, el comportamiento del código en el cierre
Puede cambiar en función de si la devolución de llamada se ejecuta de inmediato o se retrasa.
En el caso de la GPT cargada de forma asíncrona, según la rapidez con la que la GPT cargue las devoluciones de llamada en la cola de comandos, es posible que se ejecuten de inmediato o no. En el ejemplo anterior, esto altera el comportamiento de los comandos en fila.
Para evitar problemas, el código se debe escribir sin suponer que las funciones
que se colocan en la cola de comandos se ejecutarán de inmediato y se debe tener cuidado con
las reglas de alcance de JavaScript.
|
Situación 8: Traslado de contenedores de ranuras dentro del DOM después de llamar a Display
Descripción del caso de uso de alto nivel |
Mover o insertar contenedores de ranuras en el DOM después de llamar a Display puede generar
reprocesamiento no deseado y comportamiento impredecible en GPT.
|
Ejemplo de fragmento de código con error |
// 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"));
|
Formas sugeridas de corregir el error |
// 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");
|
Situación 9: Se reemplazan las APIs del navegador
Descripción del caso de uso de alto nivel |
La API de navegadores de reemplazo (también conocida como parcheo de mono o polyfill) no es compatible con GPT.
Esta práctica puede dañar las secuencias de comandos de terceros, como GPT, de formas inesperadas.
|
Ejemplo de fragmento de código con error |
// Incorrect: Overwriting window.fetch
const { fetch: originalFetch } = window;
window.fetch = (...args) => {
console.log('Fetching!');
return originalFetch(resource, config);
};
|
Formas sugeridas de corregir el error |
// 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);
}
|
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-07-25 (UTC)
[null,null,["Última actualización: 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,[]]