Kako spriječiti da blokatori oglasa blokiraju vaše analitičke podatke

TL; DR Uskoro dolazi usluga dataunlocker.com (pretplatite se), zajedno s prototipom otvorenog koda koji možete koristiti za Google Analytics ili Google Tag Manager (ažuriranje 2020.).

Članak iz 2017. godine u nastavku objašnjava korištene principe koji stoje iza ovih rješenja, kao i opisan je u readmeu rješenja.

Kada vaš proizvod tek započinje, svaki je korisnik važan. Kao i podaci o njihovoj interakciji s vašim proizvodom.

Ako ste pokušali koristiti rješenja za analitiku poput Google Analyticsa, možda ste se suočili s problemom kada su blokatori oglasa blokirali vašu zbirku analitike.

Prema PageFair-u, do 30% korisnika Interneta koristi blokatore oglasa u 2017. godini, a taj broj neprestano raste.

Ovaj će vam članak objasniti neke tehničke pristupe koje možete poduzeti kako biste spriječili da blokatori oglasa također blokiraju vašu analitiku. U ovom ćemo članku koristiti Google Analytics, iako bi se velik dio toga mogao primijeniti na druge alate za analitiku.

Neke načine možete zaobići blokatore oglasa

Gotovo svi blokatori oglasa rade na iste metode: onemogućuju neke zahtjeve preglednika http (s) za sadržaj na URL-ovima koji se podudaraju s određenom maskom iz njihove baze filtriranja.

Većina blokatora oglasa prema zadanim postavkama stavlja na crni popis www.google-analytics.com i blokira sve pokušaje JavaScript biblioteke Google Analytics da pošalje ili preuzme podatke sa svojih analitičkih poslužitelja.

Srećom za programere, blokatori oglasa prema zadanim postavkama ne blokiraju zahtjeve prema vlastitim imenima domena , jer to može naštetiti funkcionalnosti web aplikacije. Ova praznina otkriva način da se izbjegne blokiranje analitike sve dok vaša web usluga ne postane dovoljno poznata jer se neki njezini URL-ovi pojave u filtrima za blokiranje oglasa.

U stvari, čak i nakon što se neki URL-ovi pojave u bazi za filtriranje sadržaja, možete se početi igrati s alatima za blokiranje oglasa izmišljajući užasne stvari, poput mijenjanja analitičkih URL-ova po satu (iako je to izvan dosega ovog članka). Neke od ovih pristupa primjenjuju usluge poput DataUnlocker.com i Adtoniq, koje korisnicima nude iskustvo bez adblockera čak i kad su blokatori oglasa uključeni.

Objašnjenje na visokoj razini što ćemo učiniti

U ovom ćemo članku pretpostaviti da na strani poslužitelja nemamo ograničenja dopuštenja. Napisat ćemo demo rješenje (nekoliko redaka koda) za platformu Node.js. Jednom kad shvatite kako ovo funkcionira, trebali biste biti u mogućnosti prenijeti ovo rješenje na bilo koji programski jezik ili platformu.

Rješenje koje ću opisati prilično je minimalno, a ako ste iskusni web programer, možda će vam trebati samo nekoliko minuta da ga postavite na svoje mjesto.

Upotrijebit ćemo jednostavan pristup proksiranju bez potrebe za zarobljavanjem u Google Analytics protokol mjerenja. Ukratko, rješenje izgleda ovako:

  1. Prvo preuzmite samu JavaScript biblioteku Google Analytics i smjestite je na svoj poslužitelj.
  2. Zatim izmijenite kôd u preuzetoj biblioteci da biste ciljanog domaćina s www.google-analytics.com promijenili u vaše vlastito ime domene pomoću find-replace.
  3. Zamijenite vezu sa zadane skripte Google Analytics u svojoj bazi kodova na izmijenjenu.
  4. Stvorite krajnju točku proxyja za poslužitelje Google Analytics na stražnjem kraju. Ovdje je važan korak dodatno otkrivanje klijentove IP adrese i izričito je upisivanje u zahtjeve poslužiteljima Google Analyticsa radi očuvanja ispravnog otkrivanja lokacije.
  5. Testirajte rezultate. Gotov si!

Potpuni opis tehničke implementacije

Sav kôd i opisani koraci u nastavku dostupni su na GitHubu. Opis u nastavku objašnjava osnove metode, i naravno, predloženi pristup može se poboljšati kako bi bio još "antiblokirajući".

U Google Analyticsu započinjete stjecanjem jedinstvenog ID-a za praćenje za vaše vlasništvo (web usluga). U ovom ćemo članku za demonstraciju upotrijebiti UA-98253329–1 ID praćenja . Ne zaboravite zamijeniti kôd za praćenje svojim.

Google predlaže dodavanje ovog minificiranog koda na vaše web usluge kako bi omogućio analitiku:

 (function(i,s,o,g,r,a,m)function() (i[r].q=i[r].q,i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) )(window,document,'script', '//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-98253329-1', 'auto'); ga('send', 'pageview'); 

U nekoliko riječi, ovaj kôd učitava Google Analytics JavaScript knjižnicu ako prije nije bila učitana umetanjem oznake skripte u dokument. Ova knjižnica uključuje svu logiku prikupljanja analitike i to je jedino što trebamo nastaviti.

1. korak: preuzmite i zakrpite Googleovu analitičku biblioteku

Preuzmite skriptu izravno s //www.google-analytics.com/analytics.js , otvorite je bilo kojim uređivačem teksta i zamijenite sve pojave:

www.google-analytics.com

s upravo ovim nizom:

"+location.host+"/analytics

Krpanjem analitičke biblioteke na ovaj način započet će s upućivanjem zahtjeva lokalnim hostovima ( my.domain.com/analytics) krajnjim točkama umjesto www.google-analytics.com . Postavite ovu zakrpanu datoteku analytics.js na svoj poslužitelj nakon zamjene.

Korak 2: Zamijenite skriptu za analitiku zakrpanom

Izmijenimo kôd za ugrađivanje Google Analyticsa na taj način tako da koristi našu zakrpanu biblioteku umjesto zadane:

 (function(i,s,o,r)function()[]).push(arguments),i[r].l=1*new Date())(window,document,'script','ga'); ga('create', 'UA-98253329-1', 'auto'); ga('send', 'pageview');  

Imajte na umu da će ovdje preglednik tražiti zakrpljenu analitičku skriptu u korijenu dokumenta vašeg poslužitelja, u ovom slučaju my.domain.com/analytics.js. Provjerite jeste li skriptu stavili u korijen dokumenta ili ste promijenili put u gornjoj oznaci skripte. Rezultate možete provjeriti i pokretanjem testa na lokalnom poslužitelju (pogledajte readme kako pokrenuti primjer GitHub).

Trebali biste vidjeti nešto slično u razvojnim alatima preglednika:

U konačnici želimo da čin preuzimanja zakrpljenog analytics.js-a vrati uspješan odgovor - status 200 (u redu) ili 304 (nije izmijenjen). Ali u ovom trenutku, zahtjev na my.domain.com/analytics/collect trebao bi odgovoriti statusom 404, jer još nismo implementirali proxy poslužitelj.

Korak 3: Implementacija najjednostavnijeg proxy poslužitelja

Now we’re going to code a bit. Our goal is to implement the proxy server, which will transport our analytics requests from our server to the real Google Analytics server. We can do this in many ways, but as an example, let’s use Node.js and Express.js with the express-http-proxy package.

Gathering all the files in the example together (see GitHub), we should end up with the following JavaScript server code:

var express = require("express"), proxy = require("express-http-proxy"), app = express(); app.use(express.static(__dirname)); // serve static files from cwd function getIpFromReq (req)  // get the client's IP address var bareIP = ":" + ((req.connection.socket && req.connection.socket.remoteAddress)  // proxying requests from /analytics to www.google-analytics.com. app.use("/analytics", proxy("www.google-analytics.com", { proxyReqPathResolver: function (req) { return req.url + (req.url.indexOf("?") === -1 ? "?" : "&") + "uip=" + encodeURIComponent(getIpFromReq(req)); } })); app.listen(1280); console.log("Web application ready on //localhost:1280");

A few last lines here do the proxying. The only trick we do here is instead of just proxying, we detect and append the client’s IP address explicitly in a form of a measurement protocol URL parameter. This is required to collect precise location data, because all the requests to Google Analytic originally come from our server’s IP address, which remains constant.

After setting up our server proxy, we can check whether the request to our /collect endpoint now successfully returns a 200 OK HTTP status:

We can use, for example, an anonymous connection to verify that location is also picked up correctly.

This “proxy server” approach is a fast workaround for analytics that enables your services to avoid ad blockers. But this method relies on the browser side, and if the browser script for some reason does not send analytics information to our servers, we get nothing.

The last possible step if you want to implement a solid solution is to send analytics directly from the server by using server-side libraries available for different languages (NodeJS, Python, Ruby, PHP). This approach will definitely avoid any content blockers, as every request to analytics servers comes directly from our servers.

Again, the demo application is available on GitHub, feel free to test it! Let me know if you have any feedback or interesting experiences using this approach.

Thanks for reading!