Как обойти AdBlock?

Opera, Эдблок, Касперский, Антибаннер, Аваст и некоторые другие программы сейчас режут рекламу, счётчики статистики, скрипты кнопок социальных сетей и прочие элементы сайта. Благодаря фильтрам человек может сам выбирать что ему не хочется видеть на веб-ресурсе. Хотя не каждый умеет ими (фильтрами) пользоваться. Бездумная настройка может привести к тому, что товарищу не отобразится ни ролик YouTube, ни нужное ему изображение, ни форма. В этом случае AdBlock будет рассматриваться не как антиреклама, а как вирус, который не даёт полноценно работать с интернетом.

Крупные порталы, у которых большое число прямых рекламодателей, стараются максимально маскировать блоки рекламы в разметке HTML-страницы.

А что делать мелким информационным сайтам я расскажу далее...

Что будет, если львиная доля пользователей интернета перестанут лицезреть рекламу?

Появятся новые форматы рекламы или сайты, где за информацию будут платить их читатели, а не производители сопутствующих услуг.

Сколько на сайте посетителей блокируют рекламу с помощью расширения AdBlock?

Анализировать данные с помощью Яндекс.Метрики и Google Analytics смысла нет, так как они тоже могут быть удалены, поэтому нужно использовать свой код PHP. Моё предположение таково: если браузер убирает рекламу до того, как полностью загружает веб-страницу, то высота блока с рекламой равна нулю.

Шаг 1. Создать файл cAB.html

В cAB.html пишем:

<!DOCTYPE html>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<meta name="robots" content="noindex"/>
<ol>

Количество просмотров с включенным AdBlock смотрим на

http://вашсайт.ru/cAB.html

Шаг 2. Создать файл cAB.php

cAB.php заполняем
<?php
if (isset($_GET['add']))
{
    $fp = fopen("cAB.html", "a+"); // режим записи
    $mytext = "<li>" . date("d.m.Y H:i", strtotime("+4 hours")) . " " . $_SERVER['HTTP_REFERER']; // +4часа для Москвы
    $save = fwrite($fp, $mytext); // запись в файл
    fclose($fp); // закрытие файла
}
?>

Шаг 3. На страницы сайта с рекламой

Предполагаю, что блок с рекламой имеет какую-нибудь обёртку, например, на "Шпаргалке блоггера"

<div id='adsenseNiz'>
<!-- код AdSense -->
</div>
Тогда поближе к </body> добавляем
<img alt='1 пиксель белый' height='1' id='adbl1' src='http://1.bp.blogspot.com/-1QU3c-k4Psw/U8rGvbidbhI/AAAAAAAAEpc/mI0BV39Ukek/s00/1-1.png' width='1'/>
<script>
document.getElementById('adbl1').onload = function() {
  if (document.getElementById('adsenseNiz').clientHeight == '0' && window.XMLHttpRequest) {
       var req = new XMLHttpRequest();  
       req.open('GET', 'cAB.php?add', true);
       req.send(null);   
  }
}
</script>

Название файлов по-хорошему нужно заменять на свои, чтобы нельзя было отфильтровать по маске.

P.S. На "Шпаргалке блоггера" около 800 просмотров в день с включенным AdBlock. В основном люди интересуются кодом. Хм, что им предложить? Если вы владелец интересного сервиса, пишите на n.mitra@yandex.ru, отдам места задёшево.

Как бороться с AdBlock?

Что я не буду делать:

  1. блокировать доступ к основному содержанию сайта пока не будет удовлетворена просьба выключить AdBlock. Большой процент людей не знают что это такое за плагин и с чем его едят. Им его установил сын, брат или "на работе". Разбираться как убрать блокировщика рекламы или отключить его именно на вашем сайте скорее всего не будут. А значит поведенческие факторы ухудшатся, а за ними и позиции в поисковых системах уйдут вниз.
  2. добавлять shpargalkablog.ru в белый список.
    • не все системы блокировки рекламы позволяют вносить сайты в белый список безвозмездно,
    • их "ненавязчивая реклама" приносит меньше дохода,
    • велика вероятность, что белые списки не используют, снимая соответствующую галку.

Что я предлагаю сделать:

  1. вместо РСЯ или Google AdSense для приверженцев AdBlock показывать баннеры партнёрских программ. В SEO практически у каждого хостинга, системы автоматического продвижения есть свои начисления за привлечённых посетителей. Аналогично и в других тематиках. Тем самым будут решаться две задачи:
    • интерес к расширению браузера постепенно упадёт,
    • доход с блога увеличится. В том числе и из-за того, что у непуганых рекламой людей ещё отсутствует баннерная слепота.

Код JavaScript, который позволит обойти AdBlock

Если после загрузки страницы высота блока-обёртки равна нулю, то создаём ссылку с баннером:

<script>
window.addEventListener("load", function() {
  var div = document.getElementById('adsenseNiz');
  if (div.clientHeight == '0') {
    theImg = document.createElement('img');  // создать новый элемент в JavaScript
    theImg.src = 'адрес_изображения';
    div.parentNode.insertBefore(theImg, div.previousSibling);
    theImg.onclick = function() {  // клик по картинке приведёт к переходу
        document.location.href = 'партнёрская_ссылка';
    }
  }
}, true);
</script>

Человек может вручную его заблокировать. Поэтому периодически нужно менять адрес картинки самому или рандомом PHP. Изображение следует либо загружать на свой сервер, либо

  1. не употреблять в URL слова "banner", "ad" и т.п.,
  2. не использовать типичные размеры рекламных блоков ("728 x 90", "160 x 600" и т.д.).
Удаление через фильтры раз и навсегда маловероятно, поскольку нужно хорошо разбираться в селекторах, что абсолютное большинство не будет делать (не сумеет) для одного из миллионов сайтов. К тому же, даже в теории увеличение списка фильтров приведёт к замедлению работы браузера.
в f t
наверх ↑

29 комментариев:

Анонимный
Наталья, подскажите, пожалуйста, можно ли вместо картинки выводить текстовое сообщение? (Что-то типа "у вас включен AdBlock, для его выключения следуйте инструкции здесь")
NMitra
window.addEventListener("load", function() {
var div = document.getElementById('adsenseNiz');
if (div.clientHeight == '0') {
theImg = document.createElement('div'); // создать новый элемент в JavaScript
theImg.innerHTML = 'У вас включен AdBlock, для его выключения следуйте инструкции здесь';
div.parentNode.insertBefore(theImg, div.previousSibling);
theImg.onclick = function() { // клик по картинке приведёт к переходу
document.location.href = 'партнёрская_ссылка';
}
}
}, true);
Анонимный
Спасибо за код!
Космо Мизраил Горыныч
Зашибись, эдблок теперь банит блоки подписки фидбёрнера! Не, ну это уже нарушение функционирования сайта!
И что интересно - в редакторе шаблонов тоже!
NMitra
Ага, и не скажешь им особо ничего, ведь они изменяют вид на устройстве пользователя.
Космо Мизраил Горыныч
Вчера решил проблему с подпиской следующим образом:
в фидбёрнере, в настройках рассылки, под хтмл-кодом формы подписки есть ещё и ссылка на подписку;
сократил эту ссылочку через tinyurl.com.
нарисовал кнопку на блоге и обернул её в вышеупомянутую ссылку.

Вот. Пока работает.
NMitra
А у меня ссылку http://feeds.feedburner.com/shpargalkablog вроде не режет. Может распространяется только на форму?
Космо Мизраил Горыныч
Наташ, это ссылка на фид только. Фидбёрнер в настройках фида также предлагает и ссылку конкретно на подписку - там только поле для емейла и стандартный английский текст.

Форму он явно и режет... Я особо не проверял и вбухал сразу с сокращателем.
К сожалению, стандартный блок подписки толком не изменишь - айдишник обязан быть вида FollowByEmailБла, а ссылку на подписку в форме не изменить по объективным причинам :D
NMitra
У меня стандартный вариант email подписки в конце статьи рядом с соц кнопками, вроде не режет. Или это изменённый Blogger-овский? Уже не помню, но всё равно от Feedburner
Космо Мизраил Горыныч
Максимально упрощённый фидбёрнеровский код.

Поэкспериментировал. Блокируется именно блоггеровский стандартный виджет. Если вставить блок HTML с формой от фидбёрнера (без изменений даже), то Adblock его не режет.
Во вкладке Дизайн в блоггере стандартный виджет не отображается после вставки - эдблок даже там его блокирует.
Вот.
NMitra
Наверно какой-то класс или id ему не нравятся.
Анонимный
Молодец
Анонимный
Подскажите, а как сделать, чтобы партнёрская ссылка открывалась в новой вкладке ?
NMitra
Вместо

document.location.href = 'партнёрская_ссылка';

window.open('партнёрская_ссылка');
Анонимный
Спасибо огромное ! Работает)
jkeks
Плагин для WordPress закрывающий контент от тех кто использует adblock
http://seo-today.ru/archives/46
Анонимный
Отличный код. Но показывает только тех кто с AdBlock.

А есть ли скрипт или счётчик, чтоб показывал у кого стоит Ghostery или что-то похожее что блокирует рекламу.
NMitra
У меня не стояло цели их вычислить, а цель была показывать рекламу людям с подобными расширениями. С установленным Ghostery реклама показана, а значит цель достигнута. Я не тестировала какие именно функции блокирует Ghostery, возможно ли увидеть их с помощью PHP. localStorage не блокирует, а значит, скорее всего, можно собирать статистику посещённых страниц.
Анонимный
С установленным Ghostery реклама не показывается, а статистика не собирается ни в ваш счётчик, ни на другой типа Яндекс.Метрики или Google Analytics. Т.е. получается что посетитель невидимка. Можете что-нибудь посоветовать в этом случае? А по статистике Ghostery популярнее AdBlock.
NMitra
У меня под статьёй баннер telderi прекрасно показывается. Разве нет?
Анонимный
У меня не получилось так настроить. Как делали? А счётчик фиксирует мои появления, идёт статистика?
NMitra
Я не собираю статистику таких посещений, мне она не нужна. Прямых рекламодателей, желающих арендовать баннер немного. А мне хватает статистических данных посетителей не блокирующих рекламу.

Скрипт посмотрите в исходном коде, сейчас это выглядит так (я периодически меняю):

if (document.querySelector("#adsenseNiz").clientHeight == "0") {
document.write('<a target="_blank" rel="nofollow" href="http://www.telderi.ru/?pid=e3f7b1"><img src="http://1.bp.blogspot.com/-FxtdNf6Eklo/VW1QYusSjKI/AAAAAAAAFS4/CATGD1dQQho/s1600/1.gif" alt="Купить-продать сайт" /></a>');
}
Алекс
Но получается у Вас при блокировки Телреди показывает а когда не стоит блокировщик Гугл реклама идет.
NMitra
Собственно, задача была, чтобы вместо контекстной рекламы что-то показывалось. Можно всплывающее окошко выводить или переадресовывать "халявщиков".
Анонимный
Есть 2 проблемы. 1) Поставил счётчик. Захожу на сайт с включенным АдБлок - в том файле - тишина (ничего нет). Или он считает через определенное время? 2) Поставил ваш скрипт, чтобы появлялась картинка с ссылкой на партнёрку, но она визуально не кликабельна, т.е. если кликнешь - переход будет, но через скрип. У вас же на сайте через выводится нормальной ссылкой. Почему? Как исправить?
NMitra
setTimeout(function(){
if (document.querySelector("#adsenseNiz").clientHeight == "0") {
document.querySelector("#adsenseNiz").innerHTML = '<a target="_blank" rel="nofollow" href="http://www.telderi.ru/?pid=e3f7b1"><img src="http://1.bp.blogspot.com/-FxtdNf6Eklo/VW1QYusSjKI/AAAAAAAAFS4/CATGD1dQQho/s1600/1.gif" alt="Купить-продать сайт" /></a>';
}
}, 2000);
Анонимный
отлично, передадим в адблок все ваши потуги
NMitra
Сколько внимания к моей скромной персоне :)
Владимир Гусев, adhocprog@gmail.com
Спасибо )