המאמר הזה מיועד למפתחים שמנהלים פתרון לניהול הסכמה באתרים שמשתמשים ב-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 שהוגדר על ידי הפתרון לקבלת הסכמה, כדי לשמור את הבחירות של המבקרים בנושא פרטיות. בנוסף, צריך להגדיר קריאה חוזרת ל-
updateConsentState
כדי לטפל במקרים שבהם המבקרים עדיין לא בחרו באפשרות ההסכמה או מחליטים לשנות את מצב ההסכמה.
כדי ליצור תבנית הסכמה:
- נכנסים לחשבון Google Tag Manager.
- בתפריט הניווט הימני, בוחרים באפשרות תבניות.
- בחלונית Tag Templates (תבניות תגים), לוחצים על New (חדש).
כדי להגדיר מצבי הסכמה שמוגדרים כברירת מחדל:
- בוחרים בכרטיסייה Fields ולוחצים על Add Field > Param table.
- משנים את השם לשם
defaultSettings
. - מרחיבים את השדה.
- מעדכנים את השם המוצג ל-
Default settings
. - לוחצים על Add column (הוספת עמודה), בוחרים באפשרות Text input (קלט טקסט), משנים את השם ל-
region
ומסמנים את התיבה Require column values to be unique (חובה שהערכים בעמודה יהיו ייחודיים). - מרחיבים את העמודה ומשנים את השם המוצג ל-
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 בהשמטת נתוני מודעות
אופציונלי: כדי להוסיף תמיכה בהעברת פרמטרים של כתובות אתרים:
- לוחצים על Add Field (הוספת שדה), בוחרים באפשרות Checkbox ומשנים את שם השדה ל-
url_passthrough
. - מעדכנים את השם המוצג ל-
Pass through URL parameters
כדי להוסיף את קוד ההטמעה:
- פותחים את הכרטיסייה Code (קוד) בכלי לעריכת התבניות.
- עורכים את שדות 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 COOKIE_NAME = 'Your_cookie_name';
/*
* Splits the input string using comma as a delimiter, returning an array of
* strings
*/
const splitInput = (input) => {
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)
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 settings = getCookieValues(COOKIE_NAME);
if (typeof settings !== 'undefined') {
onUserConsent(settings);
}
/**
* 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.
כדי להוסיף הרשאות לניהול מצבי ההסכמה:
- בוחרים בכרטיסייה Permissions ולוחצים על Accesses consent state.
- לוחצים על Add consent type (הוספת סוג ההסכמה).
- לוחצים על התיבה ובוחרים באפשרות
ad_storage
בתפריט הנפתח. - מסמנים את התיבה כתיבה.
- לוחצים על הוספה.
- חוזרים על שלבים 2 עד 5 בשביל
ad_user_data
,ad_personalization
ו-analytics_storage
. אם אתם זקוקים לסוגים נוספים של הסכמה, תוכלו להוסיף אותם באותו אופן. - לוחצים על שמירה.
כדי להוסיף הרשאות גישה לקובצי cookie:
- לוחצים על הכרטיסייה Permissions (הרשאות) ואז על Reads cookie value(s) (קריאת הערכים של קובצי ה-Cookie).
- בקטע specific (ספציפי), מזינים את השמות של כל אחד מקובצי ה-cookie שהקוד צריך לקרוא כדי לקבוע את אפשרויות הבחירה של המשתמש בנושא פרטיות, שם אחד בכל שורה.
- לוחצים על שמירה.
2. יצירת בדיקות יחידה
לקבלת מידע על יצירת בדיקות לתבנית, אפשר לעיין בקטע בדיקות.
3. שילוב התבנית עם הפתרון לניהול הסכמה
הקוד הבא מציג דוגמה אחת לאופן שבו אפשר לשלב את התבנית הזו עם הקוד של הפתרון לניהול הסכמה על ידי הוספת האזנה:
// 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);
});
};
עדכון מצב ההסכמה
אחרי שמבקר באתר מציין את הבחירות שלו בנוגע להסכמה, בדרך כלל דרך אינטראקציה עם באנר בקשת הסכמה, קוד התבנית אמור לעדכן את מצבי ההסכמה בהתאם באמצעות ה-API updateConsentState.
בדוגמה הבאה מוצגת הקריאה ל-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' |
רלוונטי למשתמשים בארה"ב שלא נמצאים בקנדה |
ארה"ב-קנדה | 'denied' |
רלוונטי למשתמשים בארה"ב ובקנדה |
לא צוין | 'granted' |
נעשה שימוש בערך ברירת המחדל 'granted' . בדוגמה הזו, הכלל הזה חל על משתמשים שלא נמצאים בארה"ב או בארה"ב-CA
|
מטא-נתונים נוספים
אפשר להשתמש ב-API gtagSet כדי להגדיר את הפרמטרים האופציונליים הבאים:
ממשקי ה-API האלה זמינים רק בסביבת 'ארגז החול' של התבניות ב-GTM.
העברה של פרטים לגבי קליקים על מודעות, מזהה לקוח ומזהה סשן בכתובות URL
כשמבקר מגיע לאתר של מפרסם אחרי לחיצה על מודעה, יכול להיות שמידע על המודעה יצורף לכתובות דפי הנחיתה כפרמטר של שאילתה. כדי לשפר את הדיוק של ההמרות, בדרך כלל תגי Google מאחסנים את המידע הזה בקובצי cookie מהדומיין הנוכחי בדומיין של המפרסם.
עם זאת, אם הערך של ad_storage
הוא denied
, תגי Google לא ישמרו את המידע הזה באופן מקומי. כדי לשפר את איכות המדידה של קליקים על מודעות במקרה כזה, מפרסמים יכולים להעביר את המידע על קליקים על מודעות דרך פרמטרים של כתובות URL בדפים שונים באמצעות תכונה שנקראת העברה אוטומטית של כתובות URL.
באופן דומה, אם הערך של analytics_storage
מוגדר כ'נדחה', אפשר להשתמש בהעברה אוטומטית של כתובות URL כדי לשלוח ניתוח נתונים שמבוסס על אירועים ועל סשנים (כולל המרות) ללא קובצי cookie בדפים שונים.
כדי להשתמש בהעברה אוטומטית של כתובות URL, צריך לעמוד בתנאים הבאים:
- בדף יש תגי Google Tag שמותאמים לקבלת הסכמה.
- האתר הביע הסכמה לשימוש בתכונה 'העברת כתובת URL'.
- סטטוס ההסכמה הוטמע בדף.
- הקישור היוצא מפנה לאותו דומיין כמו הדומיין של הדף הנוכחי.
- כתובת ה-URL מכילה את הפרמטר gclid/dclid (תגי Google Ads ו-Floodlight בלבד)
התבנית צריכה לאפשר למשתמש התבנית לקבוע אם הוא רוצה להפעיל את ההגדרה הזו או לא. קוד התבנית הבא משמש כדי להגדיר את url_passthrough כ-true:
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);
שליחת מסמכים למשתמשים
המשתמשים ישתמשו בתבנית ההסכמה כדי להגדיר תג לאיסוף הסכמה מהמשתמשים. מספקים למשתמשים מסמכי עזרה שמסבירים את השיטות המומלצות הבאות:
- איך מגדירים את ברירת המחדל להסכמה בטבלה Settings.
- איך להגדיר ערכי ברירת מחדל להסכמה לאזורים שונים על ידי הוספת שורות בטבלה.
- מפעילים את התג בטריגר Consent Initialization - All Pages (הפעלת הגדרות הסכמה – כל הדפים).
השלבים הבאים
אם אתם רוצים לספק את התבנית לכל המשתמשים ב-Tag Manager, תוכלו להעלות אותה אל גלריית התבניות של הקהילה.