Подменяем 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 в скрипте Гугла!