המסמך הזה מיועד למפתחים שמנהלים כלי לניהול הסכמה באתרים שמשתמשים ב-Google Tag Manager (GTM).
בדף הזה מוסבר על סוגי הסכמה ב-Google Tag Manager ואיך לשלב אותם עם כלי לניהול הסכמה.
למה כדאי להשתמש בתבנית ליצירת תג להסכמה?
כשמספקים תבנית ליצירת תג, המשתמשים יכולים לשלב את פתרון ההסכמה שלכם בלי לכתוב קוד, וכך לחסוך זמן ומאמץ.
המשתמשים יכולים להגדיר מצבי הסכמה שמוגדרים כברירת מחדל באמצעות תבנית של סטטוס הסכמה ולהעביר את בחירות המבקרים בנושא פרטיות אל Google Tag Manager. כך אפשר להבטיח פעולה אופטימלית של תגי Google ותגים של צד שלישי שתומכים במצב הסכמה.
יוצרי תבניות יכולים להטמיע תבניות של סטטוס הסכמה לשימוש פנימי או לפרסם אותן בגלריית תבניות הקהילה כדי להפוך אותן לזמינות לכולם. ספקי פלטפורמות לניהול הסכמה (CMP) שמציעים תבניות של סטטוס הסכמה יכולים להופיע במסמכי סטטוס ההסכמה שלנו, והתבניות שלהם יכולות להופיע בכלי לבחירת תבניות בגלריה.
מצב ההסכמה וסוגי ההסכמה
התגים של Google ושל צד שלישי משנים את אופן הפעולה שלהם בהתאם לסטטוס ההסכמה, שהוא granted או denied. הם יכולים לכלול בדיקות הסכמה מובְנות לכל אחד מסוגי ההסכמה הבאים:
| סוג ההסכמה | תיאור |
|---|---|
ad_storage |
מאפשרת שמירה של נתונים (למשל קובצי Cookie) שקשורים לפרסום. |
ad_user_data |
מגדיר הסכמה לשליחת נתוני משתמשים אל Google למטרות פרסום באינטרנט. |
ad_personalization |
מגדיר הסכמה לפרסום מותאם אישית. |
analytics_storage |
מאפשר אחסון של נתונים (כמו קובצי Cookie) שקשורים לניתוח (למשל משך הביקור). |
functionality_storage |
מאפשר אחסון של נתונים שתומכים בפונקציונליות של האתר או האפליקציה, למשל הגדרות שפה. |
personalization_storage |
מאפשר לאחסן נתונים שקשורים להתאמה אישית, למשל סרטונים מומלצים. |
security_storage |
מאפשרת שמירה של נתונים שקשורים לאבטחה, כמו פונקציונליות אימות, מניעת הונאות ואמצעים אחרים להגנה על משתמשים |
יצירת תבנית חדשה להסכמה
סטטוס ההסכמה עוקב אחרי הבחירות של המבקרים בנושא פרטיות, ובדיקות ההסכמה של התגים מוודאות שאופן הפעולה של התגים משתנה בהתאם. כשיוצרים תבנית חדשה לבקשת הסכמה, כדאי לפעול לפי השיטות המומלצות:
במקום
gtag consent, משתמשים בממשקי ה-API של סטטוס ההסכמה ב-Tag Manager setDefaultConsentState ו-updateConsentState.הגדרת סטטוסי הסכמה שמוגדרים כברירת מחדל מיד אחרי הפעלת הטריגר Consent Initialization - All Pages (הפעלת הגדרות הסכמה – כל הדפים).
פלטפורמת ה-CMP צריכה להציג למבקרים בקשה להבעת הסכמה או לסירוב להבעת הסכמה לגבי כל סוגי ההסכמה הרלוונטיים, מוקדם ככל האפשר.
כשמבקר מציין את הבחירה שלו בנוגע להסכמה, פלטפורמת ה-CMP צריכה להעביר את מצב ההסכמה המעודכן.
1. יצירת תבנית חדשה
בגישה הזו להטמעה משתמשים בשדה אחד בתבנית כדי להגדיר את מצב ההסכמה שמוגדר כברירת מחדל. קוד ההטמעה קורא את השדה הזה כדי להגדיר את מצב ההסכמה שמוגדר כברירת מחדל בזמן הריצה. בפקודת העדכון, הקוד מנסה לקרוא קובץ Cookie שהוגדר על ידי פתרון לניהול הסכמה כדי לאחסן את בחירות ההסכמה של המבקרים. תגדירו גם קריאה חוזרת (callback) ל-
updateConsentStateכדי לטפל במקרים שבהם המבקרים עדיין לא בחרו את העדפות ההסכמה שלהם או החליטו לשנות את ההסכמה שלהם.
כדי ליצור תבנית בקשת הסכמה:
- נכנסים לחשבון Google Tag Manager.
- בתפריט הניווט שמימין, בוחרים באפשרות תבניות.
- בחלונית Tag Templates (תבניות תגים), לוחצים על New (חדש).
כדי להגדיר מצבי הסכמה שיוגדרו כברירת מחדל:
- בוחרים בכרטיסייה Fields (שדות), לוחצים על Add Field > Param table (הוספת שדה > טבלת פרמטרים).
- משנים את השם ל-
defaultSettings. - מרחיבים את השדה.
- מעדכנים את השם המוצג ל-
Default settings. - לוחצים על הוספת עמודה, בוחרים באפשרות הזנת טקסט, משנים את השם ל-
regionומסמנים את התיבה נדרש שערכי העמודה יהיו ייחודיים. - מרחיבים את העמודה ומשנים את השם המוצג ל-
Region (leave blank to have consent apply to all regions). ההצהרה שבסוגריים היא תיעוד למשתמשים בתבנית. מידע נוסף על הגדרת ערכי ברירת מחדל להסכמה לאזורים שונים - לוחצים על הוספת עמודה, בוחרים באפשרות קלט טקסט ומשנים את השם ל-
granted. - מרחיבים את העמודה ומשנים את השם המוצג ל-
Granted Consent Types (comma separated). - לוחצים על הוספת עמודה, בוחרים באפשרות קלט טקסט ומשנים את השם ל-
denied. - מרחיבים את העמודה ומשנים את השם המוצג ל
Denied Consent Types (comma separated)
אופציונלי: כדי להוסיף תמיכה בהשמטת נתונים של מודעות:
- לוחצים על הוספת שדה, בוחרים באפשרות תיבת סימון ומשנים את שם השדה ל-
ads_data_redaction. - מעדכנים את השם לתצוגה ל-
Redact Ads Data
מידע נוסף על אופן הפעולה של קובצי Cookie עם השמטת נתונים במודעות
אופציונלי: כדי להוסיף תמיכה בהעברה של פרמטרים של כתובות URL:
- לוחצים על הוספת שדה, בוחרים באפשרות תיבת סימון ומשנים את שם השדה ל-
url_passthrough. - מעדכנים את השם לתצוגה ל-
Pass through URL parameters
כדי להוסיף את קוד ההטמעה:
- פותחים את הכרטיסייה קוד בכלי לעריכת תבניות.
- בדוגמת הקוד שלמטה, עורכים את שדות ה-placeholder.
- מעתיקים את הקוד ומחליפים איתו את קוד ה-boilerplate בעורך התבניות.
- שומרים את התבנית.
// 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();
בשלב הבא, מגדירים הרשאות לגישה למצב ההסכמה ולגישה לקובצי Cookie.
כדי להוסיף הרשאות לניהול מצבי הסכמה:
- בוחרים בכרטיסייה הרשאות ולוחצים על מצב ההסכמה לגישה.
- לוחצים על הוספה של סוג הסכמה.
- לוחצים על התיבה ובוחרים באפשרות
ad_storageמהתפריט הנפתח. - מסמנים את התיבה כתיבה.
- לוחצים על הוספה.
- חוזרים על שלבים 2-5 עבור
ad_user_data,ad_personalizationו-analytics_storage. אם אתם צריכים סוגי הסכמה נוספים, תוכלו להוסיף אותם באותו אופן. - לוחצים על שמירה.
כדי להוסיף הרשאות לגישה לקובצי Cookie:
- לוחצים על הכרטיסייה Permissions (הרשאות) ואז על Reads cookie value(s) (קריאת הערכים של קובצי ה-Cookie).
- בקטע Specific (ספציפי), מזינים את השמות של כל קובצי ה-Cookie שהקוד צריך לקרוא כדי לקבוע את בחירות ההסכמה של המשתמש, שם אחד בכל שורה.
- לוחצים על שמירה.
2. יצירת בדיקות יחידה
במאמר בדיקות מוסבר איך ליצור בדיקות לתבנית.
3. שילוב התבנית עם הפתרון לניהול הסכמה
בדוגמת הקוד הבאה אפשר לראות איך אפשר לשלב את התבנית הזו עם הקוד של כלי לניהול הסכמה שלכם על ידי הוספת listener:
// 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);
});
};
עדכון מצב ההסכמה
אחרי שמבקר באתר מציין את הבחירות שלו בנוגע להסכמה, בדרך כלל באמצעות אינטראקציה עם באנר בקשת הסכמה, קוד התבנית צריך לעדכן את מצבי ההסכמה בהתאם באמצעות updateConsentState API.
בדוגמה הבאה מוצגת קריאה לפונקציה updateConsentState עבור מבקר שהביע הסכמה לכל סוגי האחסון. שוב, בדוגמה הזו נעשה שימוש בערכים שמוגדרים מראש ל-granted, אבל בפועל, הערכים האלה צריכים להיקבע בזמן הריצה על סמך ההסכמה של המבקר שנאספת על ידי פלטפורמת ה-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'
});
מידע על אופן הדיווח על בעיות באזורים ספציפיים
כדי להגדיר מצבי הסכמה שחלים על מבקרים מאזורים מסוימים, צריך לציין אזור (בהתאם לתקן ISO 3166-2) בתבנית. שימוש בערכי אזור מאפשר למשתמשים בתבנית לעמוד בדרישות של תקנות אזוריות בלי לאבד מידע ממבקרים מחוץ לאזורים האלה. אם לא מציינים אזור בפקודה setDefaultConsentState, הערך חל על כל האזורים האחרים.
לדוגמה, ההגדרה הבאה קובעת את סטטוס ברירת המחדל של analytics_storage ל-denied למבקרים מספרד ומאלסקה, ואת הסטטוס analytics_storage ל-granted לכל שאר המבקרים:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
הספציפי ביותר מקבל עדיפות
אם שתי פקודות ברירת מחדל להסכמה מופיעות באותו דף עם ערכים לאזור ולאזור משנה, הפקודה עם האזור הספציפי יותר תיכנס לתוקף. לדוגמה, אם הגדרתם את ad_storage ל-'granted' לאזור US ואת ad_storage ל-'denied' לאזור US-CA, המערכת תחיל את ההגדרה הספציפית יותר US-CA על מבקר מקליפורניה.
| אזור | ad_storage |
התנהגות |
|---|---|---|
| ארה"ב | 'granted' |
רלוונטי למשתמשים בארה"ב שלא נמצאים בקליפורניה |
| US-CA | 'denied' |
רלוונטי למשתמשים בארה"ב ובקליפורניה |
| לא צוין | 'granted' |
משתמשים בערך ברירת המחדל 'granted'. בדוגמה הזו, זה חל על משתמשים שלא נמצאים בארה"ב או בארה"ב-קליפורניה
|
מטא-נתונים נוספים
אפשר להשתמש ב-gtagSet API כדי להגדיר את הפרמטרים האופציונליים הבאים:
ממשקי ה-API האלה זמינים רק בסביבת ארגז החול של תבניות GTM.
העברת מידע על קליקים על מודעות, מזהה לקוח ומזהה סשן בכתובות URL
כשמבקר מגיע לאתר של מפרסם אחרי שהוא לוחץ על מודעה, יכול להיות שפרטי המודעה יצורפו לכתובות של דפי הנחיתה כפרמטר של שאילתה. כדי לשפר את הדיוק של נתוני ההמרות, תגי Google בדרך כלל שומרים את המידע הזה בקובצי Cookie מהדומיין הנוכחי בדומיין של המפרסם.
עם זאת, אם הערך של ad_storage הוא denied, תגי Google לא ישמרו את המידע הזה באופן מקומי. כדי לשפר את איכות המדידה של קליקים על מודעות במקרה הזה, מפרסמים יכולים להעביר את המידע על קליקים על מודעות באמצעות פרמטרים של כתובות URL בדפים שונים, באמצעות תכונה שנקראת העברת פרמטרים של כתובות URL.
באופן דומה, אם הערך של analytics_storage הוא denied, אפשר להשתמש בהעברת פרמטרים בכתובת URL כדי לשלוח נתונים אנליטיים מבוססי-אירועים ומבוססי-סשנים (כולל המרות) בין דפים ללא קובצי Cookie.
כדי להשתמש בהעברת כתובות URL, התנאים הבאים צריכים להתקיים:
- תגי Google Tag עם תמיכה מובנית בסטטוס הסכמה מוצבים בדף.
- האתר הצטרף לשימוש בתכונה 'העברת כתובת URL'.
- סטטוס ההסכמה הוטמע בדף.
- הקישור היוצא מפנה לאותו דומיין של הדף הנוכחי.
- הפרמטר gclid/dclid מופיע בכתובת ה-URL (תגי Google Ads ו-Floodlight בלבד)
בתבנית צריך להיות אפשר למשתמש להגדיר אם הוא רוצה להפעיל את ההגדרה הזו או לא. קוד התבנית הבא משמש להגדרת הערך True לפרמטר url_passthrough:
gtagSet('url_passthrough', true);
השמטת נתוני מודעות
כשמוגדרת דחייה של ad_storage, לא מוגדרים קובצי Cookie חדשים למטרות פרסום. בנוסף, לא יהיה שימוש בקובצי Cookie של צד שלישי שהוגדרו בעבר ב-google.com וב-doubleclick.net. הנתונים שנשלחים ל-Google עדיין יכללו את כתובת ה-URL המלאה של הדף, כולל מידע לגבי קליקים על מודעות בפרמטרים של כתובת ה-URL.
כדי לצנזר עוד יותר את נתוני המודעות כשבקשת ad_storage נדחית, צריך להגדיר את ads_data_redaction כ-true.
אם הערך של ads_data_redaction הוא true והגישה ל-ad_storage נדחית, מזהי הקליקים על המודעות שנשלחים בבקשות לרשת על ידי תגי Google Ads ו-Floodlight יוסתרו.
gtagSet('ads_data_redaction', true);
מזהה המפתח
אם אתם ספקי CMP עם מזהה מפתח שניתן על ידי Google, אתם יכולים להשתמש בשיטה הבאה כדי להגדיר את זה מוקדם ככל האפשר בתבנית שלכם.
מזהה מפתח נדרש רק אם ההטמעה תשמש חברות או ישויות לא קשורות באתרים שונים. אם ההטמעה תשמש אתר או ישות אחת, אין צורך להגיש בקשה למזהה מפתח.
gtagSet('developer_id.<your_developer_id>', true);
מתן תיעוד למשתמשים
המשתמשים שלכם ישתמשו בתבנית ההסכמה כדי להגדיר תג לאיסוף הסכמה מהמשתמשים. מספקים למשתמשים מסמכים עם הסבר על השיטות המומלצות הבאות:
- איך מגדירים ברירות מחדל להסכמה בטבלת ההגדרות.
- איך מגדירים ערכי ברירת מחדל להסכמה שמתייחסים לאזורים שונים על ידי הוספה של שורות נוספות לטבלה.
- מפעילים את התג בטריגר Consent Initialization - All Pages (הפעלת הגדרות הסכמה – כל הדפים).
השלבים הבאים
אם רוצים לספק את התבנית לכל המשתמשים ב-Tag Manager, מעלים אותה לCommunity Template Gallery (גלריית תבניות הקהילה).