Wdrożenie data layer do śledzenia ruchu na stronie
Ogólne wytyczne
W tym artykule znajdziesz szczegółowe wytyczne, jak wdrożyć niezbędne zdarzenia data layer (warstwy danych), aby skutecznie śledzić interakcje użytkowników w Twoim e-sklepie. Dzięki temu przewodnikowi zrozumiesz, jakie dane zbierać, jak je uporządkować i w którym momencie wysyłać.
Implementacja jest zgodna z nazwami zdarzeń i strukturą danych, które zaleca Google dla śledzenia w e-commerce:
- Nazwy zdarzeń – możesz używać nazw sugerowanych przez Google Analytics, aby zachować spójność lub stosować własne nazewnictwo.
- Data layer – wszystkie zdarzenia powinny być przesyłane do obiektu dataLayer.
- Waluta – używaj trzyliterowych kodów walut ISO 4217 (np. „PLN”).
- Właściwości – upewnij się, że wszystkie właściwości są dokładnie odwzorowane, zgodnie ze specyfikacją.
- Dane użytkownika – jeśli użytkownicy są zalogowani, dołączaj zahaszowane dane na ich temat.
Spójność danych o produkcie między zdarzeniami
Aby śledzenie i analiza danych były dokładne, informacje o produkcie muszą być takie same we wszystkich zdarzeniach, w których ten produkt występuje. Dotyczy to zwłaszcza cechy item_id. Na przykład:
- Gdy użytkownik wchodzi na stronę produktu i uruchamia się zdarzenie view_item, a potem dodaje ten sam produkt do koszyka, item_id w zdarzeniach view_item i add_to_cart musi być identyczny.
- Ta sama zasada dotyczy zdarzeń takich jak remove_from_cart, view_cart i purchase, gdzie produkt jest przywoływany.
O czym warto pamiętać:
- item_id musi być spójne we wszystkich zdarzeniach dla tego samego produktu.
- Pozostałe dane produktu, takie jak productGroupId, productName i price, również powinny być spójne.
Dzięki zachowaniu spójności masz pewność, że działania użytkownika związane z konkretnym produktem są dokładnie śledzone na całej jego ścieżce zakupowej – od wyświetlenia produktu aż po jego zakup.
Wykorzystanie istniejących integracji Google Analytics
Większość sklepów e-commerce ma już wdrożoną integrację z Google Analytics do śledzenia interakcji użytkowników, takich jak wyświetlenia produktów, dodania do koszyka czy zakupy.
Zdarzenia używane w ECDP pokrywają się z tymi powszechnie używanymi w e-commerce przez Google Analytics, co oznacza, że w wielu przypadkach nie trzeba tworzyć żadnych nowych zdarzeń.
Data layer nie zawsze jest w sklepach prawidłowo skonfigurowany, co prowadzi do zbierania niekompletnych danych. Aby nasz skrypt śledzący zbierał prawidłowe dane zweryfikuj, czy obecna konfiguracja zdarzeń w Twoim sklepie spełnia poniższe wytyczne.
Opcja prefiksu zdarzenia (_ecdp)#
Jeśli wolisz pozostawić istniejącą konfigurację Google Analytics bez zmian lub chcesz utworzyć osobne zdarzenia specjalnie dla naszej platformy, możesz po prostu dodać do każdego zdarzenia prefiks _ecdp:
- view_item → _ecdp_view_item
- add_to_cart → _ecdp_add_to_cart
- remove_from_cart → _ecdp_remove_from_cart
- view_cart → _ecdp_view_cart
- purchase → _ecdp_purchase
Za pomocą prefiksu utrzymany jest osobna ścieżka danych dla ECDP, jednak oparta o istniejącą konfigurację. Główna struktura zdarzenia pozostaje taka sama, co zmniejsza ilość dodatkowej pracy po stronie programistów.
Wymagane zdarzenia#
- view_item
- add_to_cart
- remove_from_cart
- view_cart
- purchase
Dodatkowe zdarzenia dla funkcjonalności „Lista ulubionych” (jeśli jest dostępna)#
- add_to_wishlist
- remove_from_wishlist
- view_wishlist
Specyfikacje zdarzeń dataLayer
Wyświetlenie szczegółów produktu (view_item)
Zdarzenie jest wywoływane, gdy użytkownik wyświetla stronę szczegółów produktu lub wybiera jego inny wariant (np. rozmiar, kolor).
Kiedy wywołać zdarzenie:
- Przy pierwszym wczytaniu strony ze szczegółami produktu.
- Gdy użytkownik wybiera inną konfigurację produktu.
dataLayer.push({
"event": "view_item",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234", // ID produktu
"item_group_id": "grupa123", // ID grupy produktów
"item_variant": "BA1234_43", // ID wariantu produktu
"item_name": "Adidas Stan Smith", // Nazwa produktu
"price": 100.00, // Cena sprzedaży
"original_price": 120.00, // Cena regularna
"omnibus_price": 95.00, // Cena omnibus (if applicable)
"currency": "PLN",
"item_category": "Buty", // Pierwsza kategoria
"item_category2": "Męskie", // Druga kategoria
"item_category3": "Sneakersy", // Trzecia kategoria
"image_url": "https://twojsklep.pl/images/adidas-stan-smith.jpg",
"availability": true // Dostępność (isAvailable, użyj "true"/"false")
}]
}
});
Definicje właściwości:
- availability – dostępność, przyjmuje wartość „true” lub „false”.
- item_id – unikalny identyfikator produktu.
- item_group_id: unikalny identyfikator grupy produktów.
- item_variant – unikalny identyfikator wariantu produktu.
- item_name – nazwa produktu wyświetlana użytkownikowi.
- price – aktualna cena promocyjna produktu.
- original_price – cena regularna przed ewentualnymi zniżkami.
- omnibus_price – najniższa cena z ostatnich 30 dni (jeśli dotyczy).
- item_category – główna kategoria produktu.
- image_url – adres URL zdjęcia produktu.
Uwagi:
- Dołącz original_price oraz price nawet jeśli są takie same (gdy produkt nie jest objęty zniżką).
- Dołącz omnibus_price jeśli ta informacja jest dostępna. W przeciwnym razie pomiń to pole lub ustaw jego wartość na null.
- item_category2 oraz item_category3 są opcjonalne i mogą zawierać podkategorie.
- Upewnij się, że item_id pozostaje takie samo w kolejnych zdarzeniach dotyczących tego produkty, jak add_to_cart czy purchase.
Wybór wariantu produktu (select_item)
Zdarzenie jest wywoływane, gdy użytkownik wybiera inny wariant produktu na stronie szczegółów produktu.
Kiedy wywołać zdarzenie:
- Gdy użytkownik zmienia konfigurację produktu, np. wybiera inny rozmiar lub kolor.
Struktura danych:
dataLayer.push({
"event": "select_item",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234",
"item_group_id": "grupa123",
"item_variant": "BA1234_44",
"item_name": "Adidas Stan Smith rozmiar 44",
"price": 100.00,
"original_price": 120.00,
"omnibus_price": 95.00,
"currency": "PLN",
"item_category": "Buty",
"item_category2": "Męskie",
"item_category3": "Sneakersy",
"image_url": "https://twojsklep.pl/images/adidas-stan-smith-44.jpg",
"availability": true
}]
}
});
Uwagi:
- To zdarzenie pomaga śledzić preferencje użytkowników dotyczące różnych konfiguracji produktów.
- Upewnij się, że właściwość item_variant odzwierciedla wybrany wariant.
Dodanie do koszyka (add_to_cart)
Zdarzenie jest wywoływane, gdy użytkownik dodaje jeden lub więcej produktów do koszyka.
Kiedy wywołać zdarzenie:
- Gdy użytkownik potwierdzi dodanie produktu do koszyka.
Struktura danych:
dataLayer.push({
"event": "add_to_cart",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234",
"item_group_id": "grupa123",
"item_variant": "BA1234_43",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"original_price": 120.00,
"omnibus_price": 95.00,
"quantity": 1
}]
}
});
Cecha quantity to liczba sztuk dodanych do koszyka (powinna być liczbą całkowitą dodatnią).
Uwagi:
- Uwzględnij wszystkie odpowiednie właściwości produktu jak w zdarzeniu view_item.
- Jeśli jednocześnie dodawanych jest kilka produktów, każdy z nich umieść jako osobny obiekt w tablicy items.
- Upewnij się, że item_id w tym zdarzeniu jest takie samo jak item_id użyte w zdarzeniu view_item dla tego samego produktu.
Usunięcie z koszyka (remove_from_cart)
Zdarzenie jest wywoływane, gdy użytkownik usuwa jeden lub więcej produktów z koszyka.
Kiedy wywołać zdarzenie:
- Gdy użytkownik potwierdzia usunięcie produktu z koszyka.
- Gdy użytkownik usuwa wiele produktów lub czyści cały koszyk. takim przypadku jedno zdarzenie remove_from_cart, powinno zawierać wszystkie usunięte produkty, a każdy z nich powinien być osobnym obiektem w tablicy items.
Struktura danych:
dataLayer.push({
"event": "remove_from_cart",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234",
"item_group_id": "grupa123",
"item_variant": "BA1234_43",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"original_price": 120.00,
"omnibus_price": 95.00,
"quantity": 1
}]
}
});
Uwagi:
- Upewnij się, że zdarzenie remove_from_cart obsługuje usuwanie wielu produktów. Jeśli użytkownik usuwa kilka produktów lub czyści cały koszyk, umieść każdy usunięty produkt w tablicy items.
- Cecha Quantity powinna być liczbą całkowitą oznaczającą liczbę usuniętych sztuk.
- Zadbaj o to, aby wszystkie pozostałe szczegóły produktu były spójne z poprzednimi zdarzeniami, np. item_id, item_variant, price.
Wyświetlenie koszyka (view_cart)
Zdarzenie jest wywoływane, gdy użytkownik przegląda zawartość koszyka lub przechodzi do kasy.
Kiedy wywołać zdarzenie:
- Przy załadowaniu strony koszyka.
- Na pierwszym kroku procesu składania zamówienia (checkout).
Struktura danych:
dataLayer.push({
"event": "view_cart",
"ecommerce": {
"currency": "PLN",
"items": [
{
"item_id": "BA1234",
"item_group_id": "gropa123",
"item_variant": "BA1234_43",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"original_price": 120.00,
"omnibus_price": 95.00,
"quantity": 2,
"image_url": "https://twojsklep.pl/images/adidas-stan-smith.jpg",
"availability": true
},
{
"item_id": "BA5678",
"item_group_id": "gropa456",
"item_name": "Nike Air Max",
"price": 150.00,
"original_price": 150.00,
"quantity": 1,
"image_url": "https://twojsklep.pl/images/nike-air-max.jpg",
"availability": true
}
]
}
});
Uwagi:
- Uwzględnij wszystkie produkt, które aktualnie znajdują się w koszyku.
- Upewnij się, że quantity odzwierciedla aktualną liczbę sztuk każdego produktu w koszyku.
Rozpoczęcie procesu płatności (begin_checkout)
Zdarzenie jest wywoływane, gdy użytkownik rozpoczyna proces płatności (checkout).
Kiedy wywołać zdarzenie:
- Na pierwszej stronie procesu płatności.
Struktura danych:
dataLayer.push({
"event": "begin_checkout",
"ecommerce": {
"currency": "PLN",
"items": [
{
"item_id": "BA1234",
"item_group_id": "grupa123",
"item_variant": "BA1234_43",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"original_price": 120.00,
"omnibus_price": 95.00,
"quantity": 2,
"image_url": "https://twojsklep.pl/images/adidas-stan-smith.jpg",
"availability": true
}
]
}
});
To zdarzenie jest podobne do view_cart, ale jednoznacznie wskazuje na rozpoczęcie procesu finalizacji zakupu
Zakup (purchase)
Zdarzenie jest wywoływane po pomyślnym zakończeniu zakupu.
Kiedy wywołać zdarzenie:
- Na stronie z potwierdzeniem zamówienia, po udanej transakcji.
Struktura danych:
dataLayer.push({
"event": "purchase",
"ecommerce": {
"transaction_id": "ORD78910", // ID zamówienia
"client_order_id": "GPDWMFE", // clientOrderId
"value": 250.00, // Całkowity koszt zamówienia
"tax": 0.00, // Kwota podatku
"shipping": 30.00, // Koszt dostawy
"currency": "PLND",
"items": [
{
"item_id": "BA1234",
"item_group_id": "gropa123",
"item_variant": "BA1234_43",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"quantity": 2
},
{
"item_id": "BA5678",
"item_group_id": "gropa456",
"item_name": "Nike Air Max",
"price": 150.00,
"quantity": 1
}
]
}
});
Definicje właściwości:
- transaction_id – unikalny identyfikator zamówienia.
- client_order_id – ID zamówienia widoczne dla klienta, jeśli różni się od transaction_id.
- value – całkowity koszt zamówienia, wliczając wysyłkę i podatki.
- tax – całkowita kwota podatku (ustaw na 0.00 jeśli nie dotyczy).
- shipping – całkowity koszt dostawy.
Uwagi:
- Tablica items powinna zawierać wszystkie zakupione produkty.
- Upewnij się, że wszystkie właściwości produktów są poprawnie przekazane.
- Jeśli występują dodatkowe koszty lub zniżki, odpowiednio dostosuj pole value.
Wyświetlenie listy ulubionych (view_wishlist)
Zdarzenie jest wywoływane, gdy użytkownik wyświetla swoją listę ulubionych.
Struktura danych:
dataLayer.push({
"event": "view_wishlist",
"ecommerce": {
"currency": "PLN",
"items": [
{
"item_id": "BA1234",
"item_group_id": "gropa123",
"item_name": "Adidas Stan Smith",
"price": 100.00,
"image_url": "https://twojsklep.pl/images/adidas-stan-smith.jpg",
"availability": true
}
]
}
});
Dodanie do listy ulubionych (add_to_wishlist)
Zdarzenie jest wywoływane, gdy użytkownik dodaje produkt do listy ulubionych.
Struktura danych:
dataLayer.push({
"event": "add_to_wishlist",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234",
"item_group_id": "gropa123",
"item_name": "Adidas Stan Smith",
"price": 100.00
}]
}
});
Usunięcie z listy ulubionych (remove_from_wishlist)
Zdarzenie jest wywoływane, gdy użytkownik usuwa produkt z listy ulubionych.
Struktura danych:
dataLayer.push({
"event": "remove_from_wishlist",
"ecommerce": {
"currency": "PLN",
"items": [{
"item_id": "BA1234",
"item_group_id": "gropa123",
"item_name": "Adidas Stan Smith",
"price": 100.00
}]
}
});
Dane użytkownika
Opis:
- Uwzględna informacje o użytkowniku, gdy użytkownik jest zalogowany.
- Wymagany jest tylko jeden identyfikator!
Struktura danych:
dataLayer.push({
"userData": {
"email": "uytkownik@example.com", // UE-mail użytkownika
"emailMd5": "md5hashvalue", // Hash MD5 adresu e-mail
"emailSha256": "sha256hashvalue" // SHash SHA256 adresu e-mail
}
});
Uwagi:
- Adres e-mail powinien być małymi literami przed hashowaniem.
- Przechowywanie adresu e-mail w formie jawnego tekstu (plain text) jest opcjonalne.
- Hashowanie zapewnia dodatkową warstwę ochrony prywatności.
Dodatkowe szczegóły implementacji#
Timing zdarzeń:
- Wszystkie zdarzenia powinny być przesyłane do dataLayer w odpowiednim momencie, co gwarantuje, że dane są zbierane dokładnie
Spójność danych:
- Pamiętaj, aby te same identyfikatory i właściwości produktów były używane spójnie we wszystkich zdarzeniach.
Formatowanie walut:
- Ceny powinny być formatowane jako liczby z dwoma miejscami po przecinku.
- Zawsze uwzględnij kod waluty do cechy currency.
Dostępność produktu:
- Dla cechy availability używaj „in stock” lub „out of stock” dla właściwości
- To pomaga w zrozumieniu popytu na produkty i stanów magazynowych.
Lista kontrolna implementacji
- Wyświetlenie szczegółów produktu (view_item) – zaimplementowane na stronach szczegółów produktu ze wszystkimi wymaganymi właściwościami.
- Wybór wariantu produktu (select_item) – zaimplementowane, gdy użytkownicy wybierają różne konfiguracje produktów.
- Dodanie do koszyka (add_to_cart) – zaimplementowane, gdy produkty są dodawane do koszyka.
- Usunięcie z koszyka (remove_from_cart) – zaimplementowane, gdy produkty są usuwane z koszyka.
- Wyświetlenie koszyka (view_cart) –zaimplementowane na stronie koszyka.
- Rozpoczęcie procesu płatności (begin_checkout) – zaimplementowane na początku procesu składania zamówienia.
- Zakup (purchase) – zaimplementowane na stronie z potwierdzeniem zamówienia.
- Zdarzenia listy ulubionych – zaimplementowane, jeśli lista ulubionych jest dostępna w Twoim sklepie.
- Dane użytkownika –zaimplementowane dla zalogowanych użytkowników z odpowiednim hashowaniem.