So che esiste un metodo asincrono di utilizzare Google Analytics ma esiste qualcosa di simile per AdSense? Non riesco a trovarne uno tra le mie ricerche attuali: mi chiedevo se mi manca un trucco comune?
So che esiste un metodo asincrono di utilizzare Google Analytics ma esiste qualcosa di simile per AdSense? Non riesco a trovarne uno tra le mie ricerche attuali: mi chiedevo se mi manca un trucco comune?
Risposte:
questo lo fa:
<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>
vedere questo articolo del blog " Google Ads Async (asincrono) " sostanzialmente ho trovato un modo per ottenere il codice degli annunci per eseguire veramente asincrono.
Sì, c'è un modo: usare iframe. Effettuiamo il caricamento asincrono dei contenuti degli annunci su uno dei siti dei nostri clienti.
Devi prima contattare Google per il supporto dei loro annunci in iframe (che non era ampiamente disponibile quando abbiamo costruito quel sito). Puoi quindi utilizzare JavaScript per attivare il caricamento del contenuto iframe di AdSense, che è ciò che facciamo.
La soluzione è davvero semplice una volta che hai il supporto iframe di Google.
Modifica: sembra che - dai post a cui fa riferimento Virtuosi Media - questa pratica potrebbe non essere gradita a Google ...
Modifica 2:
questo è il codice che usiamo nell'iframe. Provalo per vedere se funziona, forse anche senza chiedere specificamente assistenza a Google. Rimosso type="text/javascript" language="JavaScript"
per una migliore leggibilità:
<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>
Riempiamo tutti i nostri slot tramite ID adslot, quindi non vediamo alcun PSA.
Al momento non offrono l'opzione, per quanto posso vedere. La tua migliore opzione, se fosse stata consentita da Google TOS, sarebbe stata quella di utilizzare un elemento segnaposto e sostituirlo in modo dinamico con JavaScript dopo il caricamento della pagina. Tuttavia, sembra che potrebbe essere contro il TOS. Vedi questa discussione per maggiori dettagli.
Puoi utilizzare un segnaposto, chiamare il codice Adsense e quindi cambiare il segnaposto con l'annuncio. Sto usando qualcosa del genere sul mio sito:
if ( ad1 = document.getElementById('ad-top') )
{
ad2 = document.getElementById('banner_tmp468');
ad1.appendChild(ad2);
ad2.style.display = 'block';
}
Google consiglia persino di farlo quando dicono che dovresti avere la posizione dell'annuncio più importante prima nel tuo codice HTML. Se vuoi realizzare che dovrai usare JS o CSS per spostare le unità pubblicitarie meno importanti nella parte superiore (visiva) della tua pagina.
Ma per quanto ne so, AdSense esegue già il rendering degli annunci in modo asincrono. Ho visto molto raramente bloccare il pageload. Non sono sicuro di questo però.
Perché google dice "consente di rendere il Web più veloce", cambio il codice sopra per caricare gli annunci google solo quando sono visibili. Il codice funziona "così com'è" solo per un annuncio google place, ma penso che tu possa facilmente modificarlo per più annunci. I diversi con l'altro codice sono
A partire dal div
che inserisco gli annunci in un secondo momento.
<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>
Ho provato e lavorando con tutti i browser, uso jQuery per essere più sicuro di evitare i browser difficili.
ps, ho creato un codice simile per caricare google plus, e facebook e tutti quegli elementi che si caricano senza motivo il più delle volte.
Non è più necessario farlo. Show_ads.js di Google AdSense ora è in qualche modo asincrono. Puoi leggere di più sui dettagli cruenti sul blog ufficiale:
La tua rete, mezzo secondo prima
Non è necessario modificare il codice dell'annuncio.
document.write function
e lo ripristina in seguito. L'unico aspetto negativo è che mi chiedo se Google Adsense TOS consenta di fare questo tipo di cose?