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 jest uruchamiany, 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 na stronach internetowych Menedżera tagów musisz utworzyć warstwę danych. Wyróżniony poniżej kod wskazuje, gdzie ustanowiono warstwę danych przed wczytaniem 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 ich otrzymania: każda wiadomość jest przetwarzana pojedynczo. 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 wywołanie gtag()
lub dataLayer.push()
jest wykonywane przez kod na stronie, w szablonie niestandardowym lub w niestandardowym tagu HTML, powiązana wiadomość zostanie umieszczona w kolejce i przetworzona po sprawdzeniu wszystkich 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 używają specjalnej zmiennej warstwy danych o nazwie event
, która jest używana przez detektory 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.
Aby to zrobić, wywołaj funkcję dataLayer.push()
po wystąpieniu zdarzenia. 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żywaj usługi dataLayer.push()
do wysyłania danych zdarzenia, gdy występuje 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>
Zmienne warstwy danych możesz dynamicznie przekazywać do warstwy danych, aby rejestrować informacje, takie jak wartości wpisane lub wybrane w formularzu, metadane powiązane z filmem odtwarzanym przez użytkownika, dostosowany przez użytkownika kolor produktu (np. samochodu) czy docelowe adresy URL klikniętego linku itp.
Podobnie jak w przypadku zdarzeń tę funkcję uzyskuje się przez wywołanie interfejsu API push()
w celu dodania lub zastąpienia zmiennych warstwy danych w warstwie danych. Podstawowa składnia ustawiania zmiennych dynamicznej warstwy danych wygląda tak:
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'});
1 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 warstwy danych przy każdym wczytaniu strony wywołaj funkcję dataLayer.push()
i przekaż 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 obowiązywać, dopóki użytkownik pozostanie 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 w Twojej witrynie. 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 elementu dataLayer
możesz za jego pomocą dodawać do niego dodatkowe wartości. Jeśli wartości te mają być dostępne dla Menedżera tagów po załadowaniu strony, wywołanie elementu dataLayer.push()
musi znajdować się nad kodem kontenera Menedżera tagów.dataLayer.push({'item': 'value'})
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. Wszystkie nazwy zmiennych warstwy danych należy ująć w cudzysłów.
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żera 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
Dodaj do adresu URL parametr zapytania o nazwie „l”, aby ustawić nazwę nowej warstwy danych, np. l=myNewName
. Zmień nazwę we wszystkich wystąpieniach ciągu dataLayer
we fragmencie kodu tagu Google.
<!-- 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 odniesienia do warstwy danych (np. przy deklarowaniu warstwy danych nad fragmentem kodu, przekazywaniu zdarzeń lub zmiennych dynamicznej warstwy danych do warstwy danych za pomocą polecenia .push()
) muszą zostać dostosowane tak, aby odzwierciedlały niestandardową nazwę warstwy danych:
<script>
myNewName = window.dataLayer || [];
myNewName.push({'variable_name': 'variable_value'});
</script>
Niestandardowe metody warstwy danych
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 warstwa danych będzie się z czasem powiększać. Aby zresetować warstwę danych, użyj tego kodu:
window.dataLayer.push(function() {
this.reset();
})