Eliminacja spamowego ruchu w Google Analytics.

Do czego są przydatne raporty GA nie trzeba chyba nikogo przekonywać. Ostatnio narasta jednak problem zakłócania tych statystyk przez tzw. referal spam (ghost referal). Technika ta polega na sztucznym symulowaniu odwiedzin strony i tym samym podbiciu statystyk wejść GA Twojej witryny. Ruch taki charakteryzuje się bardzo słabym zaangażowaniem na stronie (najczęściej wejście tylko na stronę główną) przez co podbija bardzo mocno współczynnik odrzuceń.

Dokładnie nie będę wyjaśniał i podawał listy domen, które taki spam generują (zresztą zmienia się to dość dynamicznie). Zakładam, że skoro czytasz ten artykuł to trafiłeś tu nieprzypadkowo i wiesz o co chodzi.

 

1. Metody generowania ruchu spamowego

Ze względu na sposób symulacji odwiedzin możemy wyróżnić 2 metody: „skrytpową” i „przeglądarkową”

a. Metoda “skryptowa”.

Osoba atakująca wykorzystuje aplikację, która wywołuje metodę ze skryptu analytics.js (gs.js) + podaje w jej parametrach identyfikator śledzenia Twojej usługi (często w wyniku losowego wygenerowania) w celu wywołania zdarzenia odwiedzenia strony + odpowiednio ustawia nagłówki żądania.

Metoda bardzo szybka, nie wymagająca dużych zasobów serwera / przepustowości sieci. Metoda wykorzystywana do działań na szeroką / masową skalę.

Jeżeli ktoś chciałby się pobawić taką metodą to może pospamować własną witrynę za pomocą poniższego narzędzia (narzędzie jest prymitywne, bez obsługi błędów i wodotrysków, napisałem na szybko – tylko do celów demonstracyjnych). Kod źródłowy dostępny jest w zakładkach html / js / css.

 

b. Metoda „przeglądarkowa”.

Osoba atakująca wykorzystuje oprogramowanie (np. UbotStudio), które symuluje działanie przeglądarki. Jest wykonywane żądanie pobrania naszej strony i wykonywanie są przez przeglądarkę osadzone skrypty (a więc i kod GA), tak jak normalnie się to wykonuje przy odwiedzinach realnego użytkownika. Metoda znacznie wolniejsza od tej z pkt a. Wymaga sporych zasobów serwera i generuje spore obciążenie łącza. Z tego powodu stosowana jest rzadko i nie na masową skalę. Po co stosuje się spam referal? Jeżeli nie wiadomo o co chodzi to chodzi o pieniądze. W tym wypadku jednak nie Twoje ;). Zainteresowanych tematem zachęcam do przeszukania internetu. Istnieje też możliwość, że po wejściu na stronę która generuje nam sztuczny ruch, podjęta będzie próba instalacji złośliwego kodu. Nie spotkałem się z tym ale prewencyjnie strony te przeglądam w sandboxie (linux + przeglądarka na VirtualBox’ie) Wszystko co opisałem powyżej i poniżej dotyczy również ruchu spamowego pochodzącego z “symulowanych” organicznych wyników wyszukiwań. Na raportach pojawiają się wejścia z organika ze słowami kluczowymi na które nasza witryna nie rankuje i nie ma jej w realnych wynikach wyszukiwania.

 

2. Eliminacja niepożądanego ruchu skryptowego.

W tym przypadku nie ma żądania pobrania naszej strony (w logach serwera pustki) a więc nie działa blokowanie na poziomie serwera (reguły w htaccess lub w skryptach php).  Poniżej opisane są trzy metody obrony przed tym ruchem.

a. Blokowanie obcego hosta.

Dodajemy filtr na nazwę hosta – wszystkie wywołania GA, które będą wywoływane z innego hosta będą odrzucane (sposób konfiguracji opisano poniżej). Filtr taki jest przez speców od analyticsa zalecany jako podstawowy i powinnien być zdefinowany zawsze. Osobiście do tego zalecenia się nie stosuję, ponieważ brak tego filtru dwa razy umożliwił mi wykrycie skopiowania kodu stron. Skopiowano i zaczęto modyfikować kod tylko zrobiono to tak amatorsko, że pozostawiono kod GA łącznie z orgynalnym identyfikatorem usługi – szybko wyszło na odpowiednim raporcie :). Wadą tego rozwiązania jest to, że część spamowego ruchu w nagłówku http podaje już prawidłową nazwę hosta. Skonfigurowanie tylko tego filtra nie rozwiązuje w 100% problemu.

Konfigurowanie filtru GA blokującego obcego hosta:

W GA przechodzimy na zakładkę Administracja. W kolumnie widok wybieramy opcję Filtry. Dodajemy nowy filtr (przycisk). Wykonujemy 5 czynności zgodnie z poniższym zrzutem ekranu.

 

1

b. Blokowanie listy domen.

Utworzenie filtra w GA bazującego na odrzucaniu ruchu pochodzącego ze spamowych domen. Sposób przykładowej konfiguracji opisano poniżej. Wadą tego rozwiązania jest to że musimy ciągle “grzebać” przy konfiguracji filtra, dodając nowe domeny. Już lepiej, ale nie idealne.Jesteśmy krok za spamerami – działania obronne post faktum.

Konfiguracja filtru GA blokującego domeny z listy:

W GA przechodzimy na zakładkę Administracja. W kolumnie widok wybieramy opcję Filtry. Dodajemy nowy filtr (przycisk). Wykonujemy 6 czynności zgodnie z poniższym zrzutem ekranu. W kroku 5 konieczne jest wprowadzenie wyrażenia regularnego. Tworzymy go korzystając z następującego wzorca:

(

(([^.]+.)*domena1.com) |
(([^.]+.)*domena2.com) |
...
(([^.]+.)*domenaN.com)
)

Zamiast domenaX.com wpisujemy domenę z której pochodzi spamowy ruch. W wyrażeniach regularnych znak kropki “.” jest operatorem dopasowania i aby traktowany był jak zwykła kropka a nie operator należy poprzedzić go ukośnikiem “”. Nie wprowadzamy subdomen, www itp – ten wzorzec to uwzględnia. Możemy dodawać kolejne pozycje, kopiując wiersz. Należy pamiętać o znaku “|” (operator logiczny lub) na końcu każdej lini (oprócz ostatniej!). Bardzo ważne są też nawiasy “(“, “)” występujące w pierwszej i ostatniej lini. Przed przekopiowaniem naszego wyrażenia regularnego do definicji filtru dobrze jest pozbyć się białych znaków – cały zapis w jednej lini.

Do testowania wyrażeń regularnym polecam regex101.com

Na podstawie listy zamieszczonej we wpisie Macieja Lewińskiego stworzyłem taką regułę:

 

((([^.]+.)*semalt.com) | (([^.]+.)*darodar.com) | (([^.]+.)*econom.co) | (([^.]+.)*iloveitaly.com) | (([^.]+.)*7makemoneyonline.com) | (([^.]+.)*saveyoutubevideo.com) | (([^.]+.)*cclicking.com) | (([^.]+.)*buttons-for-website.com) | (([^.]+.)*tasteidea.com) | (([^.]+.)*kambasoft.com))

 

2

c. Obrona ofensywna.

Proponuję dodanie w GA niestandardowego wymiaru ( więcej ) i przekazywanie jego wartości w skrypcie GA oraz konfiguracja filtru z warunkami na odrzucanie ruchu jeżeli ten wymiar nie jest przekazywany lub ma nieprawidłową wartość. Sposób konfiguracji opisano poniżej

Bingo – to jest to :) Jesteśmy krok przed spamerami. Nie trzeba mozolnie dodawać kolejnych domen do filtra (jak w rozwiązaniu z pkt b). Oczywiście łatwo jest obejść takie zabezpieczenie ale osoba atakująca musi najpierw zanalizować nasz kod GA i dostosować oprogramowanie pod obsługę naszej domeny – raczej nierealne jeżeli jego celem jest skala masowa. Jeżeli nawet to zrobi to zmieniamy wymaganą wartość wymiaru w filtrze i zabawa zaczyna się od nowa.

Zalecana metoda obrony to oczywiście ta z pkt c. Jednak nic nie stoi na przeszkodzie aby stosować wszystkie jednocześnie.

Konfiguracja filtru GA – obrona defensywna przed ruchem skryptowym.

Zakładanie niestandardowego wymiaru w GA

  • Przechodzimy na zakładkę Administracja.
  • W kolumnie usługa wybieramy opcję Niestandardowe definicje -> Niestandardowe wymiary.
  • Dodajemy nowy niestandardowy wymiar (przycisk).
  • Wykonujemy 4 czynności zgodnie z poniższym zrzutem ekranu. Nazwa wymiaru – dowolna ale warto ją zapamiętać aby łatwiej było ją odszukać podczas konfigurowania raportów.
definiowanie niestandardowego wymiaru

definiowanie niestandardowego wymiaru

  • Po naciśnięciu utwórz kopiujemy kod JavaScript.4
  • Uwaga: nazwy niestandardowego wymiaru nie należy zmieniać. U mnie jest to ‘dimension2’ ponieważ miałem już wcześniej zdefiniowany jeden wymiar. Jeżeli wcześniej nie tworzyłeś wymiaru to nazwa będzie ‘dimension1’.
  • Skopiowany kod doklejamy do naszego kodu śledzenia na stronie. Zmieniamy SOME_DIMENSION_VALUE na dowolny ciąg znaków (w tym przykładzie zmieniłem na “to jest test”). W którym miejscu umieścić i jak to poglądowo wygląda:

<script>

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},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-XXXXXXX-Y', 'auto');   //Uwaga: nalezy wprowadzic wlasny identyfikator UA !
   var dimensionValue = 'to jest test';

ga('set', 'dimension2', dimensionValue);
</table>
ga('send', 'pageview');

</script>

 

Konfiguracja filtru z warunkami na odrzucanie ruchu jeżeli wymiar nie jest przekazywany lub ma nieprawidłową wartość.

  • W GA przechodzimy na zakładkę Administracja.
  • W kolumnie widok wybieramy opcję Filtry.
  • Dodajemy nowy filtr (przycisk).
  • Wykonujemy 6 czynności zgodnie z poniższym zrzutem ekranu. W kroku 4 z listy rozwijanej wybieramy wcześniej zdefiniowany niestandardowy wymiar (jest na końcu listy). W kroku 5 wpisujemy spodziewaną wartość jaką przekaże wywołanie skryptu GA na naszej stronie (w tym przykładzie wpisano “to jest test” – wpisujemy tą samą wartość co w skrypcie GA).

 

ga definiowanie filtru niestandardowego wymiaru

ga definiowanie filtru niestandardowego wymiaru

 

3. Eliminacja niepożądanego ruchu przeglądarkowego.

Niestety żadne z rozwiązań podanych w poprzednim punkcie nie chroni nas przed ruchem spamowym wygenerowanym za pomocą metody przeglądarkowej – ruch będzie rejestrowany w GA. Z tego powodu należy rozważyć ten przypadek osobno. Rozwiązania są analogiczne do rozwiązań z pkt 2 tylko oparte o reguły w pliku .htaccess.

a. Blokowanie listy domen.

Oparta jest na takiej samej idei jak filtr w pkt 2.b. W związku z tym że w tym przypadku występuje żądanie pobrania strony, możemy taki filtr założyć w plik .htaccess – odrzucamy żądania o zasoby jeżeli pochodzą z listy domen generujących spam.

Przykład definicji reguły blokującej żądania, jeżeli żądającym jest domena / subdomena semalt

RewriteCond %{HTTP_REFERER} ^https?://([^.]+.)*semalt.com [NC]
RewriteRule ^.* [F,L] #zwróć błąd 403 (zabroniony dostęp)

Regułę tę powtarzamy (z modyfikacją nazwy domeny) dla każdej domeny, która chcemy zablokować.

Istnieje możliwość, że żądanie będzie pochodzić z domeny A (nie będącej na naszej liście domen spamowych a nawet przedstawić się jako domena zaufana / znana) natomiast wywołanie zdarzenia GA z domeny B (prosta manipulacja nagłówkami). W takiej sytuacji nasze reguły w .htaccess będą bezużyteczne.

Wada tego rozwiązania jest analogiczna jak rozwiązania z pkt 2b.

b. Obrona defensywna

Na jednym z forów zaproponowałem rozwiązanie wykrywania generowania przeglądarkowego ruchu spamowego za pomocą sprawdzania sumy kontrolnej (CRC) obrazka z naszej strony. Pomysł ten opiera się na założeniu, że spamer chcąc nie dociążać serwera i łącza będzie tylko generował żądania pobrania strony (kod html) i skryptów js. Obrazki i css nie są mu potrzebne (nie ma potrzeby renderowania strony). W jednym przypadku, który kiedyś analizowałem tak właśnie było (brak żądań o zasoby css i obrazy).

Po dokładnym przemyśleniu sprawy zdecydowałem się jednak na inne rozwiązanie. Analiza sumy kontrolnej obrazka jest problematyczna z powodu braku możliwości pobrania jego reprezentacji bajtowej ze struktury DOM. Da się to obejść ale nie jest to proste i wymagałoby modyfikacji kodu strony co prowadzi do rozwiązania nie uniwersalnego.
Zdecydowałem się na wykorzystanie właściwości naturalWidth i naturalHeigh obiektu img. Właściwości te zwracają oryginalne (nie przesłonięte przez style css) szerokość i wysokość obrazka. Jeżeli obraz nie jest ściągnięty to obydwa wymiary mają wartość 1. Wystarczy zatem sprawdzić z poziomu JavaScript’u czy wartości są > 1 Małym minusem tej metody jest niekompatybilność IE8 i wersji wcześniejszych tej przeglądarki – zwracane są wymiary nie oryginalne ale te wynikające ze styli css. Jeżeli się zastanowić to nie jest to wadą, ponieważ musi zostać wykonane parsowanie strony uwzględniające style css.

Konfiguracja tagu GTM – obrona defensywna przed ruchem przeglądarkowym.

Rozwiązanie oparłem o GTM (Google Tag Manager) w wersji 2. Nie będę tutaj opisywał podstawowych zasad obsługi tego narzędzia – to temat na osobny artykuł. Niezbędne informacje można znaleźć w internecie.

Tworzenie i konfiguracja czynnika uruchamiającego.

Przed utworzeniem tagu niestandardowego musimy zdefiniować czynnik uruchamiający nasz tag. Najprościej mówiąc jest to reguła / zdarzenie warunkujące uruchomienie tagu. W tym przypadku takim zdarzeniem będzie załadowanie strony przez przeglądarkę. W tym celu w menu “Czynniki uruchamiające” klikamy przycisk “Nowe” i wykonujemy kolejne kroki kreatora:

Krok 1

6

  1. Podajemy nazwę (dowolna) naszego czynnika.
  2. Wybieramy zdarzenie niestandardowe.
  3. Naciskamy dalej i przechodzimy do kroku 2.

Krok 2

7

  1. W pole nazwa zdarzenia wpisujemy gtm.dom (ogólnie jest to zdarzenie wywoływane w momencie wczytania strony).
  2. Zapisujemy regułę.
Tworzenie i konfiguracja tagu niestandardowego.

W tagu będzie osadzony kod js odpowiedzialny za warunkowe (jeżeli wczytano obrazek) wywołanie zdarzenia informującego GA o odwiedzeniu strony. W celu utworzenia naszego tagu, w menu “Tagi” klikamy przycisk “Nowy” i wykonujemy kolejne kroki kreatora:

Krok 1

  1. Podajemy nazwę (dowolna) naszego tagu
  2. Wybieramy „Niestandardowy tag”.
  3. Naciskamy dalej i przechodzimy do kroku 2.

Krok 2

9

  1. W polu HTML wpisujemy poniższy kod javascript:
    //standardowy kody GA
    <script>
     (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
           (i[r].q=i[r].q||[]).push(arguments)},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-XXXXXXX-Y', 'auto');  //Uwaga: nalezy wprowadzic wlasny identyfikator UA !
    </script>
    
    //sprawdzenie wczytania obrazka i wywołanie GA
    <script>
        var img = document.getElementById(‘logo’); //Uwaga: zamiast logo nalezy podać własny identyfikator!
        if (img.naturalWidth > 1 && img.naturalHeight > 1)
            {
                ga('send', 'pageview');
            }
    </script>

    Uwagi:

    1. Jak widać pierwszy skrypt jest standardowym kodem śledzenia GA. Z tego powodu jeżeli chcesz wykorzystać to rozwiązanie to należy wyłączyć tag Analytics’ów (jeżeli go zdefiniowałeś w GTM) lub usunąć skrypty GA z witryny (aby uniknąć duplikacji wywołań). Jeżeli miałeś weryfikacje witryny w Google Webmaster Tools za pomocą GA należy sprawdzić czy nie utraciłeś tej weryfikacji. Jeżeli tak, to należy ponownie przeprowadzić weryfikację z wykorzystaniem GTM zamiast GA (pojawia się taka opcja po wykryciu kodu GTM na stronie).
    2. Zamiast UA-XXXXXX-Y wprowadź swój identyfikator usługi GA.
    3. W kodzie strony, zamiast “logo” wpisz Twój identyfikator tagu img z obrazkiem:
      <img id=’twoj-identyfikator’ src=’....’ />)

      Jeżeli identyfikatora nie ma to należy go utworzyć.

  2. Naciskamy dalej i przechodzimy do kolejnego kroku.

Krok 3

  1. W sekcji warunki uruchamiania naciskamy “Więcej”.
  2. Pojawia się okienko gdzie mamy listę niestandardowych czynników uruchamiania. Wybieramy wcześniej utworzony przez nas czynnik “Strona załadowana”.
  3. Naciskamy “Zapisz tag”.

10

Po wykonaniu powyższych czynności pozostaje nam tylko przetestować nasze rozwiązanie używając do tego odpowiedniej opcji w GTM (bardzo fajne rozwiązanie) oraz obserwując wyniki “online” w GA. Należy pamiętać, że wartości wymiarów niestandardowych są aktualizowane po pewnym czasie. Wymiary niestandardowe dostępne są praktycznie w każdym raporcie GA

ga-wybor-niestandardowego-wymiaru

Jeżeli wyniki testu są pozytywne to publikujemy kontener.

4. Podsumowanie.

Miała to być krótka notatka, która w miarę pisania trochę się rozrosła dlatego podsumowanie będzie krótkie i treściwe :).

Przedstawiłem różne podejścia do rozwiązanie problemu spamowego ruchu. Jaka opcja jest najlepsza? Ja stosuję syntezę rozwiązania z pkt 2c i 3b aby eliminować zarówno niepożądany ruch skryptowy jak i przeglądarkowy. Nie ma konieczności aktualizowania filtrów / reguł htaccess o kolejne domeny. Wszystko jest w jednym miejscu a nie część na serwerze a część w GA. Raz poświęci się trochę więcej czasu i zapomina się o problemie :).

Synteza polega na tym, że kod ustawiający wartość niestandardowego wymiaru umieściłem w niestandardowym tagu (zamiast w w skrypcie GA).

//standardowy kody GA
<script>
 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
       (i[r].q=i[r].q||[]).push(arguments)},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-XXXXXXX-Y', 'auto');  //Uwaga: nalezy wprowadzic wlasny identyfikator UA !
</script>

//sprawdzenie wczytania obrazka i wywołanie GA
<script>
    var img = document.getElementById(‘logo’); //Uwaga: zamiast logo nalezy podać własny identyfikator!
    if (img.naturalWidth > 1 && img.naturalHeight > 1)
        {
            ga('set', 'dimension2', ‘to jest test’);
            ga('send', 'pageview');
        }
</script>

Uwagi:

  • Nazwy niestandardowego wymiaru nie należy zmieniać. U mnie jest to ‘dimension2’ ponieważ miałem już wcześniej zdefiniowany jeden wymiar. Jeżeli wcześniej nie tworzyłeś wymiaru to nazwa będzie ‘dimension1’.
  • Wartość niestandardowego wymiaru (tutaj ‘to jest test’) musi być zgodna z wartością oczekiwaną filtru zdefiniowanego w GA.

Rozsądnym podejściem jest wybranie takiego obrazka (w moim przypadku jest to obrazek z logo), który występuje na wszystkich stronach witryny. Dzięki temu tworzymy tylko jeden niestandardowy tag GTM.

Oczywiście zamiast GTM można to rozwiązanie wykonać też za pomocą skryptów GA – kod odpowiedzialny za sprawdzenie wczytania obrazka należy umieścić w zdarzeniu widnow.onload na każdej stronie :

//sprawdzenie wczytania obrazka i wywołanie GA
<script>
window.onload = function{
    var img = document.getElementById(‘logo’); //Uwaga: zamiast logo nalezy podać własny identyfikator!
    if (img.naturalWidth > 1 && img.naturalHeight > 1)
        {
            ga('set', 'dimension2', ‘to jest test’);
            ga('send', 'pageview');
        }
}
</script>

Uwagi do tego rozwiązania:

  • Pozostawiamy na stronie oryginalny kod śledzenia GA.
  • Aby uniknąć duplikacji wywołań zdarzenia odwiedzin (pageview) należy w tym przypadku usunąć z oryginalnego kodu śledzenia linijkę: ga(‚send’, ‚pageview’);

Rozwiązanie to testuję prawie od trzech tygodni – na razie nic się nie „prześliznęło” poza referalem „offers.bycontext.com”, który nie jest typowym ruchem spamowym (jest to wirus, który podmienia referala podczas przeglądania internetu przez realnego użytkownika).

Do testowania skuteczności obrony napisałem prosty tester. Kod źródłowy dostępny jest w zakładkach html / js / css. Niestety nie ma w nim funkcjonalności związanej ze sprawdzaniem istnienia obrazu.

 

 

Mhhhh… podsumowanie też się rozrosło :).

5. Bonus.

Rozwiązanie z pkt 3b ma jeszcze inne ciekawe zastosowanie. Mianowicie jeżeli na stronę wstawimy specjalny, dedykowany obrazek o nazwie (np advert.jpg) znajdującej się na listach nazw blokowanych przez AdBlocki to …. mamy idealne rozwiązanie na wykrywanie użytkowników, którzy mają zainstalowane blokery reklam. Wystarczy w kodzie naszego tagu dodatkowo umieścić wywołanie zdarzenia GA informujące o wystąpieniu blokady i w raporcie zdarzeń mamy bardzo przydatne dane :). Można tez dodać kod wyświetlający okienko z prośbą o odblokowanie. Trzy pieczenie przy jednym ogniu :).

22 replies
  1. Łukasz Trześniewski
    Łukasz Trześniewski http://lukaszt.pl

    Sprawdzałeś może jak to się ma do przekłamań?
    Próbowałem dodawać masowo domeny w jednym filtrze i pojawiały się błędy w zliczaniu również organica choć nie powinno to mieć wpływu.
    Dla widoku, który miał dodane filtry osobno dla każdej domeny było ok.

    Odpowiedz
    • Tomasz Brzozowski
      Tomasz Brzozowski

      Domyślam się że mówisz o filtrze na referale w GA. Reguła regexp, którą podałem w pkt 2.b działała u mnie prawidłowo. Ale fakt nie testowałem tego zbyt długo – od razu wdrożyłem rozwiązanie bardziej skomplikowane. Do wyrażeń regularnych trzeba podchodzić ostrożnie – mały błąd i możesz wyciąć sporo rejestracji ruchu.

      Odpowiedz
    • Tomasz Brzozowski
      Tomasz Brzozowski

      Dziwne, u mnie działa :) Skrypt jest dostosowany do nowej wersji GA (UA). Może masz jakiś rozszerzenie przeglądarki blokującego GA (np Ghostery) lub wykonania skryptów lub jakiś filtr w GA blokujący

      Odpowiedz
  2. Marek Płatek
    Marek Płatek http://fuburek.com

    Testujemy dwa różne rozwiązania od marca i nadal nie jest idealnie…
    Motyw z obrazkiem bardzo ciekawy, brakowało mi prostego patentu na mierzenie AdBlocka w kilku projektach, a z tego co widzę, to można ten plik wstawić na jakąkolwiek stronę. Genialne w swej prostocie.

    Odpowiedz
  3. Wojtek
    Wojtek http://hifistore.pl

    Po sprawdzeniu wklejonego przez Ciebie wzorca filtra tj.:

    ((([^.]+.)*semalt.com) | (([^.]+.)*darodar.com) | (([^.]+.)*econom.co) | (([^.]+.)*iloveitaly.com) | (([^.]+.)*7makemoneyonline.com) | (([^.]+.)*saveyoutubevideo.com) | (([^.]+.)*cclicking.com) | (([^.]+.)*buttons-for-website.com) | (([^.]+.)*tasteidea.com) | (([^.]+.)*kambasoft.com))

    po pierwsze mam komunikat że jest za długi. Ok skróciłem, to z kolei mam komunikat:

    Ten filtr nie zmieniłby danych: konfiguracja filtra jest nieprawidłowa lub zestaw próbnych danych jest zbyt mały.

    Dodatkowo w tekście piszesz:

    Zamiast domenaX.com wpisujemy domenę z której pochodzi spamowy ruch. W wyrażeniach regularnych znak kropki “.” jest operatorem dopasowania i aby traktowany był jak zwykła kropka a nie operator należy poprzedzić go ukośnikiem “”. <- jaki ukośnikiem 😉

    Sądziłem, że to rozwiąże problem. Czy mam ufać komunikatowi GA czy odczekać dobę i się przekonać? Dodatkowo dodaję pozostałe syfiaste adresy:

    (
    (([^.]+.)*semalt.com) |
    (([^.]+.)*darodar.com) |
    (([^.]+.)*econom.co) |
    (([^.]+.)*iloveitaly.com) |
    (([^.]+.)*7makemoneyonline.com) |
    (([^.]+.)*saveyoutubevideo.com) |
    (([^.]+.)*cclicking.com) |
    (([^.]+.)*buttons-for-website.com) |
    (([^.]+.)*tasteidea.com) |
    (([^.]+.)*kambasoft.com) |
    (([^.]+.)*social-buttons.com) |
    (([^.]+.)*editors.choice61472036.hulfingtonpost.com) |
    (([^.]+.)*generalporn.org) |
    (([^.]+.)*Get-Free-Traffic-Now.com) |
    (([^.]+.)*googlsucks.com) |
    (([^.]+.)*hulfingtonpost.com |
    (([^.]+.)*depositfiles-porn.ga |
    (([^.]+.)*pornhub-forum.ga |
    (([^.]+.)*rapidgator-porn.ga |
    (([^.]+.)*buy-cheap-online.info |
    (([^.]+.)*free-share-buttons.com |
    (([^.]+.)*pornhub-forum.uni.me
    )

    Oczywiście trzeba to podzielić. W jeden filtr nie wejdzie.

    Odpowiedz
    • Tomasz Brzozowski
      Tomasz Brzozowski

      Co do ukośnika – to napisałem że powinien być a w kodzie go nie umieściłem :) powinno być np: ([^.]+.)*semalt.com. Ale z tego co widzę to GA sobie radzi też bez ukośnika. Co do komunikatu „Ten filtr nie zmieniłby danych: konfiguracja filtra jest nieprawidłowa lub zestaw próbnych danych jest zbyt mały.” to niestety jeżeli masz mało ruchu z tych domen to weryfikacja filtru zawsze będzie zwracała taki komunikat. Proponuję weryfikować na zasadzie odwrotności tzn zamiast „wyklucz” ustawić „uwzględnij” (bez zmiany wyrażenia regularnego / warunków). Powinna się pokazać tabelka w której po lewej stronie są wyniki bez filtru a po prawej z filtrem. Dla „uwzględnij” po lewej stronie powinny być ścieżki odesłania a po prawej nic. Jeżeli stwierdzasz że jest ok to pozestawiasz na „wyklucz” i zapisujesz.

      Odpowiedz
  4. Tomasz Ciepłucha
    Tomasz Ciepłucha

    Jeśli zakres dla wymiaru niestandardowego zdefiniujesz na „hit” to korzystając z Twojej metody można się pozbawić wszystkich danych dotyczących zdarzeń oraz danych e-commerce przy których wysyłaniu nie jest ustawiony wymiar niestandardowy.

    Odpowiedz
    • Tomasz Brzozowski
      Tomasz Brzozowski

      tak to prawda, nie wspomniałem o tym w artykule. Należy niestandardowy wymiar przekazać we wszystkich wywołaniach zdarzeń (ale to chyba jest zrozumiałe, że tak powinno być) lub zmienić hit na sesje i tylko raz przekazać. Pominąłem ten wątek bo artykuł i tak już wszedł spory. Przyjąłem, że jeżeli ktoś siedzi głębiej w SEM to poradzi sobie z tym zagadnieniem.

      Odpowiedz
      • Maciej Kotow
        Maciej Kotow

        Witam,
        startuje w tym temacie. Zaraz wdrażamy rozszerzone ecommerce i inne wodotryski. Bardzo bym Cię prosił Tomku lub Tomku :) o uwidocznienie zagrożeń związanych z tym rozwiązaniem lub abyś podał tematy które powinienem pogłębić aby ustrzeć się zafałszowania lub utraty danych. Czy znajdę je w pomocy google?

        Jeśli zmienię Hit na Sesję czy potrzebuję cokolwiek zmieniać w zdarzeniach lub danych ecommercowych ?

        Pozdrawiam
        Gd

        Odpowiedz
        • Tomasz Brzozowski
          Tomasz Brzozowski

          Jeżeli korzystasz z rozwiązania bazującego na GTM to zalecam dokładne przetestowanie przed włączeniem filtra w GA (odcięcie ruchu). Na stronach, które mają osadzone jakieś widzety (np slajdery czy inne które przejmują zdarzenie onload i niepoprawnie wychodzą z obsługi zdarzenia) zdarza się że tagi GTM działają nie tak jak powinny (nie uruchamiają się). Platforma GTM ma w miarę sensowną opcję testowania przed opublikowaniem. T
          Tak jak wspomniałem jeżeli masz jakieś zdarzenia (kliknięcie w zdjęcie, przewinięcie, wysłanie formularza) to musisz we wszystkich zdarzeniach przekazać wartość wymiary (jeżeli go nie będzie, zdarzenie w GA zostanie odrzucone). Co do hit to przemyślałem i jeżeli przekazujesz wymiar to nie powinno być żadnych problemów. Zmieniasz na sesję tylko w tych zdarzeniach gdzie zależy Ci na zarejestrowaniu wystąpienia czegoś tylko raz na każdą sesję użytkownika.
          Nie ma pomocy google, która byłaby w miarę szczegółowa (raczej ogólniki) do wszystkiego musisz dojść sam testując.
          Kilka dni temu pojawiła się zapowiedź że google przedstawi przewodnik jak taki ruch wyeliminować . Być może wprowadzą jakieś opcje w GA, które to ułatwią.
          https://plus.google.com/+GoogleAnalytics/posts/3985ij5QeCa

          Odpowiedz
    • Tomasz Brzozowski
      Tomasz Brzozowski

      Zalecam najpierw potestować rozwiązanie na „luzie” tzn. nie włączać filtrów GA. Parę dni to rozwiązanie powinno pochodzić bez obcinania ruchu abyś się upewnił czy nie obcina realnego ruchu. W tym celu na dowolnym raporcie (np Pozyskiwanie->Cały ruch->Źródło/Medium) włączasz podgląd dodatkowego niestandardowego wymiaru (jak to zrobić przedstawia ostatni obrazek w pkt 4). Za słabo podkreśliłem w artykule: NAJPIERW TESTY potem odcinanie.

      Odpowiedz
    • pozyczkabez
      pozyczkabez http://www.blog.pozyczkabez.pl

      Niestety nie działa to, wstawione i pojawia się komunikat że : za mało danych lub błędnie zdefiniowany filtr

      Odpowiedz
        • pozyczkabez
          pozyczkabez http://www.blog.pozyczkabez.pl

          No właśnie, wklepałem filtry i nie działają, nadal spam jest. Wtedy nie kliknąłem sprawdź filtr tylko zapisałem.

          Odpowiedz
          • Tomasz Brzozowski
            Tomasz Brzozowski

            Widocznie masz błąd składniowy lub masz ruch z referali które nie są uwzględnione w filtrze. Rozwiązania bazujące na samych filtrach i htacces nie są skuteczne (podałem je jako jedno z możliwych rozwiazań). Ruch spamowy rozwiązuje niemal w 100% rozwiązanie wykorzystujące GTM. Jeżeli jednak bardzo chcesz korzystać z filtru w GA to polecam testować założone filtry za pomocą widzetu, który stworzyłem w pkt 1.a.
            1. wpisujesz swój identyfikator GA
            2. wpisujesz testową wartość np http://testuje.pl i naciskasz „Wywołaj GA”
            3. wchodzisz do GA do opcji gdzie można online podglądnąć ruch i powinieneś widzieć ten referal który wpisałeś w kroku 2
            4. definujesz nowy filtr w GA z jakimiś domenami spamującymi (nie koniecznie ze wszystkimi
            5. w pole widzetu wpisujesz którąś z domen na jakie założyłeś filtr w pkt 4 i naciskasz „Wywołaj GA”
            6. jeżeli filtr jest poprawny to w podglądzie ruchu on-line w GA nie powinieneś widzieć wywołania z referalem jaki wpisałeś w pkt 5
            4.

  5. K.
    K. http://www.ral-wroclaw.pl

    Rozwiązanie b) chyba najszybsze do wdrożenia jednak GA marudzi, że maksymalna liczba znaków w przypadku defioniowania reguł to 255 znaków…

    Odpowiedz

Trackbacks & Pingbacks

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *