Warstwa danych to obiekt używany przez Menedżera tagów Google i gtag.js do przekazywania informacji do tagów. Zdarzenia i zmienną można przekazywać za pomocą warstwy danych, a reguły można konfigurować na podstawie wartości zmiennych.
Jeśli np.tag remarketingu uruchamia się, gdy wartość purchase_total
jest większa niż 100 USD, lub na podstawie określonych zdarzeń, np. gdy kliknięty zostanie przycisk, możesz skonfigurować warstwę danych, aby udostępniała te dane tagom. Obiekt warstwy danych jest sformatowany jako JSON. Na przykład:
{
event: "checkout_button",
gtm: {
uniqueEventId: 2,
start: 1639524976560,
scrollThreshold: 90,
scrollUnits: "percent",
scrollDirection: "vertical",
triggers: "1_27"
},
value: "120"
}
Tagi Google zostały zaprojektowane tak, aby łatwo odwoływać się do informacji dodanych do warstwy danych w uporządkowany i przewidywalny sposób, a nie przez analizowanie zmiennych, informacji o transakcjach, kategorii stron i innych sygnałów rozproszonych po stronie. Implementacja warstwy danych wypełniona zmiennymi i powiązanymi wartościami zapewni dostęp do odpowiednich danych, gdy będą potrzebne Twoim tagom.
Instalacja
W przypadku instalacji tagów w witrynie musisz utworzyć warstwę danych. Podświetlony kod poniżej pokazuje, gdzie jest tworzona warstwa danych, czyli przed załadowaniem Menedżera tagów.
<script>
window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
W przypadku standardowych implementacji gtag.js, w których tag został skopiowany z usługi i dodany do strony internetowej, udostępniany jest kod do utworzenia warstwy danych. W przypadku niestandardowych implementacji tagu Google dodaj kod warstwy danych na początku skryptu, jak pokazano w wyróżnionym przykładzie poniżej:
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
Sposób przetwarzania informacji z warstwy danych
Gdy wczytany jest kontener, Menedżer tagów rozpoczyna przetwarzanie wszystkich oczekujących wiadomości push warstwy danych. Menedżer tagów przetwarza wiadomości w kolejności „pierwsze na wejściu, pierwsze na wyjściu”: każda wiadomość jest przetwarzana pojedynczo w kolejności, w jakiej została odebrana. Jeśli wiadomość jest zdarzeniem, wszystkie tagi, których warunki wywołania zostały spełnione, zostaną uruchomione, zanim Menedżer tagów przejdzie do następnej wiadomości.
Jeśli w kodzie strony, szablonie niestandardowym lub niestandardowym tagu HTML występuje wywołanie metody gtag()
lub dataLayer.push()
, powiązana wiadomość trafi do kolejki i zostanie przetworzona dopiero po sprawdzeniu pozostałych oczekujących wiadomości. Oznacza to, że nie możemy zagwarantować, że zaktualizowane wartości warstwy danych będą dostępne na potrzeby następnego zdarzenia.
Aby radzić sobie z takimi sytuacjami, możesz dodać nazwę zdarzenia do wiadomości przekazywanej do warstwy danych, a potem wykrywać nazwę tego zdarzenia za pomocą reguły zdarzenia niestandardowego.
Używanie warstwy danych z obsługami zdarzeń
Obiekt dataLayer
używa polecenia event
do inicjowania wysyłania zdarzeń.
Tag Google i Menedżer tagów korzystają ze specjalnej zmiennej warstwy danych o nazwie event
, która służy odbiornikom zdarzeń JavaScript do uruchamiania tagów, gdy użytkownik wchodzi w interakcję z elementami witryny. Możesz np. uruchomić tag śledzenia konwersji, gdy użytkownik kliknie przycisk potwierdzenia zakupu. Zdarzenia mogą być wywoływane, gdy użytkownik wchodzi w interakcję z elementami witryny, np. klika linki, klika przyciski, przewija strony itp.
Ta funkcja jest realizowana przez wywołanie funkcji dataLayer.push()
, gdy wystąpi zdarzenie. Składnia wysyłania zdarzenia za pomocą dataLayer.push()
:
dataLayer.push({'event': 'event_name'});
Gdzie event_name
to ciąg tekstowy opisujący zdarzenie, np. 'login'
, purchase
lub search
.
Użyj elementu dataLayer.push()
, aby wysyłać dane zdarzenia, gdy nastąpi działanie, które chcesz mierzyć. Aby na przykład wysłać zdarzenie, gdy użytkownik kliknie przycisk, zmień moduł obsługi przycisku onclick
, aby wywołać funkcję dataLayer.push()
:
<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>
Aby rejestrować informacje takie jak wartości wprowadzone lub wybrane w formularzu, metadane powiązane z odtwarzanym przez użytkownika filmem, kolor produktu (np.samochodu) dostosowany przez użytkownika, docelowe adresy URL klikniętych linków itp., możesz dynamicznie przesyłać zmienne warstwy danych do warstwy danych.
Podobnie jak w przypadku zdarzeń, ta funkcja jest realizowana przez wywołanie interfejsu API push()
w celu dodania lub zastąpienia zmiennych warstwy danych w warstwie danych. Podstawowa składnia ustawiania zmiennych warstwy danych dynamicznych:
dataLayer.push({'variable_name': 'variable_value'});
Gdzie 'variable_name'
to ciąg określający nazwę zmiennej warstwy danych do ustawienia, a 'variable_value'
to ciąg określający wartość zmiennej warstwy danych do ustawienia lub zastąpienia.
Przykład: aby ustawić zmienną warstwy danych z preferowanym kolorem, gdy użytkownik korzysta z narzędzia do personalizacji produktu, możesz przesłać tę zmienną warstwy danych dynamicznie:
dataLayer.push({'color': 'red'});
Jeden komunikat push, wiele zmiennych
Możesz przesyłać wiele zmiennych i zdarzeń jednocześnie:
dataLayer.push({
'color': 'red',
'conversionValue': 50,
'event': 'customize'
});
Zachowywanie zmiennych warstwy danych
Aby zachować zmienne warstwy danych między stronami internetowymi, po utworzeniu instancji warstwy danych przy każdym wczytaniu strony wywołaj funkcję dataLayer.push()
i prześlij zmienne do warstwy danych. Jeśli chcesz, aby te zmienne warstwy danych były dostępne dla Menedżera tagów po załadowaniu kontenera, nad kodem kontenera Menedżera tagów dodaj wywołanie dataLayer.push()
, jak pokazano poniżej.
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'Pageview',
'pagePath': 'https://www.googleanalytics.dev/pancakes',
'pageTitle': 'Pancake Event Signup',
'visitorType': 'customer'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
Każda zmienna zadeklarowana w obiekcie warstwy danych będzie dostępna tylko dopóki użytkownik pozostaje na bieżącej stronie. Zmienne warstwy danych, które są istotne na różnych stronach (np. visitorType
), muszą być zadeklarowane w warstwie danych na każdej stronie Twojej witryny. Nie musisz umieszczać tego samego zestawu zmiennych w warstwie danych na każdej stronie, ale musisz stosować spójne konwencje nazewnictwa. Innymi słowy: jeśli na stronie rejestracji ustawisz kategorię strony za pomocą zmiennej o nazwie pageCategory
, strony produktów i strony zakupu powinny również używać zmiennej pageCategory
.
Rozwiązywanie problemów
Oto kilka wskazówek dotyczących rozwiązywania problemów z warstwą danych:
Nie zastępuj zmiennej window.dataLayer
: gdy używasz bezpośrednio warstwy danych (np. dataLayer = [{'item': 'value'}])
), zastąpi ona wszystkie istniejące wartości w polu dataLayer
. Instalacje Menedżera tagów powinny tworzyć instancje warstwy danych jak najwyżej w kodzie źródłowym, powyżej fragmentu kodu kontenera, za pomocą window.dataLayer =
window.dataLayer || [];
. Po zadeklarowaniu zmiennej dataLayer
możesz za pomocą funkcji dataLayer.push({'item': 'value'})
dodawać do niej dodatkowe wartości. Jeśli wartości te mają być dostępne dla Menedżera tagów po załadowaniu strony, wywołanie funkcji dataLayer.push()
musi znajdować się nad kodem kontenera Menedżera tagów.
W nazwie obiektu dataLayer
uwzględniana jest wielkość liter: jeśli spróbujesz przesłać zmienną lub zdarzenie bez odpowiedniej wielkości liter, przesyłanie się nie powiedzie.
datalayer.push({'pageTitle': 'Home'}); // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'}); // Good (dataLayer in camel case)
Metoda dataLayer.push
musi być wywoływana z prawidłowymi obiektami JavaScript. Nazwy wszystkich zmiennych warstwy danych powinny być ujęte w cudzysłowie.
dataLayer.push({new-variable: 'value'}); // Bad - no quote marks
dataLayer.push({'new-variable': 'value'}); // Good - proper quote marks
Zachowuj spójność nazw zmiennych na różnych stronach: jeśli na różnych stronach używasz różnych nazw zmiennych dla tego samego pojęcia, tagi nie będą się konsekwentnie uruchamiać we wszystkich odpowiednich miejscach.
Nieprawidłowo:
// Homepage:
dataLayer.push({'visitorType': 'low-value'});
// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});
Dobrze:
// Homepage:
dataLayer.push({'visitorType': 'low-value'});
// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});
Zmiana nazwy warstwy danych
Domyślna nazwa obiektu warstwy danych zainicjowanego przez tag Google lub Menedżer tagów to dataLayer
. Jeśli wolisz używać innej nazwy dla warstwy danych, możesz to zrobić, edytując wartość parametru warstwy danych w tagu Google lub fragmencie kodu kontenera Menedżera tagów, podając wybraną nazwę.
gtag.js
Aby ustawić nową nazwę warstwy danych, dodaj do adresu URL parametr zapytania o nazwie „l”, np. l=myNewName
. Zaktualizuj wszystkie wystąpienia wartości dataLayer
w fragmentie kodu tagu Google, podając nową nazwę.
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID&l=myNewName"></script>
<script>
window.myNewName = window.myNewName || [];
function gtag(){myNewName.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
Menedżer tagów
Zastąp wartość parametru warstwy danych (zaznaczoną poniżej) w fragmentach kodu kontenera nazwą wybraną przez siebie.
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
Po zmianie nazwy wszystkie odwołania do warstwy danych (np. podczas deklarowania warstwy danych nad fragmentem kodu lub podczas przesyłania zdarzeń lub zmiennych warstwy danych dynamicznych do warstwy danych za pomocą polecenia .push()
) muszą zostać dostosowane do nazwy niestandardowej warstwy danych:
<script>
myNewName = window.dataLayer || [];
myNewName.push({'variable_name': 'variable_value'});
</script>
Metody warstwy danych niestandardowych
Jeśli prześlesz funkcję na warstwę danych, będzie ona wywoływana z użyciem tego zestawu jako abstrakcyjny model danych. Ten abstrakcyjny model danych może pobierać i ustawiać wartości w magazynie par klucz-wartość, a także umożliwia resetowanie warstwy danych.
zestaw
Funkcja set
w abstrakcyjnym modelu danych umożliwia ustawianie wartości do pobierania za pomocą funkcji get.
window.dataLayer.push(function() {
this.set('time', new Date());
});
get
Funkcja get
w abstrakcyjnym modelu danych umożliwia pobieranie wartości, które zostały ustawione.
window.dataLayer.push(function() {
const existingTime = this.get('time');
if (existingTime !== null) {
// Change behavior based on whether or not this value exists...
} else {
// ...
}
})
zresetuj
Funkcja reset
w abstrakcyjnym modelu danych umożliwia zresetowanie danych w warstwie danych. Jest to szczególnie przydatne w przypadku strony, która pozostanie otwarta, a jej rozmiar będzie się zwiększał. Aby zresetować warstwę danych, użyj tego kodu:
window.dataLayer.push(function() {
this.reset();
})