Ten dokument jest przeznaczony dla deweloperów, którzy utrzymują platformę do zarządzania zgodą użytkowników w witrynach korzystających z Menedżera tagów Google (GTM).
Na tej stronie znajdziesz informacje o rodzajach zgody w Menedżerze tagów Google oraz dowiesz się, jak je zintegrować z platformą do zarządzania zgodą użytkowników.
Dlaczego warto używać szablonu tagu do uzyskiwania zgody?
Gdy udostępnisz szablon tagu, Twoi użytkownicy będą mogli zintegrować Twoje rozwiązanie do uzyskiwania zgody bez użycia kodu, co pozwoli im zaoszczędzić sporo czasu i wysiłku.
Użytkownicy mogą ustawiać domyślne stany zgody za pomocą szablonu trybu uzyskiwania zgody i przekazywać wybory użytkowników dotyczące zgody do Menedżera tagów Google. Zapewnia to optymalne działanie tagów Google i tagów innych firm, które obsługują tryb uzyskiwania zgody.
Jako twórca szablonu możesz wdrożyć szablony trybu uzyskiwania zgody na potrzeby wewnętrzne lub opublikować je w Galerii szablonów społeczności, aby udostępnić je publicznie. Dostawcy platform do zarządzania zgodą użytkowników (CMP), którzy oferują szablony trybu uzyskiwania zgody, mogą zostać wymienieni w naszej dokumentacji trybu uzyskiwania zgody, a ich szablony mogą być dostępne w funkcji wyboru w Galerii szablonów.
Stan zgody użytkownika a rodzaje zgody
Tagi Google i tagi innych firm dostosowują swoje działanie związane z przechowywaniem danych na podstawie stanu zgody użytkownika , który może mieć wartość granted lub denied. Mogą one mieć wbudowane sprawdzanie zgody użytkownika
w przypadku dowolnego z tych rodzajów zgody:
| Rodzaj zgody | Opis |
|---|---|
ad_storage |
Umożliwia przechowywanie danych (np. plików cookie) związanych z reklamami. |
ad_user_data |
Określa stan zgody na wysyłanie danych użytkownika do Google w celach reklamowych online. |
ad_personalization |
Określa stan zgody na reklamy spersonalizowane. |
analytics_storage |
Umożliwia przechowywanie danych (np. plików cookie) dotyczących statystyk (np. czasu trwania wizyty ). |
functionality_storage |
Umożliwia przechowywanie danych, które obsługują funkcje witryny lub aplikacji np. ustawienia języka. |
personalization_storage |
Umożliwia przechowywanie danych dotyczących personalizacji, np. rekomendacji filmów . |
security_storage |
Umożliwia przechowywanie danych związanych z zabezpieczeniami, takimi jak funkcja uwierzytelniania funkcjonalność, zapobieganie oszustwom i inne mechanizmy ochrony użytkowników. |
Tworzenie nowego szablonu zgody
Tryb uzyskiwania zgody śledzi wybory użytkowników dotyczące zgody, a sprawdzanie zgody przez tagi zapewnia odpowiednie dostosowanie ich działania. Podczas tworzenia nowego szablonu zgody postępuj zgodnie z tymi sprawdzonymi metodami:
Zamiast
gtag consentużywaj interfejsów API trybu uzyskiwania zgody w Menedżerze tagów setDefaultConsentState i updateConsentState.Ustaw domyślne stany zgody natychmiast po uruchomieniu za pomocą reguły Inicjacja zgody – Wszystkie strony.
Platforma CMP musi jak najszybciej wyświetlić użytkownikowi prośbę o wyrażenie lub odmowę zgody na wszystkie odpowiednie rodzaje zgody.
Gdy użytkownik wskaże swój wybór dotyczący zgody, platforma CMP musi przekazać zaktualizowany stan zgody użytkownika.
1. Utwórz nowy szablon
W tym podejściu do implementacji używamy 1 pola w szablonie do przechowywania domyślnego stanu zgody użytkownika. Kod implementacji odczytuje to pole, aby ustawić domyślny stan zgody użytkownika w czasie działania. W przypadku polecenia aktualizacji Twój kod próbuje odczytać plik cookie ustawiony przez rozwiązanie do uzyskiwania zgody, aby przechowywać wybory użytkowników dotyczące zgody. Skonfigurujesz też wywołanie zwrotne dla
updateConsentState, aby obsługiwać sytuacje, w których użytkownik nie dokonał jeszcze wyboru dotyczącego zgody lub zdecyduje się zmienić swoją zgodę.
Aby utworzyć szablon zgody:
- Zaloguj się na konto Menedżera tagów Google.
- W menu po lewej stronie kliknij Szablony.
- W panelu Szablony tagów kliknij Nowy.
Aby ustawić domyślne stany zgody:
- Kliknij kartę Pola, a potem Dodaj pole > Tabela parametrów.
- Zmień nazwę na
defaultSettings. - Rozwiń pole.
- Zmień Wyświetlaną nazwę na
Default settings. - Kliknij Dodaj kolumnę, wybierz Pole tekstowe, zmień nazwę na
regioni zaznacz pole Wymagaj, aby wartości w kolumnie były unikalne. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Region (leave blank to have consent apply to all regions). Tekst w nawiasach to dokumentacja dla użytkowników Twojego szablonu. Dowiedz się więcej o konfigurowaniu domyślnych ustawień zgody dla różnych regionów. - Kliknij Dodaj kolumnę, wybierz Pole tekstowe, zmień nazwę na
granted. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Granted Consent Types (comma separated). - Kliknij Dodaj kolumnę, wybierz Pole tekstowe, zmień nazwę na
denied. - Rozwiń kolumnę i zmień wyświetlaną nazwę na
Denied Consent Types (comma separated)
Opcjonalnie: aby dodać obsługę pomijania danych reklam:
- Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na
ads_data_redaction. - Zmień wyświetlaną nazwę na
Redact Ads Data
Dowiedz się więcej o działaniu plików cookie w przypadku pomijania danych reklam
Opcjonalnie: aby dodać obsługę przekazywania parametrów adresu URL:
- Kliknij Dodaj pole, wybierz Pole wyboru i zmień nazwę pola na
url_passthrough. - Zmień wyświetlaną nazwę na
Pass through URL parameters.
Dowiedz się więcej o przekazywaniu parametrów adresu URL
Aby dodać kod implementacji:
- Otwórz kartę Kod w edytorze szablonów.
- W przykładowym kodzie poniżej edytuj pola zastępcze.
- Skopiuj kod i zastąp nim powtarzalny kod w edytorze szablonów.
- Zapisz szablon.
// The first two lines are optional, use if you want to enable logging
const log = require('logToConsole');
log('data =', data);
const setDefaultConsentState = require('setDefaultConsentState');
const updateConsentState = require('updateConsentState');
const getCookieValues = require('getCookieValues');
const callInWindow = require('callInWindow');
const gtagSet = require('gtagSet');
const JSON = require('JSON');
const COOKIE_NAME = 'Your_cookie_name';
/*
* Splits the input string using comma as a delimiter, returning an array of
* strings
*/
const splitInput = (input) => {
if (!input) return [];
return input.split(',')
.map(entry => entry.trim())
.filter(entry => entry.length !== 0);
};
/*
* Processes a row of input from the default settings table, returning an object
* which can be passed as an argument to setDefaultConsentState
*/
const parseCommandData = (settings) => {
const regions = splitInput(settings['region']);
const granted = splitInput(settings['granted']);
const denied = splitInput(settings['denied']);
const commandData = {};
if (regions.length > 0) {
commandData.region = regions;
}
granted.forEach(entry => {
commandData[entry] = 'granted';
});
denied.forEach(entry => {
commandData[entry] = 'denied';
});
return commandData;
};
/*
* Called when consent changes. Assumes that consent object contains keys which
* directly correspond to Google consent types.
*/
const onUserConsent = (consent) => {
const consentModeStates = {
ad_storage: consent['adConsentGranted'] ? 'granted' : 'denied',
ad_user_data: consent['adUserDataConsentGranted'] ? 'granted' : 'denied',
ad_personalization: consent['adPersonalizationConsentGranted'] ? 'granted' : 'denied',
analytics_storage: consent['analyticsConsentGranted'] ? 'granted' : 'denied',
functionality_storage: consent['functionalityConsentGranted'] ? 'granted' : 'denied',
personalization_storage: consent['personalizationConsentGranted'] ? 'granted' : 'denied',
security_storage: consent['securityConsentGranted'] ? 'granted' : 'denied',
};
updateConsentState(consentModeStates);
};
/*
* Executes the default command, sets the developer ID, and sets up the consent
* update callback
*/
const main = (data) => {
/*
* Optional settings using gtagSet
*/
gtagSet('ads_data_redaction', data.ads_data_redaction);
gtagSet('url_passthrough', data.url_passthrough);
gtagSet('developer_id.your_developer_id', true);
// Set default consent state(s). Add optional chaining to safely handle cases
// where defaultSettings might be null or undefined.
data.defaultSettings?.forEach(settings => {
const defaultData = parseCommandData(settings);
// wait_for_update (ms) allows for time to receive visitor choices from the CMP
defaultData.wait_for_update = 500;
setDefaultConsentState(defaultData);
});
// Check if cookie is set and has values that correspond to Google consent
// types. If it does, run onUserConsent().
const cookieValues = getCookieValues(COOKIE_NAME);
if (cookieValues && cookieValues.length > 0) {
try {
const settings = JSON.parse(cookieValues[0]);
if (settings) {
onUserConsent(settings);
}
} catch (e) {
// Log an error if the cookie value is not valid JSON.
}
}
/**
* Add event listener to trigger update when consent changes
*
* References an external method on the window object which accepts a
* function as an argument. If you do not have such a method, you will need
* to create one before continuing. This method should add the function
* that is passed as an argument as a callback for an event emitted when
* the user updates their consent. The callback should be called with an
* object containing fields that correspond to the five built-in Google
* consent types.
*/
callInWindow('addConsentListenerExample', onUserConsent);
};
main(data);
data.gtmOnSuccess();
Następnie skonfiguruj uprawnienia dostępu do stanu zgody użytkownika i plików cookie.
Aby dodać uprawnienia do zarządzania stanami zgody:
- Wybierz kartę Uprawnienia i kliknij Dostęp do stanu zgody użytkownika.
- Kliknij Dodaj rodzaj zgody.
- Kliknij pole i w menu wybierz
ad_storage. - Zaznacz Zapisz.
- Kliknij Dodaj.
- Powtórz kroki 2–5 w przypadku
ad_user_data,ad_personalizationianalytics_storage. Jeśli potrzebujesz dodatkowych rodzajów zgody, dodaj je w ten sam sposób. - Kliknij Zapisz.
Aby dodać uprawnienia dostępu do plików cookie:
- Kliknij kartę Uprawnienia i wybierz Odczytuje wartości plików cookie.
- W sekcji Konkretne wpisz nazwy wszystkich plików cookie, które Twój kod musi odczytać, aby określić wybory użytkownika dotyczące zgody. Każda nazwa powinna znajdować się w osobnym wierszu.
- Kliknij Zapisz.
2. Utwórz testy jednostkowe
Informacje o tworzeniu testów dla szablonu znajdziesz w artykule Testy.
3. Zintegruj szablon z rozwiązaniem do uzyskiwania zgody
Poniższy kod pokazuje przykład integracji tego szablonu z kodem platformy do zarządzania zgodą użytkowników przez dodanie detektora:
// Array of callbacks to be executed when consent changes
const consentListeners = [];
/**
* Called from GTM template to set callback to be executed when user consent is provided.
* @param {function} Callback to execute on user consent
*/
window.addConsentListenerExample = (callback) => {
consentListeners.push(callback);
};
/**
* Called when user grants/denies consent.
* @param {Object} Object containing user consent settings.
*/
const onConsentChange = (consent) => {
consentListeners.forEach((callback) => {
callback(consent);
});
};
Aktualizowanie stanu zgody użytkownika
Gdy użytkownik witryny wskaże swoje wybory dotyczące zgody, zwykle poprzez interakcję z banerem z prośbą o zgodę na przetwarzanie danych, kod szablonu powinien odpowiednio zaktualizować stany zgody użytkownika za pomocą interfejsu API updateConsentState.
Poniższy przykład pokazuje wywołanie updateConsentState w przypadku użytkownika, który wyraził zgodę na wszystkie rodzaje przechowywania danych. Ten przykład ponownie używa zakodowanych na stałe wartości granted, ale w praktyce powinny one być określane w czasie działania na podstawie zgody użytkownika zebranej przez platformę CMP.
const updateConsentState = require('updateConsentState');
updateConsentState({
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'analytics_storage': 'granted',
'functionality_storage': 'granted',
'personalization_storage': 'granted',
'security_storage': 'granted'
});
Informacje o działaniu w poszczególnych regionach
Aby ustawić domyślne stany zgody, które mają obowiązywać w przypadku użytkowników z określonych obszarów,
w szablonie określ region (zgodnie z normą ISO
3166-2). Używanie wartości regionów umożliwia użytkownikom szablonu przestrzeganie przepisów regionalnych bez utraty informacji od użytkowników spoza tych regionów. Jeśli w poleceniu setDefaultConsentState nie określono regionu, wartość obowiązuje we wszystkich innych regionach.
Na przykład poniższy kod ustawia domyślny stan analytics_storage na denied w przypadku użytkowników z Hiszpanii i Alaski oraz na granted w przypadku wszystkich innych:analytics_storage
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
Pierwszeństwo ma najbardziej szczegółowy poziom
Jeśli na tej samej stronie występują 2 domyślne polecenia zgody z wartościami dla regionu i podregionu, obowiązuje polecenie z bardziej szczegółowym regionem. Jeśli
na przykład masz ustawiony stan ad_storage na 'granted' w przypadku regionu US i
ad_storage na 'denied' w przypadku regionu US-CA, użytkownik z Kalifornii
będzie miał zastosowane bardziej szczegółowe ustawienie US-CA.
| Region | ad_storage |
Zachowanie |
|---|---|---|
| US | 'granted' |
Dotyczy użytkowników w Stanach Zjednoczonych, którzy nie znajdują się w Kalifornii. |
| US-CA | 'denied' |
Dotyczy użytkowników w Kalifornii. |
| Nie określono | 'granted' |
Używa wartości domyślnej 'granted'. W tym przykładzie dotyczy to użytkowników, którzy nie znajdują się w Stanach Zjednoczonych ani w Kalifornii.
|
Dodatkowe metadane
Za pomocą interfejsu API gtagSet możesz ustawić te opcjonalne parametry:
Te interfejsy API są dostępne tylko w środowisku piaskownicy szablonów Menedżera tagów Google.
Przekazywanie informacji o kliknięciu reklamy, identyfikatorze klienta i identyfikatorze sesji w adresach URL
Gdy użytkownik wejdzie na stronę reklamodawcy po kliknięciu reklamy, informacje o reklamie mogą zostać dołączone do adresów URL stron docelowych jako parametr zapytania. Aby zwiększyć dokładność konwersji, tagi Google zwykle zapisują te informacje we własnych plikach cookie w domenie reklamodawcy.
Jeśli jednak stan ad_storage ma wartość denied, tagi Google nie zapiszą tych informacji lokalnie. Aby w takim przypadku poprawić jakość pomiaru kliknięć reklam, reklamodawcy mogą opcjonalnie przekazywać informacje o kliknięciu reklamy za pomocą parametrów adresu URL na różnych stronach za pomocą funkcji przekazywania danych w adresie URL.
Podobnie, jeśli stan analytics_storage ma wartość denied, przekazywanie danych w adresie URL może służyć do wysyłania statystyk opartych na zdarzeniach i sesjach (w tym konwersji) bez plików cookie na różnych stronach.
Aby korzystać z przekazywania danych w adresie URL, musisz spełnić te warunki:
- Na stronie znajdują się tagi Google, które uwzględniają ustawienia zgody użytkownika.
- Witryna wyraziła zgodę na korzystanie z funkcji przekazywania danych w adresie URL.
- Na stronie wdrożono tryb uzyskiwania zgody.
- Link wychodzący odsyła do tej samej domeny co domena bieżącej strony.
- W adresie URL znajduje się parametr gclid lub dclid (tylko tagi Google Ads i Floodlight).
Twój szablon powinien umożliwiać użytkownikowi skonfigurowanie, czy chce włączyć to ustawienie. Ten kod szablonu służy do ustawiania wartości true dla parametru url_passthrough:
gtagSet('url_passthrough', true);
Usuwanie danych reklam
Gdy stan ad_storage ma wartość denied, nie są ustawiane żadne nowe pliki cookie na potrzeby reklam. Dodatkowo nie będą używane pliki cookie firm zewnętrznych ustawione wcześniej na stronach google.com i doubleclick.net. Dane wysyłane do Google będą nadal zawierać pełny adres URL strony, w tym informacje o kliknięciu reklamy w parametrach adresu URL.
Aby dodatkowo usunąć dane reklam, gdy stan ad_storage ma wartość denied, ustaw wartość true dla parametru ads_data_redaction.
Gdy parametr ads_data_redaction ma wartość true, a parametr ad_storage ma wartość denied, identyfikatory kliknięć reklam wysyłane w żądaniach sieciowych przez tagi Google Ads i Floodlight zostaną usunięte.
gtagSet('ads_data_redaction', true);
Identyfikator dewelopera
Jeśli jesteś dostawcą platformy CMP z identyfikatorem dewelopera wydanym przez Google, użyj tej metody, aby ustawić go jak najwcześniej w szablonie.
Identyfikator dewelopera jest potrzebny tylko wtedy, gdy implementacja będzie używana w wielu witrynach przez niezwiązane ze sobą firmy lub podmioty. Jeśli implementacja będzie używana przez 1 witrynę lub podmiot, nie musisz ubiegać się o identyfikator dewelopera.
gtagSet('developer_id.<your_developer_id>', true);
Udostępnianie dokumentacji użytkownikom
Użytkownicy będą używać Twojego szablonu zgody do konfigurowania tagu, który zbiera zgodę użytkownika. Udostępnij użytkownikom dokumentację, która wyjaśnia te sprawdzone metody:
- Jak ustawić domyślne ustawienia zgody w tabeli Ustawienia.
- Jak skonfigurować domyślne ustawienia zgody dla różnych regionów, dodając dodatkowe wiersze tabeli.
- Jak uruchomić tag za pomocą reguły Inicjacja zgody – Wszystkie strony.
Dalsze kroki
Jeśli chcesz udostępnić swój szablon wszystkim użytkownikom Menedżera tagów Google, prześlij go do Galerii szablonów społeczności.