Sé que hay un método asincrónico de usar Google Analytics, pero ¿hay algo similar para adsense? No puedo encontrar uno de mis búsquedas actuales. ¿Me preguntaba si hay un truco común que me falta?
Sé que hay un método asincrónico de usar Google Analytics, pero ¿hay algo similar para adsense? No puedo encontrar uno de mis búsquedas actuales. ¿Me preguntaba si hay un truco común que me falta?
Respuestas:
esto lo hace:
<script type="text/javascript"><!--
// dynamically Load Ads out-of-band
setTimeout((function ()
{
// placeholder for ads
var eleAds = document.createElement("ads");
// dynamic script element
var eleScript = document.createElement("script");
// remember the implementation of document.write function
w = document.write;
// override and replace with our version
document.write = (function(params)
{
// replace our placeholder with real ads
eleAds.innerHTML = params;
// put the old implementation back in place
// Aristos, add this check because called more than ones
// and ends, with this symbol.
if(params.indexOf("</ins>") != -1)
document.write=w;
});
// setup the ads script element
eleScript.setAttribute("type", "text/javascript");
eleScript.setAttribute("src", "http://pagead2.googlesyndication.com/pagead/show_ads.js");
// add the two elements, causing the ads script to run
document.body.appendChild(eleAds);
document.body.appendChild(eleScript);
}), 1);
//-->
</script>
vea este artículo del blog " Google Ads Async (asíncrono) " básicamente he encontrado una manera de hacer que el código del anuncio se ejecute realmente asíncrono.
Sí, hay una manera: usar iframes. Hacemos carga asincrónica de contenido publicitario en uno de los sitios de nuestros clientes.
Primero debe ponerse en contacto con Google para obtener soporte de sus anuncios en iframes (que no estaba ampliamente disponible cuando creamos ese sitio). Luego puede usar JavaScript para activar la carga del contenido del iframe de AdSense, que es lo que hacemos.
La solución es realmente sencilla una vez que tenga el soporte de iframe de Google.
Editar: Parece que, de las publicaciones a las que hace referencia Virtuosi Media, esta práctica podría no ser bienvenida por Google ...
Edición 2:
este es el código que usamos en el iframe. Pruébalo para ver si funciona, tal vez incluso sin pedirle ayuda específicamente a Google. Eliminado type="text/javascript" language="JavaScript"
para una mejor legibilidad:
<head runat="server">
<script src="http://partner.googleadservices.com/gampad/google_service.js">
</script>
<script>
GS_googleAddAdSenseService("ca-pub-YOURKEY");
GS_googleEnableAllServices();
</script>
<!-- For this method, it is not necessary to define the slots in advance
and we do not use the FetchAds function -->
<script>
GA_googleUseIframeRendering(true); //<%-- This indicates iframe rendering for all slots --%>
</script>
</head>
<body>
<form id="formAd" runat="server">
<div>
<script>
GA_googleFillSlotWithSize("ca-pub-YOURKEY", "AdSlotId",
iframeWidth, iframeHeight);
</script>
</div>
</form>
</body>
Llenamos todos nuestros espacios a través de los ID de adslot, por lo que no vemos ningún anuncio de servicio público.
Actualmente no ofrecen la opción, por lo que puedo ver. Su mejor opción, si lo permitieran los TOS de Google, habría sido usar un elemento de marcador de posición y reemplazarlo dinámicamente con JavaScript después de que la página se haya cargado. Sin embargo, parece que puede estar en contra de los TOS. Vea este hilo para más detalles.
Puede usar un marcador de posición, llamar al código de Adsense y luego cambiar el marcador de posición con el anuncio. Estoy usando algo como esto en mi sitio:
if ( ad1 = document.getElementById('ad-top') )
{
ad2 = document.getElementById('banner_tmp468');
ad1.appendChild(ad2);
ad2.style.display = 'block';
}
Google incluso recomienda hacer esto cuando dicen que debe tener su posición de anuncio más importante primero en su código HTML. Si desea lograrlo, tendrá que usar JS o CSS para mover los bloques de anuncios menos importantes a la parte superior (visual) de su página.
Pero hasta donde yo sé, AdSense ya presenta anuncios de forma asincrónica. Muy raramente lo he visto bloquear la carga de páginas. Aunque no estoy seguro de esto.
Debido a que Google dice "hagamos que la web sea más rápida", cambio el código anterior para cargar los anuncios de Google solo cuando están visibles. El código funciona "tal cual" solo para un anuncio de Google Place, pero creo que puede modificarlo fácilmente para obtener más anuncios. Los diferentes con el otro código son
Comenzando con el div
que coloco los anuncios más adelante.
<div id="adSpot" ></div>
<script type="text/javascript">
// load the script with cache
function getScriptCcd(url, callback)
{
jQuery.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: true
});
};
// to unbind the scroll I keep the total binds of scroll
// in this example I have only one.
var cPosaScrollExo = 0;
// bind the scrool to monitor if ads are visible
function addThisScroll(RunThisFunction)
{
jQuery(window).scroll(RunThisFunction);
cPosaScrollExo++;
}
// unbind all scroll if all they not needed any more
function unBindScroll()
{
cPosaScrollExo--;
if(cPosaScrollExo <= 0)
{
cPosaScrollExo = 0;
jQuery(window).unbind('scroll');
}
}
// here I check if the element is visible to the user with a 100pixel advanced.
function isScrolledOnMatia(pioSimio)
{
var SimioPouTheloNaFenete = (jQuery(pioSimio).offset().top - 100 );
var scrollPosition = jQuery(window).height() + jQuery(window).scrollTop();
return (scrollPosition >= SimioPouTheloNaFenete );
}
// the ads informations
google_ad_client = "pub-XXXXXXXXXXXXXXX";
google_ad_slot = "XXXXX";
google_ad_width = 468;
google_ad_height = 60;
var GoogleIsVisible = false;
// we call this function on every window scroll
function CheckAdsVisibility()
{
if(!GoogleIsVisible)
{
if(isScrolledOnMatia("#adSpot"))
{
unBindScroll();
GoogleIsVisible = true;
// finally I go to show the ads
LoadAdsLater();
}
}
}
// here is a modification of the function that load the ads
function LoadAdsLater()
{
try
{
// Aristos: nice trick here
// remember the implementation of document.write function
w = document.write;
// override and replace with our version
document.write = (function(params)
{
jQuery("#adSpot").append(params);
// put the old implementation back in place when
// all writes are finish
if(params.indexOf("</ins>") != -1)
document.write=w;
});
// loading script
getScriptCcd("http://pagead2.googlesyndication.com/pagead/show_ads.js");
}
catch(e)
{
// check for errors on debug
}
}
// and here we setup the hole thin
jQuery(document).ready(function()
{
// check if all ready is visible !
CheckAdsVisibility();
// bind the scroll
addThisScroll(CheckAdsVisibility);
});
</script>
Lo he probado y trabajando con todos los navegadores, solo uso jQuery para estar más seguro y evitar navegadores difíciles.
PD, he creado un código similar para cargar el google plus, y el facebook y todos los elementos que se cargan sin razón la mayoría de las veces.
No hay más necesidad de hacer esto. El show_ads.js de Google AdSense ahora es algo asíncrono. Puedes leer más sobre los detalles sangrientos en el blog oficial:
No hay necesidad de cambiar el código del anuncio.
document.write function
y lo restaura más tarde. El único inconveniente es que me pregunto si Google Adsense TOS permite hacer este tipo de cosas.