Measurement protokol je skvělý a na použití jednoduchý nástroj. Je vhodný třeba v situacích, kdy potřebujete do Google Analytics posílat data jinak než běžně při zobrazování v prohlížeči jako návštěvník. Má sice svá omezení – nepošlete přes něj přímo geografické informace a data o zařízení, ale na druhou stranu jeho implementace ze strany backendu je velmi jednoduchá a náklady na provoz zanedbatelné.
I my jsme se k takovému řešení uchýlili. Očekávali jsme totiž, že část webových stránek, které jsme vytvořili pro Centrálu cestovního ruchu Jihomoravského kraje, bude embedována do různých webů.
Náš klient, Centrála cestovního ruchu Jihomoravského kraje (CCJRM), se zabývá rozvojem cestovního ruchu a turistického potenciálu v kraji. A protože se v Brně pořád něco děje, CCJRM chtěli pořadatelům nabídnout pomocnou ruku v tom, jak dát vědět o akcích jednoduše a on‑line (bez letáků). Dali jsme hlavy dohromady a vytvořili eventovou aplikaci.
Podívejte se s námi, jak implementovat posílání dat pomocí measurement protokolu v Universal Analytics a GA4. Implementaci ukážeme na příkladech v PHP resp. Drupalu 9 / Symphony.
Kdy to můžete potřebovat
Measurement protokol se vám bude hodit, pokud vkládáte stránku do jiného webu, kde nemáte přístup ke GTM. Zajistí, že budete mít veškerá data o návštěvnosti, nikoliv jen náhodný přístup z directu.Že se daná stránka přes embed zobrazuje, je ale většinou užitečné vědět. A právě v tom vám measurement protokol dokáže pomoct.
Řešením by bylo také sáhnout po server‑side GTM. Jde ale o poměrně robustní a nákladný nástroj. V našem konkrétním případě jsme potřebovali pouze vědět, které stránky se zobrazují a kolikrát. Implementace measurement protokolu tak byla vhodnějším krokem.
Další užitečný use case je případ, kdy není možné data poslat běžnou cestou. Třeba
v mobilní aplikaci, která se dá použít i offline, a údaje se tak odesílají až ve chvíli, kdy je uživatel opět online. Nebo se může jednat o zařízení, které sběr a práci s daty vůbec neumožňuje (např. hodinky).
Implementace do UA a GA4
Abychom partnerům CCRJM zjednodušili embedování obsahu, zobrazujeme přímo kód pro vložení naší stránky do jejich webu a přidáváme si do URL parametr s hodnotou embed. Díky parametru a jeho hodnotě následně aplikace při zobrazení stránky posílá data do Google Analytics pomocí measurement protokolu.
Posíláme data na backendu
Jak pro UA, tak pro GA4 používáme measurement protokol přes backend. V obou případech je třeba vytvořit a poslat HTTP POST požadavek na endpoint pro GA. Data pak lze poslat v podstatě v jakémkoliv programovacím jazyce, který umožní sestavení a odeslání tohoto požadavku. V našem případě se jednalo o PHP, kde je možné instalovat pomocí composeru konkrétní knihovny, pracující přímo s measurement protokolem. Není to ale nutnost, stačí nám k tomu i nativní metody.
Posíláme data do UA
V Drupalu můžeme použít Guzzle HTTP klienta, který je v podstatě jen obalený do \Drupal::httpClient();
Část kódu pro zaslání požadavku do Google Analytics by mohl vypadat následovně:
$client = \Drupal::httpClient(); $ua = 'UA-XXXXXXXXXX-X'; try { $response = $client->post('www.google-analytics.com/collect?v=1&t=pageview&tid=' . $ua . '&cid=' . $client_id . '&dp=' . urlencode(\Drupal::request()->getRequestUri())); $data = $response->getBody(); } catch (RequestException $e) { watchdog_exception('http - UA measurement protocol', $e->getMessage()); }
Do GA posíláme ID našich Universal Analytics, typ přístupu jako pageview, id klienta a nakonec URL adresu včetně parametrů. Endpoint od GA nevrací po zaslání požadavku žádnou zpětnou vazbu. Dejte si také pozor na správnou syntaxi dotazu a vše pod konkrétním účtem v GA otestujte a ověřte, že se vám data propisují.
Další možnosti využití s výpisem možných parametrů si přečtěte v návodu.
Posíláme data do GA4
Logiku posílání dat do GA4 vidíte v diagramu:
Zdroj: Measurement Protocol (Google Analytics 4)
Samotné sestavení požadavku pro GA4 se od toho pro UA moc neliší. Přibylo hlavně api_secret
a measuremnt_id
. Obé najdete ve správě konkrétního GA4. api_secret
si budete muset vygenerovat.
V UA bylo možné posílat i hity nenavázané na návštěvu. V GA4 se přes measurement protokol dají posílat jen eventy, které návštěvu obsahují.
A takto vypadají eventy, do kterých můžete poslat parametry pro vyhodnocování měření:
//ga4 $measurement_id = 'G-XXXXXXXXXX'; $api_secret = 'AZZZZZZZZZZZZZZZZZZZ'; $url = "https://www.google-analytics.com/mp/collect?measurement_id=" . $measurement_id . "&api_secret=" . $api_secret; $data = [ 'client_id' => $client_id, 'events' => [ [ 'name' => 'page_view', 'params' => [ 'page_location' => urlencode(\Drupal::request()->getRequestUri()), 'page_title' => $variables['node']->get('title')->value, 'tags' => 'embed', ], ], ], ]; $options = [ 'http' => [ 'header' => "Content-type: application/json", 'method' => 'POST', 'content' => json_encode($data), ], ]; $context = stream_context_create($options); $resp = file_get_contents($url, false, $context);
V našem případě si posíláme k eventu page_view
informaci o URL adrese, titulku stránky a o tom, že šlo o přístup z embedované stránky.
Nezbytným parametrem pro odeslání dat je tedy krom measurement_id
a api_secret
také json pole, které se pošle jako content požadavku. Toto pole potom obsahuje parametry a data, která chceme posílat. Minimálně musíme poslat client_id
– kdy se jedná o unikátní identifikátor klienta a název eventu.
Další možnosti a omezení najdete tady.
Přehledný výpis eventů a jejich parametrů pak zde.
Závěrem
Implementace doměření některých dat pomocí measurement protokolu na úrovni backendu není nikterak náročná. Následný provoz je zanedbatelný v režii chodu aplikace. Je tedy trochu škoda tento nástroj v některých konkrétních případech nevyužít. Ať už je to jen pro konkretizaci některých dat. Vždy bychom ale měli vědět, proč dané měření nastavujeme a jakým způsobem budeme nasbíraná data vyhodnocovat.
Pokud bychom šli cestou server‑side GTM, budeme potřebovat hodiny seniorního analytika a provoz GTM serveru nás bude stát tisíce korun měsíčně. Jakou cestou se při sběru vašich dat vydáte, je samozřejmě dané vašimi potřebami a měřícím plánem.