Sei que existe um método assíncrono de usar o Google Analytics, mas existe algo semelhante para o adsense? Não consigo encontrar uma nas minhas pesquisas atuais. Fiquei me perguntando se há um truque comum que está faltando.
Sei que existe um método assíncrono de usar o Google Analytics, mas existe algo semelhante para o adsense? Não consigo encontrar uma nas minhas pesquisas atuais. Fiquei me perguntando se há um truque comum que está faltando.
Respostas:
faz isso:
<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>
consulte este item de blog " Google Ads Async (assíncrono) " basicamente encontrei uma maneira de fazer com que o código do anúncio fosse realmente assíncrono.
Sim, existe uma maneira - usando iframes. Fazemos carregamento assíncrono do conteúdo do anúncio em um dos sites de nossos clientes.
Primeiro, você deve entrar em contato com o Google para obter suporte para seus anúncios em iframes (que não estavam amplamente disponíveis quando criamos esse site). Você pode usar o JavaScript para acionar o carregamento do conteúdo do iframe do AdSense, que é o que fazemos.
A solução é realmente simples quando você tem o suporte a iframe do Google.
Editar: Parece - nas postagens mencionadas pela Virtuosi Media - essa prática pode não ser bem-vinda pelo Google ...
Edit 2:
Este é o código que usamos no iframe. Experimente para ver se funciona, talvez mesmo sem pedir especificamente ao Google suporte. Removido type="text/javascript" language="JavaScript"
para melhor legibilidade:
<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>
Preenchemos todos os nossos espaços por meio de IDs de anúncios, portanto não estamos vendo nenhum PSA.
No momento, eles não oferecem a opção, até onde posso ver. Sua melhor opção, se isso fosse permitido pelos Termos de Serviço do Google, teria sido usar um elemento de espaço reservado e substituí-lo dinamicamente por JavaScript após o carregamento da página. No entanto, parece que pode ser contra os Termos de Serviço. Veja este tópico para mais detalhes.
Você pode usar um espaço reservado, chamar o código do Adsense e alternar o espaço reservado com o anúncio. Estou usando algo parecido com isto no meu site:
if ( ad1 = document.getElementById('ad-top') )
{
ad2 = document.getElementById('banner_tmp468');
ad1.appendChild(ad2);
ad2.style.display = 'block';
}
O Google até recomenda isso quando dizem que você deve ter sua posição de anúncio mais importante primeiro no seu código HTML. Se você deseja conseguir isso, precisará usar JS ou CSS para mover blocos de anúncios menos importantes para o topo (visual) da sua página.
Mas, tanto quanto eu sei, o AdSense já processa anúncios de forma assíncrona. Eu raramente vi isso bloquear o carregamento de páginas. Não tenho certeza sobre isso embora.
Como o google diz "vamos acelerar a web", altero o código acima para carregar os anúncios do google somente quando estão visíveis. O código funciona "como está" apenas para um anúncio do Google Place, mas acho que você pode modificá-lo facilmente para mais anúncios. Os diferentes com o outro código são
Começando com o div
que eu coloco os anúncios mais tarde.
<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>
Eu testei e, trabalhando com todos os navegadores, apenas uso o jQuery para ser mais seguro do que evitar navegadores difíceis.
ps, eu criei um código semelhante para carregar o google plus, o facebook e todos os itens carregados sem motivo na maioria das vezes.
Não há mais necessidade de fazer isso. Os show_ads.js do Google AdSense agora são um tanto assíncronos. Você pode ler mais sobre os detalhes sangrentos no blog oficial:
Não há necessidade de alterar o código do anúncio.
document.write function
e o restaura mais tarde. A única desvantagem é que eu estou querendo saber se o TOS do Google Adsense permite fazer esse tipo de coisa?