Koniec problemów z autotagowaniem Google Analytics
piątek, 8 października 2010
Problem z autotagowaniem
Jeśli na koncie AdWords włączony jest mechanizm autotagowania, do każdego adresu docelowego Waszej reklamy dodawany jest dodatkowy parametr "gclid", którego wartość przekazuje w zakodowany (mało który reklamodawca chciałby się taką informacją dzielić z konkurencją!) sposób informację o koncie AdWords i koszcie kliknięcia do programu Analytics, gdzie jest ona odkodowywana i umieszczana w odpowiednich raportach. Pod tym linkiem znajdziecie więcej informacji na temat automatycznego tagowania.
Co się więc dzieje jeśli w momencie wejścia na stronę docelową AdWords nastąpi przekierowanie, po którym z adresu URL zniknie parametr "gclid"? Wizyta zostanie naturalnie odnotowana, natomiast Analytics nie będzie w stanie wykryć, że nastąpiła ona z płatnego linku. Zamiast tego najbardziej prawdopodobnym scenariuszem jest potraktowanie tej wizyty jako pochodzącej z organicznych wyników wyszukiwania Google. Można bardzo łatwo sprawdzić, czy na Waszej stronie ten problem występuje - do docelowego adresu docelowego należy dodać jakąkolwiek parę parametr-wartość, na przykład "gclid=test" (bez cudzysłowiu). Jeśli w adresie URL jest już znak zapytania (?) oddzielający adres od parametrów, nową parę wartości należy poprzedzić znakiem "&". W przeciwnym razie należy ją poprzedzić właśnie znakiem zapytania. W pierwszym scenariuszu jeśli adres strony docelowej wygląda jak "www.jakasstrona.pl/index.php?id=1", testowy adres powinien wyglądać tak - "www.jakasstrona.pl/index.php?id=1&gclid=test". W drugim scenariuszu jeśli adres wygląda jak "www.jakasstrona.pl/index.php", testowy adres powinien wyglądać tak - "www.jakasstrona.pl/index.php?gclid=test". Tak skonstruowany adres wprowadźcie w pole URL przeglądarki i sprawdźcie, czy przy przejściu na stronę docelową utrzymał się parametr "gclid". Jeśli nie, oznacza to, że mamy problem.
Konsekwencje problemu
Problem może mieć dwie różne konsekwencje - strona może działać, ale parametr "gclid" nie będzie przekazywany. Może się też zdarzyć tak, że po dodaniu dodatkowego parametru strona zupełnie przestanie działać, zwracając niesławny błąd 404 albo jakiś inny błąd serwera, w zależności od konfiguracji. W celu rozwiązania problemu należy przede wszystkim zrozumieć, w jaki sposób następuje przekierowanie. Istnieją trzy podstawowe sposoby ustawiania takich przekierowań i manipulowania adresami URL - poprzez plik konfiguracyjny serwera, poprzez modyfikację nagłówka przez język programowania po stronie serwera i przy użyciu skryptu po stronie klienta. W dalszej części posta pokażę problem i jego rozwiązanie na przykładzie odpowiednio pliku konfiguracyjnego serwera Apache (.htaccess), popularnego w sieci języka programowania PHP i skryptu JavaScript.
Plik konfiguracyjny serwera (.htaccess)
Jeśli Wasz serwer używa najpopularniejszego na rynku darmowego oprogramowania Apache, wówczas reguły przekierowania i nadpisywania adresów URL często ustawiane są bezpośrednio w pliku konfiguracyjnym serwera (.htaccess). Jednym z powodów wprowadzenia takiej reguły może być chęć uzyskania przyjaźnie wyglądających adresów docelowych na stronie. Inną - ukrycie części szczegółów dotyczących implementacji strony w celu poprawienia bezpieczeństwa (choć skuteczność takich działań jest dyskusyjna). Powiedzmy więc, że "faktyczny" adres docelowy wygląda tak:
http://www.jakasstrona.pl/index.php?category=garnki&productid=1
Dość "brzydki" adres, nieprawdaż? Sporo sklepów internetowych zechciałoby więc "ukryć" parametry implementacji i sprawić, by bez tracenia informacji o parametrach URL adres wyglądał tak:
http://www.jakasstrona.pl/garnki/1/
Najpopularniejszą metodą będzie skorzystanie z modułu mod_rewrite serwera Apache. Przykładowym rozwiązaniem będzie więc zastosowanie takiej reguły:
RewriteEngine On
RewriteRule ^([a-z]+)/([0-9]+)/$ index.php?category=$1&productid=$2
Reguła ta jest zasadniczo prawidłowa - zarówno pojawienie się, jak i brak dodatkowego parametru "gclid" nie spowoduje wystąpienia błędu serwera. Parametr ten nie zniknie z adresu URL, więc z punktu widzenia Analytics wszystko jest dobrze. Jednyny potencjalny problem z tą regułą może wystąpić, gdy chcielibyśmy mieć z poziomu serwera dostęp do ewentualnych dodatkowych parametrów w tablicy asocjacyjnej GET. Wówczas będziemy musieli dodać warunek, który nieco zmodyfikuje regułę, jeśli w zapytaniu pojawią się dodatkowe parametry. Jeśli się nie pojawią - zastosowanie ma stara reguła. Oto zestaw takich dwóch reguł.
RewriteEngine On
RewriteCond %{QUERY_STRING} ^([\s\S]+)$
RewriteRule ^([a-z]+)/([0-9]+)/$ index.php?category=$1&productid=$2%1 [L]
RewriteRule ^([a-z]+)/([0-9]+)/$ index.php?category=$1&productid=$2
Konkretna implementacja tej reguły będzie oczywiście zależeć od struktury Państwa witryny i nie obejdzie się bez pomocy webmastera, który zna się na rzeczy. Konfiguracja pliku .htaccess nie bez przyczyny bywa nieraz przyrównywana do wiedzy tajemnej, polecam więc zapoznanie się z jednym z dostępnych w sieci krótkich przewodników na ten temat. Moim ulubionym jest ten, dostępny niestety tylko w języku angielskim. Do prawidłowej konfiguracji serwera konieczna będzie przyzwoita znajmość wyrażeń regularnych.
Skrypt po stronie serwera (PHP)
Jeśli przekierowanie następuje nie w skrypcie konfiguracyjnym serwera, a już po stronie samego skryptu wykonywanego na serwerze, odbywa się to poprzez modyfikację nagłówków strony. W najpopularniejszym w sieci języku programowania PHP takie przekierowanie używałoby fukcji header() i wyglądało mniej więcej tak:header("Location: http://www.jakasstrona.pl"); // tzw. przekierowanie "302"
...lub tak:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.jakasstrona.pl"); // tzw. przekierowanie "301"
Problem z tą regułą? Tracimy parametry URL, więc parametr "gclid" i jego nowa wartość nie zostaną przekazane do nowej strony, do której kieruje przekierowanie. Należy więc wybrać parametr "gclid" z tablicy asocjacyjnej parametrów URL ($_GET) i przekazać go do nowej strony docelowej:
$nowy_adres = "Location: http://www.jakasstrona.pl";
$nowy_adres .= isset($_GET["gclid"]) ? "?" . http_build_query(array("gclid" => $_GET["gclid"])) : "";
header("Location: $nowy_adres"); // To samo można zrobić naturalnie z przekierowaniem typu 301
Jeśli chcemy "uratować" więcej parametrów niż tylko "gclid", powinniśmy w tablicy asocjacyjnej przekazywanej do funkcji http_build_query() zawrzeć parametry, które chcemy przekazać, i ich wartości.
Przekierowanie po stronie klienta (JavaScript)
Trzecim popularnym sposobem przekierowania jest to używające języka skryptowego JavaScript po stronie przeglądarki klienta. W większości przypadków takie przekierowanie odbywa się poprzez odwołanie się do wartości zmiennej "window.location" (inna, bardziej prezycyjna wariacja to "window.location.href"). Przykład:
window.location = "http://www.jakasstrona.pl";
Jak się domyślacie, problem z takim przekierowaniem jest znów taki, że nie przekaże parametru "gclid" (ani żadnego innego), o ile się o to bezpośrednio nie postaramy. Dodatkowa trudność polega na tym, że w przeciwieństwie do większości języków programowania po stronie serwera, JavaScript nie pozwala na prosty dostęp do zmiennych przekazywanych w adresie URL. Potrzebna jest do tego dodatkowa funkcja. W sieci dostępnych jest kilka wariantów, przy czym moją ulubioną jest ta, którą znalazłem na tej stonie:
function gup( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
Przy użyciu tej funkcji możemy sprawdzić, czy parametr "gclid" istnieje i jeśli istnieje, przekazać go do docelowego adresu URL:
var url = "http://www.jakasstrona.pl";
url += gup("gclid") ? "?gclid=" + gup("gclid") : "";
window.location = url;
Znów, tak jak w przypadku przykładu w języku PHP, możemy "uratować" inne parametry poprzez przekazanie ich do adresu docelowego w ten sam sposób. Jedna rzecz, na którą należy uważać przy przekierowaniach przy użyciu JavaScript to to, że powinno ono nastąpić na samym początku sekcji headstrony, zanim uruchomiony zostanie skrypt Google Analytics, który przeczyta parametr "gclid" i prawidłowo zarejestruje wizytę, ale nie pod tym adresem, pod którym byście się jej spodziewali.Na koniec chciałbym zastrzec, że powyższy materiał ma wartość jedynie szkoleniową i my jako Google nie ponosimy żadnej odpowiedzialności z uwagi na ewentualne problemy spowodowane implementacją któregokolwiek z powyższych rozwiązań. Wskazówki te należy potraktować jako pomoc dla dobrego webmastera, a nie jego zastępstwo. Nieprawidłowa konfiguracja przekierowań może mieć poważne konswkwencje dla Waszej strony i biznesu w ogóle, warto więc poprosić o pomoc dobrego specjalistę.
Jeśli jesteście ekspertami w dziedzinie jakichś innych języków programowania i technologii sieciowych (ASP, JSP, Perl, Python itp.), możecie w komentarzach dopisać potencjalne rozwiązania dla tych języków.
Napisane przez Marcin Wyszyński, AdWords Account Strategist
1 komentarz :
Dzięki za rozwiązanie tego problemu. Zaktualizujcie tez helpa w tej kwestii.
Prześlij komentarz