Wykrywanie Adblocka

31 maja, 2009

Sam autor najpopularniejszego dodatku XXI wieku - Adblocka, stwierdził, że jego projekt przyczynił się do zrujnowania reklamy w sieci. W efekcie, prowadzenie serwisów opartych głównie o zyski z reklamy dla ich właścicieli stało się nie opłacalne, i/lub w konsekwencji doprowadziło do stosowania nieracjonalnych praktyk przez administratorów.

Skomplikowane próby ominięcia blokad, blokowanie całej strony dla przeglądarki Firefox czy najbardziej przyziemnie: ban w obrębie serwisu za wspomnienie o fakcie posiadanego dodatku, to kilka znanych mi interwencji Anty-Adblockowych.

Adblock meta-tag

A przecież można inaczej. Władimir Palant - twórca dodatku, choć jako koncepcje, przedstawił pomysł aby na każdej stronie posiadającej specjalny meta-tag, przeglądarka pytała użytkownika czy dla dobra serwisu nie chce zrezygnować z blokowania reklam.

  • Poniżej, ów meta-tag. Aktualnie to tylko propozycja:
  1. <meta name="adblock" content="ask" />

Rozwiązanie co prawda jest trochę kontrowersyjne, ale chyba przedstawia najlepsze z możliwych rozwiązań: dobrowolną zgodę użytkownika sieci na oglądanie reklam. Tylko w moim odczuciu, choć idea jest szczytna to realizacja już nie.

Tak jak dziś automatyczne szukamy iksa widząc niechcianego pop-upa, to w przypadku przemierzanych setek serwisów dziennie, ciągłe zastanawianie się nad tym czy temu portalowi pozwolić zarobić, czy też nie, zaowocuje niechęcią do jakiegokolwiek kompromisu.

Dlatego właściciele serwisów w tej kwestii, powinni się skupić raczej na stałych użytkownikach niż na chwilowych bywalcach. Co mam na myśli? Linia nad każdą reklamą zatytułowana "ten serwis zarabia z reklam, dziękujemy" oddziaływuje na decyzję gościa w lepszy sposób niż wizja bana za wspomnienie o posiadanym dodatku.

  • Wzorcowy przykład można znaleźć w serwisie Valhalla.pl. Oczywiście ujrzymy go z wyłączonym Adblockiem.

Możemy również skorzystać z możliwości jakie daje nam JavaScript. Mianowicie, chociaż Adblock reklamę zablokuję to dlaczego w jej miejsce nie wstawić bloku z prośbą o dodanie serwisu do zielonej listy? A może do momentu implementacji, wyżej omawianej funkcjonalności warto za-symulować pasek pytający o chęć odblokowania reklam?

Może lepiej grzecznie poprosić?

Adblock detect

Na początku, musimy się dowiedzieć czy użytkownik posiada włączonego Adblocka. Są na to - przynajmniej znane mi, dwa sposoby (opierają się o JavaScript).

  • Działają tylko w Firefoxie, z racji tego, że AdBlock jest tylko na... Firefoxa.
Metoda I

Pierwszy sposób jest banalnie prosty, tworzymy plik JavaScript na serwerze o nazwie która jest blokowana przez Adblocka (wystarczy poszukać w liście filtrów), dla przykładu to np: googleads-*, adrot.js czy webads.js, oraz następnie wczytać go tagiem <script>. Teraz drugim skryptem sprawdzamy czy umieszczona zmienna w tym skrypto-pliku została załadowana, jeżeli nie to najwidoczniej przeglądarka posiada włączonego Adblocka.

  • Nazwę trzeba dobrać ostrożnie. Każda subskrybucja ma inne filtry, więc musimy znaleźć taką wszech-występującą.
  • Nie trudno się domyślić, że ta metoda posiada kilka wad. Wystarczy, że dobierzemy nie właściwą nazwę, bądź ktoś przez przypadek usunie ów plik a rezultat będzie błędny.
  • No i jeszcze niepotrzebnie zwiększamy ilość wywołań do serwera.

Przykładowo zawartość pliku googleads-foo.js:

  1. // googleads-foo.js
  2. var adblock = true;

I nasz dokument:

  1. <head>
  2. <script type="text/javascript" src="./googleads-foo.js"></script>
  3. <script type="text/javascript">
  4.   if(typeof(adblock) == "undefined") {
  5.     document.write("You use Adblock!");
  6.   }
  7. </script>
  8. </head>

Na podobnej zasadzie funkcjonuje metoda przedstawiona na adblock.org, z tą różnicą, że tam jest pobierany obrazek graficzny o zakazanej nazwie.

Powyższą metodę, można zobaczyć w akcji tutaj.

Metoda II

Druga metoda działa w analogiczny sposób, jak powyżej lecz zamiast pobierać jakikolwiek plik, tworzy w dokumencie kilka warstw o określonej nazwie klasy. Jeżeli Adblock taką warstwe zablokuje, zablokowany obiekt otrzymuje styl -moz-binding, dzięki czemu możemy wykryć ingerencję dodatku.

  • Dla pewności sprawdzamy kilka nazw.
  • Dlatego prawdopodobieństwo, że wynik będzie nieprawidłowy jest znacznie mniejsze od metody I.
  1. <head>
  2. <script type="text/javascript">
  3.   var adblock = false;
  4.   var test = ["articleAd","googlead","adsense"];
  5.   var object = [], s = null;
  6.  
  7.   for(var i in test) {
  8.     document.write("<div class=\""+test[i]
  9.       + "\" style=\"position:absolute;"
  10.       + "left:-100px; top:-100px; "
  11.       + "visibility:hidden;\">Testing...</div>");
  12.     object[i] = document.getElementsByClassName(test[i]);
  13.  
  14.     if(object[i].length > 0) {
  15.       object[i] = object[i][0];
  16.       s = document.defaultView;
  17.       s = s.getComputedStyle(object[i],null);
  18.       s = s.getPropertyValue("-moz-binding");
  19.  
  20.       if(s != "none") {
  21.         adblock = true;
  22.         break;
  23.       }
  24.     }
  25.   }
  26.  
  27.   if(adblock) {
  28.     document.write("You use Adblock!");
  29.   }
  30. </script>
  31. </head>

Tutaj można zobaczyć jak wygląda powyższy kod na żywo.

Adblock Ask 0.0.1

Nie najlepsza, ale najprostsza forma skuszenia użytkownika do wyłączenia Adblocka.

Odtąd, możemy na wszelkie sposoby wpływać na użytkownika. Oczywiście, wszystko w granicy dobrego smaku. Dla przykładu, zaimplementowałem pasek informacyjny podobny do Idei Władimira Palanta (w Polsce Jego nazwisko nie brzmi zbyt okazale). Raz na sesję będzie monitował prośbę o wyłączenie Adblocka.

  • Jeżeli chcesz go użyć na swojej stronie, pamiętaj zmienić nazwę pliku. Gdyż pewnie niedługo adblockask.js trafi na listę filtrów Adblocka.

Zobaczyć można go tutaj , a pobrać stąd.

Komentarze do wpisu "Wykrywanie Adblocka":

1. ike napisał(a):
31 maja 2009, 22:07:11

Hm. Niestety (a może i stety) muszę powiedzieć, że oba testy stwierdziły, że nie używam Adblocka, ponieważ... używam także NoScripta.

Z drugiej strony kwestia „proszenia” na tyle na mnie poskutkowała, że ostatni apel Osnews.com spowodował, że moja whitelista urosła o ich adres ;-)

2. Jiobel napisał(a):
31 maja 2009, 22:13:55

No nie wiem. Z tego, co czytałem na blogu Palanta i dyskusji, którą wywołał swoją retoryką z twórcą NoFlasha (dobrze pamiętam?) wynikałoby, że sposób interakcji z użytkownikiem jaki przedstawił jest dobry. Ba, ja posunąłbym się w stwierdzeniu, że najlepszy, jaki może być. Bo sprawdzające się do tej pory filtry uzupełnione zostałyby przez mało irytujący button, który (jeśli byłby dobrze używany przez twórców stron) mógłby skłonić Internautów do oglądania reklam i tym samym – nabijania kasiorki.

Wykrywanie, czy czasem nie mam włączonego AdBlocka imho nie jest najszczęśliwszym wyjściem z tej sytuacji. Pamiętam, jak któraś z zagranicznych stron, którą lubiłem odwiedzać wprowadziła reklamy, które AB nie mógł usunąć (nie wiem, może też ja coś źle robiłem). Potem dotarłem do dyskusji, gdzie dowiedziałem się, jakie to złe zjawisko jest chowanie reklam, że robienie tego doprowadza serwis do upadłości. Ok, wyłączyłem rozszerzenie więc, by nie być tym złym. A może rzeczywiście nie jest tak źle po drugiej stronie barykady – pomyślałem sobie. No tak, dziś już nie odwiedzam tego serwisu a autorzy owego wydają mi się być pajacami.

Bo umiar z jednej i z drugiej strony jest chyba najważniejszy, mh?

Btw – http://screencast.com/t/wbF0T8FC ;-)

3. pecet napisał(a):
31 maja 2009, 22:14:25

Ten ask to zły pomysł, bo jak się pojawi, to będzie trzeba sforkować adblocka.

4. b4rtaz napisał(a):
31 maja 2009, 22:24:17

@Jiobel: sposób opisałem powyżej. Za to jakie nazwy klas sprawdzam, możesz znaleźć w pliku .js. Opierałem się, na subskrypcji EasyList. Albo używasz jakiś innych list, albo ten element wymaga doszlifowania.

5. sharnik napisał(a):
31 maja 2009, 22:25:59

b4rtaz:
> Sam autor najpopularniejszego dodatku XXI wieku – Adblocka, stwierdził, że jego projekt przyczynił się do zrujnowania reklamy w sieci. W efekcie, prowadzenie serwisów opartych głównie o zyski z reklamy dla ich właścicieli stało się nie opłacalne, i/lub w konsekwencji doprowadziło do stosowania nieracjonalnych praktyk przez administratorów.

No to sobie nieźle nawlewał :) Prawda jest taka, że w mainstreamowych serwisach użytkownicy z Adblockiem są w ilości błędu statystycznego i nikt się nimi nie przejmuje.

A, przy okazji, sprawdź sobie różnicę między ‘choć’, a ‘chodź’ ;)

6. b4rtaz napisał(a):
31 maja 2009, 22:33:33

@sharnik: tak było kiedyś. Jakiś czas temu, jeszcze 98% Internetu hulało na IE – i nikt się nie przejmował konkurencją, dziś jest już inaczej. Nie powiesz mi, że mainstremowe serwisy mają gdzieś pobierane 800 000 sztuk Adblocka na tydzień. Jeżeli jest to dziś dla nich małym problemem (na pewno nie marginalnym) to dla serwisów tematycznych, nastawionym na inny target już jest większym.

7. kayo napisał(a):
31 maja 2009, 22:48:12

Prezentacja działania zapytania u mnie nie zadziałala…

8. b4rtaz napisał(a):
31 maja 2009, 22:56:01

@kayo: która?

9. kayo napisał(a):
31 maja 2009, 22:56:31

ta http://b4rtaz.kicks-ass.pl/blog/adblockask.html

10. b4rtaz napisał(a):
31 maja 2009, 22:58:13

@kayo: Z jakiej subskrypcji korzystasz?

11. kayo napisał(a):
31 maja 2009, 22:58:56

bsi easylist dr. evil

12. kayo napisał(a):
31 maja 2009, 23:00:26

Dodam ze adblock nie blokuje na tej stronie żadnego elementu…

13. b4rtaz napisał(a):
31 maja 2009, 23:02:00

@kayo: spójrz teraz. Pamiętaj o CTRL+F5.

14. kayo napisał(a):
31 maja 2009, 23:02:57

brak zmian

15. b4rtaz napisał(a):
31 maja 2009, 23:09:43

@kayo: u mnie na Filter von Dr.Evil działa.

16. kayo napisał(a):
31 maja 2009, 23:13:45

nie jest to sprawa filtrów bowiem żaden z elementów nie jest przez adblocka zablokowany

17. westwoodczyk napisał(a):
31 maja 2009, 23:24:14

AdBlock nie jest tylko dla FF, istnieje takze wersja dla Safari, co prawda tylko na osx ale jest.

pozdr

18. kayo napisał(a):
31 maja 2009, 23:25:14

jak rowniez wersja dla konquerora i opery

19. rozie napisał(a):
01 czerwca 2009, 07:08:49

b4rtaz: Przeczytaj może ten wpis potem wyciągaj wnioski. Wspomniane 800k pobrań to także aktualizacje… No i nie zapominaj, że jeśli ktoś nie będzie chciał oglądać reklam, to go nie zmusisz. Paski też można wyłączyć...

20. BeteNoire napisał(a):
01 czerwca 2009, 08:49:25

Era reklam pytających o to czy mogą się wyświetlić.
To tak jak spam mailowy będący pytaniem o możliwość przysłania ‘oferty handlowej’ – czyli dalszego spamu.

Rozwiązanie z wykrywaniem adblocka widziałem pierwszy raz na którymś forum Ubuntu – wyskakujące raz na dobę powiadomienie „używasz adblocka a my mamy kasę z reklam”. Pierwsza moja myśl była: co za debilny pomysł – nadal tak uważam.

21. Breffa napisał(a):
01 czerwca 2009, 09:58:25

Ciekawe jak duzo jest reklam w ktorych liczy sie liczba odslon. Bo co z tego jak ja wylacze filtry, jezeli i tak nie planuje klikac w te reklamy. A jezeli sa serwisy, ktore tak pragna kasy z reklamy, to co za problem gdzies na boku zapodac nr konta? BTW. Wylaczenie na stale flasha w przegladarce, tez bedzie uwazane za blokowanie reklam? :D

22. Marcin Kosedowski napisał(a):
01 czerwca 2009, 10:57:46

Co się stało, że trzecia osoba dzisiaj odkryła, że AdBlocka można zablokować? I dlaczego u nikogo z was ten system nie działą?

@rozie: nie chce mi się wierzyć Topie. Ten plik można blokować np. przez Privoxy, same statystyki Google’a też można blokować. Dodatkowo są osoby niemające zainstalowanego Flasha (20% internautów!) ani JS-a (nie pamiętam ile, ale mniej).

23. sharnik napisał(a):
01 czerwca 2009, 11:02:16

@b4rtaz: Doprecyzuję – w polskich mainstreamowych serwisach użytkownicy z AdBlockiem stanowią błąd statystyczny. Agora badała u siebie, z tego co wiem.

Oczywiście, inna sytuacja jest na forach o Ubuntu. Ale to już nie mainstream ;)

24. like a geek napisał(a):
01 czerwca 2009, 17:53:38

A kysz, AdBlocku!

Czy w ostatnich dniach stało się coś, co spowodowało, że niektóre osoby nagle zauważyły, że AdBlocka można wykryć?

Przecież nie od dziś wiadomo, jak to zrobić. Inna sprawa, że wstawianie czegoś takiego na bloga jest co n[...]

25. b4rtaz napisał(a):
01 czerwca 2009, 21:39:41

@Marcin Kosedowski: nic wielkiego nie odkryłem. Skąd to oburzenie? W końcu sam w tekście wspomniałem, że już wcześniej sposobność na to inni przedstawili. Ja ukazałem tylko jak można to zastosować.
Dlaczego u siebie tego nie stosuje? Może dlatego, że nie ma reklam? :) Ale jeżeli miałbym współtworzyć serwis w którym przez Adblocka brakuje środków na utrzymanie serwera, z pewnością bym się posłużył pomysłem tutaj zaprezentowanym (ofc nie tym dostępnym do pobrania, ale ideą zaprezentowaną troszkę wyżej – może ktoś to przeczytał).

26. Marcin Kosedowski napisał(a):
01 czerwca 2009, 21:54:24

M.in. ja przeczytałem. Ale nie martw się, zawsze jest komentowany tylko ostatni akapit (np. ja teraz;).

27. kiedy celem jest brak celu napisał(a):
13 czerwca 2009, 13:02:13

UnAd - alternatywne blokowanie reklam w Firefoxie

Wyświetlanie reklam przez wszelkiej maści serwisy od zawsze jest sprawą kontrowersyjną. Z jednej strony autorzy serwisów zasłaniają się tym, że z czegoś muszą się utrzymać. Z drugiej, ja, jako użytkownik, nie zawszę mam ochotę ogląd[...]

28. Andrev napisał(a):
28 marca 2010, 22:10:49

A ja mam takie pytanie odnośnie Adblock Ask 0.0.1 choć poprzednich metod również. Dokładnie chodzi mi o wyłączanie adblocka tylko na wybranej stronie. Niestety skrypty tu podane nie widzą różnicy miedzy włączonym adblockiem a wyłączonym na danej stronie, w obu przypadkach komunikat się wyświetla, jak zmienić ten skrypt aby zauważał różnicę, kiedy adblock jest na mojej stronie wyłączony?

29. ares napisał(a):
01 kwietnia 2010, 09:35:27

tak jak napisałe Andrev jest i u mnie, przez to trochę skrypt jest bezużyteczny bo jeśli nawet człowiek się zdecyduje i wciągnie mnie na whiteliste to wkurzy go ze nadal mu narzekam

Dodaj komentarz: