Можно ли использовать асинхронный Google AdSense, то есть неблокировать?
11
Я знаю, что существует асинхронный метод использования Google Analytics, но есть ли что-то подобное для AdSense? Я не могу найти один из моих текущих поисков - мне было интересно, есть ли какой-то общий трюк, который я пропускаю?
<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>
см. этот элемент блога " Google Ads Async (асинхронный) ", в основном я нашел способ заставить рекламный код работать действительно асинхронно.
+1 за умное решение, представленное в ссылке. Очень интересно, как он выполняет резервное копирование стандарта document.write functionи восстанавливает его позже. Единственным недостатком является то, что мне интересно, если Google Adsense TOS позволяет делать такие вещи?
Марко Демайо
+1 за идею, я беру это и заставляю это работать немного лучше и публикую это здесь. Я не могу заставить этот GS_googleAddAdSenseService работать с другой идеей.
Аристос
5
Да, есть способ - использование фреймов. Мы делаем асинхронную загрузку рекламного контента на одном из сайтов наших клиентов.
Сначала вы должны связаться с Google для поддержки их рекламы в iframes (которые не были широко доступны, когда мы создавали этот сайт). Затем вы можете использовать JavaScript для запуска загрузки контента AdSense iframe, что мы и делаем.
Решение действительно простое, если у вас есть поддержка Google iframe.
Изменить: Похоже - из сообщений, на которые ссылается Virtuosi Media - эта практика может не приветствоваться Google ...
Изменить 2:
это код, который мы используем в iframe. Попробуйте, чтобы увидеть, работает ли он, может быть, даже без специального обращения в Google за поддержкой. Удалено type="text/javascript" language="JavaScript"для лучшей читаемости:
<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>
Мы заполняем все наши слоты с помощью идентификаторов рекламных блоков, поэтому не видим никаких СРП.
Можете ли вы предоставить более подробную информацию о том, как связаться с Google по этому поводу? Я ничего не вижу в моем аккаунте AdSense.
Virtuosi Media
Кроме того, мне было бы любопытно узнать, по-прежнему ли в рекламных блоках показываются релевантные объявления или только рекламные ролики, и как вы решили эту проблему.
Virtuosi Media
На самом деле, мы заполняем все наши слоты с помощью идентификаторов рекламных блоков, поэтому мы не видим никаких СРП.
Оливер
при использовании этого метода я получаю GA_googleFillSlotWithSize не определена ошибка
Тимо Хуовинен
@YuriKolovsky: похоже, скрипт Google не загружается должным образом. См. Мой Edit 2: вам может потребоваться подать заявку на этот метод с Google.
Оливер
2
Насколько я вижу, они в настоящее время не предлагают такую возможность. Если бы это было разрешено Google TOS, лучшим вариантом было бы использовать элемент-заполнитель и динамически заменять его на JavaScript после загрузки страницы. Тем не менее, кажется, что это может быть против TOS. Смотрите эту тему для более подробной информации.
Вы можете использовать местозаполнитель, вызвать код AdSense, а затем поменять местозаполнитель с объявлением. Я использую что-то вроде этого на моем сайте:
Google даже рекомендует делать это, когда говорят, что сначала в вашем HTML-коде должна быть самая важная позиция объявления. Если вы хотите добиться этого, вам придется использовать JS или CSS, чтобы переместить менее важные рекламные блоки в (визуальный) верх вашей страницы.
Но, насколько я знаю, AdSense уже отображает рекламу асинхронно. Я очень редко видел, как это блокирует загрузку страниц. Хотя не уверен насчет этого.
Поскольку Google говорит: «Давайте сделаем Интернет быстрее», я изменяю приведенный выше код, чтобы загружать объявления Google только тогда, когда они видны. Код работает "как есть" только для одного объявления в Google, но я думаю, что вы можете легко изменить его для большего количества объявлений. Разное с другим кодом
Загружать рекламу, только если она видна пользователю
Загружает объявления и помещает их в раздел (не в конце страницы)
Работает со всеми браузерами, потому что я загружаю все необходимые элементы (не только первый)
Начиная с того, divчто я размещаю рекламу позже.
<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>
Я протестировал его и работал со всеми браузерами, я просто использую jQuery, чтобы быть более безопасным, чтобы избежать трудностей с браузерами.
PS, я сделал подобный код для загрузки Google Plus, и Facebook и все те элементы, которые загружаются без причины большую часть времени.
Больше нет необходимости делать это. Show_ads.js в Google AdSense теперь несколько асинхронный. Вы можете прочитать больше о кровавых подробностях в официальном блоге:
document.write function
и восстанавливает его позже. Единственным недостатком является то, что мне интересно, если Google Adsense TOS позволяет делать такие вещи?Да, есть способ - использование фреймов. Мы делаем асинхронную загрузку рекламного контента на одном из сайтов наших клиентов.
Сначала вы должны связаться с Google для поддержки их рекламы в iframes (которые не были широко доступны, когда мы создавали этот сайт). Затем вы можете использовать JavaScript для запуска загрузки контента AdSense iframe, что мы и делаем.
Решение действительно простое, если у вас есть поддержка Google iframe.
Изменить: Похоже - из сообщений, на которые ссылается Virtuosi Media - эта практика может не приветствоваться Google ...
Изменить 2: это код, который мы используем в iframe. Попробуйте, чтобы увидеть, работает ли он, может быть, даже без специального обращения в Google за поддержкой. Удалено
type="text/javascript" language="JavaScript"
для лучшей читаемости:Мы заполняем все наши слоты с помощью идентификаторов рекламных блоков, поэтому не видим никаких СРП.
источник
Насколько я вижу, они в настоящее время не предлагают такую возможность. Если бы это было разрешено Google TOS, лучшим вариантом было бы использовать элемент-заполнитель и динамически заменять его на JavaScript после загрузки страницы. Тем не менее, кажется, что это может быть против TOS. Смотрите эту тему для более подробной информации.
источник
Вы можете использовать местозаполнитель, вызвать код AdSense, а затем поменять местозаполнитель с объявлением. Я использую что-то вроде этого на моем сайте:
Google даже рекомендует делать это, когда говорят, что сначала в вашем HTML-коде должна быть самая важная позиция объявления. Если вы хотите добиться этого, вам придется использовать JS или CSS, чтобы переместить менее важные рекламные блоки в (визуальный) верх вашей страницы.
Но, насколько я знаю, AdSense уже отображает рекламу асинхронно. Я очень редко видел, как это блокирует загрузку страниц. Хотя не уверен насчет этого.
источник
Поскольку Google говорит: «Давайте сделаем Интернет быстрее», я изменяю приведенный выше код, чтобы загружать объявления Google только тогда, когда они видны. Код работает "как есть" только для одного объявления в Google, но я думаю, что вы можете легко изменить его для большего количества объявлений. Разное с другим кодом
Начиная с того,
div
что я размещаю рекламу позже.Я протестировал его и работал со всеми браузерами, я просто использую jQuery, чтобы быть более безопасным, чтобы избежать трудностей с браузерами.
PS, я сделал подобный код для загрузки Google Plus, и Facebook и все те элементы, которые загружаются без причины большую часть времени.
источник
Больше нет необходимости делать это. Show_ads.js в Google AdSense теперь несколько асинхронный. Вы можете прочитать больше о кровавых подробностях в официальном блоге:
Ваш веб, полсекунды рано
Нет необходимости менять рекламный код.
источник