<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wojciech Wikiera | Bluerank</title>
	<atom:link href="https://www.bluerank.com/blog/author/wojciech-wikiera/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bluerank.com</link>
	<description>Agencja SEM - Pozycjonowanie (SEO) i Kampanie Linków Sponsorowanych (PPC)</description>
	<lastBuildDate>Thu, 06 Feb 2025 15:23:33 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.bluerank.com/wp-content/uploads/2020/12/cropped-favicon-1-32x32.png</url>
	<title>Wojciech Wikiera | Bluerank</title>
	<link>https://www.bluerank.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Skuteczny Pomiar Konwersji Telefonicznych w Kampaniach Reklamowych</title>
		<link>https://www.bluerank.com/blog/skuteczny-pomiar-konwersji-telefonicznych-w-kampaniach-reklamowych/</link>
					<comments>https://www.bluerank.com/blog/skuteczny-pomiar-konwersji-telefonicznych-w-kampaniach-reklamowych/#respond</comments>
		
		<dc:creator><![CDATA[Wojciech Wikiera]]></dc:creator>
		<pubDate>Thu, 09 Jan 2025 14:28:54 +0000</pubDate>
				<category><![CDATA[Marketing Analytics]]></category>
		<guid isPermaLink="false">https://www.bluerank.com/?p=22198</guid>

					<description><![CDATA[<p>Tło problemu Jeden z naszych klientów prowadzi działania reklamowe, których celem jest uzyskanie kontaktu telefonicznego od potencjalnych klientów. Takie podejście jest kluczowe, ponieważ bezpośredni ...</p>
The post <a href="https://www.bluerank.com/blog/skuteczny-pomiar-konwersji-telefonicznych-w-kampaniach-reklamowych/">Skuteczny Pomiar Konwersji Telefonicznych w Kampaniach Reklamowych</a> first appeared on <a href="https://www.bluerank.com">Bluerank</a>.]]></description>
										<content:encoded><![CDATA[<p><strong>Tło problemu</strong></p>



<p>Jeden z naszych klientów prowadzi działania reklamowe, których celem jest uzyskanie kontaktu telefonicznego od potencjalnych klientów. Takie podejście jest kluczowe, ponieważ bezpośredni kontakt telefoniczny często prowadzi do wyższej konwersji i lepszej obsługi klienta, co przekłada się na większe zadowolenie klientów i wyższą sprzedaż.</p>



<p>Standardowe rozwiązania umożliwiają pomiar konwersji telefonicznych w określonych przypadkach. Możemy korzystać z website call conversion proponowanych przez Google, które pozwalają śledzić połączenia telefoniczne bezpośrednio z witryny internetowej. Popularnym rozwiązaniem jest również pomiar kliknięcia w przycisk z numerem telefonu, co pozwala na łatwe śledzenie połączeń inicjowanych bezpośrednio ze strony.</p>



<p>W przypadku naszego klienta lwia część ruchu pochodzi z komputerów osobistych. Z tego powodu powstaje problem — nie posiadamy żadnej możliwości pomiaru ilości połączeń telefonicznych w sytuacji, gdy użytkownik przepisuje numer telefonu ze strony na swój telefon i wykonuje połączenie.</p>



<p><strong>Nasze rozwiązanie</strong></p>



<p>Konfigurację przeprowadziliśmy, dodając niestandardowe rozwiązanie w Google Tag Manager. Dodatkowym wymaganiem było utworzenie przez klienta specjalnego numeru telefonu, którego aktywność monitorowaliśmy. W zależności od potrzeb można utworzyć kilka numerów, po jednym dla każdego badanego źródła ruchu.</p>



<p>Efektem działania naszego rozwiązania jest podmiana numeru na stronie, jeśli ruch pochodzi z interesującego nas kanału. W naszym przypadku był to ruch płatny z Google Ads oraz Criteo. Ruch z takich źródeł jest oznaczony odpowiednimi parametrami URL, takimi jak UTMy czy automatyczny parametr gclid. Przykładowy URL może wyglądać w następujący sposób:</p>



<pre class="wp-block-preformatted">https://example.pl/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=nazwa_kampanii&amp;utm_content=search_non-brand&amp;gad_source=1&amp;gclid=CjwKCAjwqMO0BhA8EiwAFTLgINPFtJAUUJvRpygygakr8yJwt19BTfcrrXqMj5vnSCuPo6PVgVoDxhoCjRAQAvD_BwE</pre>



<p>URL oraz referral strony dla ruchu organicznego zapisujemy w session_storage. Jest to obszar pamięci przeglądarki, który przechowuje dane dla danej sesji przeglądania i jest usuwany po zamknięciu przeglądarki. Ograniczeniem session storage jest fakt, że dane są dostępne tylko w obrębie jednej sesji, co zapewnia większą stabilność w kontekście monitorowania bieżącego ruchu.</p>



<p>W tym celu konfigurujemy customowy tag html w GTM o następującym działaniu:</p>



<ol class="wp-block-list"><li>&lt;script&gt;</li><li><strong>function</strong> <strong>parseQueryParams</strong>() {</li><li>&nbsp;&nbsp;&nbsp;// Pobiera parametry zapytania z adresu URL</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> queryString = window.location.search;</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> urlParams = <strong>new</strong> <strong>URLSearchParams</strong>(queryString);</li><li>&nbsp;&nbsp;&nbsp;// Pobiera wartość parametru 'utm_source&#8217; i konwertuje na małe litery</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> utmSource = urlParams.<strong>get</strong>(&#8217;utm_source&#8217;);</li><li>&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;utmSource = utmSource.<strong>toLowerCase</strong>();</li><li>&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;// Pobiera wartość parametru 'utm_medium&#8217; i konwertuje na małe litery</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> utmMedium = urlParams.<strong>get</strong>(&#8217;utm_medium&#8217;);</li><li>&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmMedium) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;utmMedium = utmMedium.<strong>toLowerCase</strong>();</li><li>&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;// Pobiera wartość parametru 'gclid&#8217;</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> gclid = urlParams.<strong>get</strong>(&#8217;gclid&#8217;);</li><li>&nbsp;&nbsp;&nbsp;// Funkcja zwracająca wartość źródła ruchu na podstawie parametrów utmSource i utmMedium</li><li>&nbsp;&nbsp;&nbsp;<strong>function</strong> <strong>getTrafficSourceValue</strong>(utmSource, utmMedium) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (!utmSource) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> &#8221;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'direct&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'direct&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'google&#8217; &amp;&amp; utmMedium === 'cpc&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'ps&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'google&#8217; &amp;&amp; utmMedium === 'organic&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'google organic&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'facebook&#8217; &amp;&amp; utmMedium === 'cpc&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'fb-paid&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'facebook&#8217; &amp;&amp; utmMedium !== 'cpc&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'fb&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource === 'criteo&#8217; &amp;&amp; utmMedium === 'display&#8217;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'criteo&#8217;;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>return</strong> 'other&#8217;;</li><li>&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;// Zmienna przechowująca wartość źródła ruchu</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> value = &#8221;;</li><li>&nbsp;&nbsp;&nbsp;// Referer strony</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> referrer = document.referrer;</li><li>&nbsp;&nbsp;&nbsp;// Logika ustalania wartości źródła ruchu</li><li>&nbsp;&nbsp;&nbsp;<strong>if</strong> (utmSource) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = <strong>getTrafficSourceValue</strong>(utmSource, utmMedium);</li><li>&nbsp;&nbsp;&nbsp;} <strong>else</strong> <strong>if</strong> (gclid) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = 'google cpc&#8217;;</li><li>&nbsp;&nbsp;&nbsp;} <strong>else</strong> <strong>if</strong> (referrer.<strong>includes</strong>(&#8217;https://www.google.com/&#8217;)) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = 'google organic&#8217;;</li><li>&nbsp;&nbsp;&nbsp;} <strong>else</strong> <strong>if</strong> (referrer) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = 'other&#8217;;</li><li>&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;// Zapisuje wartość źródła ruchu w sessionStorage</li><li>&nbsp;&nbsp;&nbsp;<strong>if</strong> (value !== &#8221;) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionStorage.<strong>setItem</strong>(&#8217;trafficSource&#8217;, value);</li><li>&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;// Zwraca wartość źródła ruchu dla ewentualnego dalszego użycia</li><li>&nbsp;&nbsp;&nbsp;<strong>return</strong> value;</li><li>}</li><li>// Wywołuje funkcję bezpośrednio, aby uruchomiła się od razu po załadowaniu skryptu</li><li><strong>parseQueryParams</strong>();</li><li>&lt;/script&gt;</li></ol>



<p>Kod powinien zostać wywołany jak najwcześniej, w naszym przypadku użyliśmy triggera DOM ready.</p>



<h3 class="wp-block-heading"><strong>Dlaczego session storage?</strong></h3>



<p>Wcześniej w tym celu wykorzystywaliśmy ciasteczka. Zrezygnowaliśmy jednak z tego rozwiązania na rzecz session storage, które jest bardziej stabilne. W obliczu rosnącej liczby przeglądarek, blokujących ciasteczka trzecich stron, session storage oferuje bardziej niezawodne i bezpieczne rozwiązanie, które jest przypisywane na całą sesję użytkownika. Dodatkowo, w kontekście &#8222;cookieless world&#8221; (świata bez ciasteczek), session storage staje się coraz bardziej preferowaną metodą przechowywania danych sesyjnych.</p>



<h3 class="wp-block-heading"><strong>Podmiana numeru telefonu</strong></h3>



<p>Następnym elementem procesu jest wywołanie drugiego tagu, który sprawdza, czy na stronie występuje element zawierający określony numer telefonu, który chcemy podmienić. Kod zamienia wartość tekstu oraz zawartość linku na inny numer — specjalnie przygotowany do rejestrowania ruchu z danego źródła.</p>



<ol class="wp-block-list"><li>&lt;script&gt;</li><li><strong>if</strong> ({{local storage &#8211; trafficSource}} == &#8222;google cpc&#8221; || {{local storage &#8211; trafficSource}} == &#8222;criteo&#8221; || {{source &#8211; url}} == &#8222;google cpc&#8221; || {{source &#8211; url}} == &#8222;criteo&#8221;){</li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> oldNumbers = [</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'[href*=&#8221;tel:123 456 789&#8243;]&#8217;,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'[href*=&#8221;tel://123456789&#8243;]&#8217;,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'[href*=&#8221;tel://123 456 789&#8243;]&#8217;</li><li>&nbsp;&nbsp;&nbsp;];</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> newNumber = &#8222;tel:987 654 321&#8221;;</li><li>&nbsp;&nbsp;&nbsp;<strong>var</strong> newNumberText = &#8222;987 654 321&#8221;;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;oldNumbers.<strong>forEach</strong>(<strong>function</strong>(selector) {</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>var</strong> elements = document.<strong>querySelectorAll</strong>(selector);</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>for</strong> (<strong>var</strong> i = 0; i &lt; elements.length; i++){</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elements[i].href = newNumber;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elements[i].text = newNumberText;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li><li>&nbsp;&nbsp;&nbsp;});</li><li>}</li><li>&lt;/script&gt;</li></ol>



<h3 class="wp-block-heading"><strong>Zmienna pomocnicza</strong></h3>



<p>W naszym rozwiązaniu korzystamy z pomocniczej zmiennej, która przechowuje wartość źródła ruchu w local storage:</p>



<ol class="wp-block-list"><li><strong>function</strong>() {</li><li>&nbsp;&nbsp;&nbsp;<strong>return</strong> localStorage.<strong>getItem</strong>(&#8217;trafficSource&#8217;) || 'unknown&#8217;;</li><li>}</li></ol>



<h3 class="wp-block-heading"><strong>Proces działania kodu</strong></h3>



<p>Po załadowaniu strony, skrypt <span class="has-inline-color has-vivid-green-cyan-color">parseQueryParams</span> pobiera parametry URL oraz referer strony, aby określić źródło ruchu. Na przykład, jeśli URL zawiera <span class="has-inline-color has-vivid-green-cyan-color">utm_source=google</span> i <span class="has-inline-color has-vivid-green-cyan-color">utm_medium=cpc</span>, to źródło ruchu jest oznaczone jako <span class="has-inline-color has-vivid-green-cyan-color">google cpc</span>. Wartość ta jest następnie zapisywana w session storage.</p>



<p>Gdy użytkownik przemieszcza się po stronie, drugi skrypt sprawdza, czy w session storage zapisana jest wartość źródła ruchu odpowiadająca naszym kryteriom (np. <span class="has-inline-color has-vivid-green-cyan-color">google cpc</span>). Jeśli tak, skrypt podmienia numery telefonów na stronie na specjalny numer, który jest monitorowany pod kątem połączeń telefonicznych.</p>



<h3 class="wp-block-heading"><strong>Zalety naszego rozwiązania</strong></h3>



<p>Nasze rozwiązanie posiada wiele zalet, które znacząco poprawiają efektywność pomiaru konwersji telefonicznych:</p>



<ol class="wp-block-list"><li><strong>Precyzyjne śledzenie:</strong> Możemy dokładnie monitorować połączenia telefoniczne pochodzące z konkretnych źródeł ruchu.</li><li><strong>Zwiększona stabilność:</strong> Session storage zapewnia bardziej stabilne przechowywanie danych w porównaniu do ciasteczek, które mogą być blokowane.</li><li><strong>Skalowalność:</strong> Rozwiązanie można łatwo dostosować do różnych kampanii reklamowych i kanałów ruchu.</li><li><strong>Dostosowanie do trendów:</strong> Przygotowanie na przyszłość bez ciasteczek trzecich stron, co jest zgodne z najnowszymi trendami w ochronie prywatności w Internecie.</li></ol>



<h3 class="wp-block-heading"><strong>Podsumowanie</strong></h3>



<p>Dzięki wdrożeniu niestandardowego rozwiązania w Google Tag Manager, nasz klient może teraz skutecznie śledzić konwersje telefoniczne z ruchu komputerowego. Pomimo rosnących wyzwań związanych z ochroną prywatności i zmianami w technologii przeglądarek, nasza metoda zapewnia stabilność i precyzję, pozwalając na dokładne monitorowanie efektywności kampanii reklamowych. Dzięki temu klient może lepiej dostosowywać swoje strategie marketingowe i osiągać lepsze wyniki sprzedażowe.</p>The post <a href="https://www.bluerank.com/blog/skuteczny-pomiar-konwersji-telefonicznych-w-kampaniach-reklamowych/">Skuteczny Pomiar Konwersji Telefonicznych w Kampaniach Reklamowych</a> first appeared on <a href="https://www.bluerank.com">Bluerank</a>.]]></content:encoded>
					
					<wfw:commentRss>https://www.bluerank.com/blog/skuteczny-pomiar-konwersji-telefonicznych-w-kampaniach-reklamowych/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
