Warstwa danych

Warstwa danych to obiekt używany przez Menedżera tagów Google i tag gtag.js do przekazywania informacji do tagów. Za pomocą warstwy danych można przekazywać zdarzenia lub zmienne, a reguły można konfigurować na podstawie wartości zmiennych.

Jeśli na przykład uruchamiasz tag remarketingowy, gdy wartość purchase_total jest większa niż 100 USD, lub na podstawie konkretnych zdarzeń, np. kliknięcia przycisku, możesz skonfigurować warstwę danych tak, aby udostępniała te dane tagom. Obiekt warstwy danych ma strukturę 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 są zaprojektowane tak, aby odwoływać się do informacji dodawanych 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 na stronie. Wdrożenie warstwy danych wypełnionej zmiennymi i powiązanymi wartościami pomoże zapewnić, że odpowiednie dane będą dostępne, gdy tagi będą ich potrzebować.

Instalacja

W przypadku instalacji Menedżera tagów na stronie internetowej musisz utworzyć warstwę danych. Poniższy przykład kodu pokazuje, gdzie tworzona jest warstwa danych, zanim zostanie wczytany Menedżer 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 standardowych wdrożeniach tagu gtag.js, w których tag został skopiowany z usługi i dodany do strony internetowej, udostępniany jest kod tworzący warstwę danych. W niestandardowych wdrożeniach tagu Google dodaj kod warstwy danych na początku skryptu, jak pokazano w poniższym przykładzie kodu:

<!-- 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 kontener zostanie wczytany, Menedżer tagów zacznie przetwarzać wszystkie wiadomości push z warstwy danych znajdujące się w kolejce. 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 uruchomienia zostały spełnione, zostaną uruchomione, zanim Menedżer tagów przejdzie do następnej wiadomości.

Jeśli kod na stronie, w szablonie niestandardowym lub w niestandardowym tagu HTML wywoła funkcję gtag() lub dataLayer.push(), powiązana wiadomość zostanie umieszczona w kolejce i przetworzona po sprawdzeniu wszystkich innych oczekujących wiadomości. Oznacza to, że zaktualizowane wartości warstwy danych nie muszą być dostępne w przypadku następnego zdarzenia. Aby sobie z tym poradzić, należy dodać nazwę zdarzenia do wiadomości podczas jej przekazywania do warstwy danych, a następnie nasłuchiwać tej nazwy zdarzenia za pomocą reguły zdarzenia niestandardowego.

Używanie warstwy danych z modułami obsługi 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 na przykład 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, takimi jak linki, przyciski, przewijanie itp.

Ta funkcja jest realizowana przez wywołanie funkcji dataLayer.push() po wystąpieniu zdarzenia. Składnia wysyłania zdarzenia za pomocą funkcji dataLayer.push() jest następująca:

dataLayer.push({'event': 'event_name'});

gdzie event_name to ciąg znaków opisujący zdarzenie, np. 'login', 'purchase', lub 'search'.

Użyj funkcji dataLayer.push() do wysyłania danych zdarzeń, gdy wystąpi działanie, które chcesz zmierzyć. Aby na przykład wysłać zdarzenie, gdy użytkownik kliknie przycisk, zmodyfikuj obsługę onclick przycisku, aby wywoływała funkcję dataLayer.push():

<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>

Możesz dynamicznie przekazywać do warstwy danych zmienne warstwy danych, aby rejestrować informacje takie jak wartości wpisane lub wybrane w formularzu, metadane powiązane z filmem odtwarzanym przez użytkownika, kolor produktu (np. samochodu) dostosowany przez użytkownika, docelowe adresy URL klikniętych linków itp.

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 dynamicznych zmiennych warstwy danych jest następująca:

dataLayer.push({'variable_name': 'variable_value'});

gdzie 'variable_name' to ciąg znaków wskazujący nazwę zmiennej warstwy danych, która ma zostać ustawiona, a 'variable_value' to ciąg znaków wskazujący wartość zmiennej warstwy danych, która ma zostać ustawiona lub zastąpiona.

Na przykład: aby ustawić zmienną warstwy danych z preferencjami kolorystycznymi, gdy użytkownik korzysta z narzędzia do dostosowywania produktu, możesz przekazać następującą dynamiczną zmienną warstwy danych:

dataLayer.push({'color': 'red'});

Jedno przekazanie, wiele zmiennych

Możesz przekazywać wiele zmiennych i zdarzeń naraz:

dataLayer.push({
  'color': 'red',
  'conversionValue': 50,
  'event': 'customize'
});

Utrzymywanie zmiennych warstwy danych

Aby utrzymać zmienne warstwy danych między stronami internetowymi, wywołaj funkcję dataLayer.push() po utworzeniu instancji warstwy danych przy każdym wczytaniu strony i przekaż zmienne do warstwy danych. Jeśli chcesz, aby te zmienne warstwy danych były dostępne dla Menedżera tagów po wczytaniu kontenera, dodaj wywołanie funkcji dataLayer.push() nad kodem kontenera Menedżera tagów, jak pokazano w tym przykładzie:

<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 utrzymywana tylko tak długo, jak długo 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 Twojej witryny. Nie musisz umieszczać tego samego zestawu zmiennych w warstwie danych na każdej stronie, ale warto stosować spójną konwencję nazewnictwa. Innymi słowy, jeśli ustawisz kategorię strony na stronie rejestracji za pomocą zmiennej o nazwie pageCategory, strony produktów i 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: jeśli używasz warstwy danych bezpośrednio (np. dataLayer = [{'item': 'value'}]), zastąpi ona wszystkie dotychczasowe wartości w dataLayer. Instalacje Menedżera tagów powinny tworzyć instancję warstwy danych jak najwyżej w kodzie źródłowym, nad fragmentem kodu kontenera, za pomocą kodu window.dataLayer = window.dataLayer || [];. Po zadeklarowaniu dataLayer użyj dataLayer.push({'item': 'value'}) aby dodać do niej dodatkowe wartości. Jeśli te wartości mają być dostępne dla Menedżera tagów po wczytaniu strony, wywołanie funkcji dataLayer.push() musi znajdować się również nad kodem kontenera Menedżera tagów.

W nazwie obiektu dataLayer wielkość liter ma znaczenie: jeśli spróbujesz przekazać zmienną lub zdarzenie bez zachowania odpowiedniej wielkości liter, przekazanie nie zadziała.

datalayer.push({'pageTitle': 'Home'});    // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'});    // Good (dataLayer in camel case)

Funkcja dataLayer.push musi być wywoływana z prawidłowymi obiektami JavaScript. Wszystkie nazwy zmiennych warstwy danych powinny być ujęte w cudzysłowy.

dataLayer.push({new-variable: 'value'});      // Bad - no quote marks
dataLayer.push({'new-variable': 'value'});    // Good - proper quote marks

Zachowaj 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ą mogły się uruchamiać w sposób spójny we wszystkich zamierzonych lokalizacjach.

Źle:

// 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 warstwy danych, możesz to zrobić, edytując wartość parametru warstwy danych we fragmencie kodu tagu Google lub kontenera Menedżera tagów i wpisując wybraną nazwę.

Menedżer tagów

Zastąp wartość parametru warstwy danych (podświetloną poniżej) we fragmencie kodu kontenera wybraną nazwą.

<!-- 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 -->

gtag.js

Aby ustawić nową nazwę warstwy danych, dodaj do adresu URL parametr zapytania o nazwie „l”, np. l=myNewName. Zaktualizuj wszystkie wystąpienia dataLayer we fragmencie kodu tagu Google, aby używać nowej nazwy.

<!-- 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>

Po zmianie nazwy wszystkie odwołania do warstwy danych (czyli podczas deklarowania warstwy danych nad fragmentem kodu lub podczas przekazywania zdarzeń lub dynamicznych zmiennych warstwy danych do warstwy danych za pomocą polecenia .push()) muszą zostać dostosowane do niestandardowej nazwy warstwy danych:

<script>
  window.myNewName = window.myNewName || [];
  window.myNewName.push({'variable_name': 'variable_value'});
</script>

Niestandardowe metody warstwy danych

Jeśli przekazujesz do warstwy danych funkcję, zostanie ona wywołana z ustawionym na abstrakcyjny model danych parametrem this. 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, które można pobrać za pomocą funkcji get.

window.dataLayer.push(function() {
  this.set('time', new Date());
});

get

Funkcja get w abstrakcyjnym modelu danych umożliwia pobieranie ustawionych wartości.

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 resetowanie danych w warstwie danych. Jest to najbardziej przydatne w przypadku strony, która pozostanie otwarta, a rozmiar warstwy danych będzie się z czasem zwiększać. Aby zresetować warstwę danych, użyj tego kodu:

window.dataLayer.push(function() {
  this.reset();
});