Ссылки Поиск Написать В избранное NO

Подменяем Google AdSense рекламой Яндекс для России

Что же делать, если реклама Гугл заблокирована в России и объявления не показываются, но рекламу нам выводить нужно? Начнем с самого простого. В самом объявлении Гугла есть возможность показать альтернативную страницу! Замечу, что это должна быть именно HTML или PHP страница со всем нужным кодом для работы и всеми нужными ссылками.


<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<ins class="adsbygoogle"

data-alternate-ad-url="/rekom/4.php"

style="display:block;"

data-ad-client="ca-pub-1111111111111111"

data-ad-slot="2222222222"

data-ad-format="rectangle"

data-full-width-responsive="false"></ins>


Дальше, в сети очень много пишут про:

if (!adsbygoogle.loaded) {

// тут какой-то код, если реклама не загружена

}


Но оно что-то толком не работает. Как я ни крутил. То срабатывает сразу (если скрипт вызван асинхронно) то вообще не срабатывает. Говорят, реагирует на Адблок, но я так и не смог заставить это корректно работать.


Более интересный вариант. Ждем загрузки страницы и проверяем наличие параметра у Гугл блока.


<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<ins class="adsbygoogle"

id="adsbygoogle3" // Добавил ID блока с рекламой тут и ниже. У меня это 3 блок на странице

style="display:block;"

data-ad-client="ca-pub-1111111111111111"

data-ad-slot="2222222222"

data-ad-format="rectangle"

data-full-width-responsive="false"></ins>


<div id="yandex_rtb_R-A-00000-12"></div>


<script>

(adsbygoogle = window.adsbygoogle || []).push({});


window.addEventListener("load", function(event) { // Срабатываем при загрузке сайта

if (adsbygoogle3.getAttribute('data-ad-status') == "unfilled") {

(function(w, d, n, s, t) {

w[n] = w[n] || [];

w[n].push(function() {

Ya.Context.AdvManager.render({

blockId: "R-A-00000-12",

renderTo: yandex_rtb_R-A-00000-12",

async: true

});

});

t = d.getElementsByTagName("script")[0];

s = d.createElement("script");

s.type = "text/javascript";

s.src = "//an.yandex.ru/system/context.js";

s.async = true;

t.parentNode.insertBefore(s, t);

})(this, this.document, "yandexContextAsyncCallbacks");

}

});

</script>


<style>

ins.adsbygoogle[data-ad-status="unfilled"] {display: none !important;} // Если параметр есть, скрываем рекламный блок стилями. Он пуст

</style>


Если у блока adsbygoogle3 есть атрибут data-ad-status="unfilled" - показываем рекламу Яндекса. Ведь это значит, что в блоке Гугла реклама не загрузилась. И блок остается пустой. Единственный минус - нужно ждать полной загрузки контента. А с подтормаживающим Гуглом это довольно долго.


Еще я точно не уверен про async в скрипте. Нужна ли тут асинхронная загрузка? Повлияет ли она на корректное срабатывание addEventListener - load? Понятия не имею. У меня на тестах наличие рекламы определялось правильно. И влияло оно только на срабатывание adsbygoogle.loaded при адблоке.



UPD! Конечный вариант, работающий быстрее!

<div id="yandex_rtb_R-A-00000-14"></div>

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<ins class="adsbygoogle"

id="adsbygoogle2"

style="display:block"

data-ad-client="ca-pub-1111111111111111"

data-ad-slot="2222222222"

data-full-width-responsive="false"></ins>

<script>

(adsbygoogle = window.adsbygoogle || []).push({});


tmer2 = 0;

function abygg2(){

reszTmr2 = setTimeout(function() {abygg2();}, 1000);

if(tmer2 >= 5) {clearTimeout(reszTmr2);}

if (!adsbygoogle.loaded || adsbygoogle2.getAttribute('data-ad-status') == "unfilled") {

(function(w, d, n, s, t) {

w[n] = w[n] || [];

w[n].push(function() {

Ya.Context.AdvManager.render({

blockId: "R-A-00000-14",

renderTo: "yandex_rtb_R-A-00000-14",

async: true

});

});

t = d.getElementsByTagName("script")[0];

s = d.createElement("script");

s.type = "text/javascript";

s.src = "//an.yandex.ru/system/context.js";

s.async = true;

t.parentNode.insertBefore(s, t);

})(this, this.document, "yandexContextAsyncCallbacks");

clearTimeout(reszTmr2);

} tmer2++;}

abygg2();

</script>


<style>

ins.adsbygoogle[data-ad-status="unfilled"] {display: none !important;}

</style>


В итоге, совместил !adsbygoogle.loaded и таймер. Так не нужно ждать загрузки страницы. Работает корректно только без async в скрипте Гугла!