המאמר הזה מיועד למפתחים שמנהלים פתרון לניהול הסכמה באתרים שמשתמשים ב-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 |
מאפשרת שמירה של נתונים שקשורים לאבטחה, כמו פונקציונליות אימות, מניעת הונאות והגנה אחרת על משתמשים |
יצירת תבנית הסכמה חדשה
התכונה 'סטטוס הסכמה' עוקבת אחר הבחירות של המבקרים בנוגע להסכמה, ובדיקות ההסכמה של התגים עוזרות לוודא שהתנהגות התגים משתנה בהתאם. כשיוצרים תבנית הסכמה חדשה, כדאי לפעול לפי השיטות המומלצות:
משתמשים בממשקי ה-API של סטטוס ההסכמה ב-Tag Manager setDefaultConsentState ו-updateConsentState במקום
gtag consent
.אפשר להגדיר מצבי הסכמה שמוגדרים כברירת מחדל מיד לאחר ההפעלה, באמצעות הטריגר Consent Initialization - All Pages.
פלטפורמת ה-CMP צריכה לבקש מהמבקר בהקדם האפשרי לאשר או לדחות את ההסכמה לגבי כל סוגי ההסכמה הרלוונטיים.
כשהמבקרים מציינים את הסכמתם, פלטפורמת ה-CMP צריכה להעביר את מצב ההסכמה המעודכן.
1. יצירת תבנית חדשה
בגישת ההטמעה הזו נעשה שימוש בשדה אחד בתבנית שבו נמצא מצב ההסכמה שמוגדר כברירת מחדל. קוד ההטמעה קורא את השדה הזה כדי להגדיר את מצב ההסכמה שהוגדר כברירת מחדל בזמן ריצה. בפקודת העדכון, הקוד שלכם מנסה לקרוא קובץ cookie שהוגדר על ידי הפתרון לקבלת הסכמה, כדי לשמור את הבחירות של המבקרים. נוסף על כך, צריך להגדיר קריאה חוזרת (callback) ל-
updateConsentState
כדי לטפל במקרה שהמבקרים עוד לא החליטו לגבי ההסכמה שלהם או החליטו לשנות את ההסכמה.
כדי ליצור תבנית הסכמה:
- נכנסים לחשבון Google Tag Manager.
- בחלונית הניווט הימנית, בוחרים באפשרות תבניות.
- בחלונית Tag Templates (תבניות התגים), לוחצים על New (חדש).
כדי להגדיר מצבי הסכמה שמוגדרים כברירת מחדל:
- בוחרים בכרטיסייה שדות ואז לוחצים על הוספת שדה > טבלת פרמטרים.
- שינוי השם לשם
defaultSettings
. - מרחיבים את השדה.
- יש לעדכן את השם המוצג לערך
Default settings
. - לוחצים על Add column (הוספת עמודה), בוחרים באפשרות Text variable (קלט טקסט), משנים את השם ל-
region
ומסמנים את התיבה דרישה לערכי עמודה שיהיו ייחודיים. - מרחיבים את העמודה ומשנים את השם המוצג ל-
Region (leave blank to have consent apply to all regions)
. ההצהרה בסוגריים היא תיעוד למשתמשי התבניות. מידע נוסף על הגדרת ברירות מחדל לקבלת הסכמה באזורים שונים - לוחצים על הוספת עמודה, בוחרים קלט טקסט ומשנים את השם ל-
granted
. - מרחיבים את העמודה ומשנים את השם המוצג ל-
Granted Consent Types (comma separated)
. - לוחצים על הוספת עמודה, בוחרים קלט טקסט ומשנים את השם ל-
denied
. - הרחבת העמודה ושינוי השם המוצג ל-
Denied Consent Types (comma separated)
אופציונלי: כדי להוסיף תמיכה בהשמטת נתוני מודעות:
- לוחצים על Add Field (הוספת שדה), בוחרים באפשרות Checkbox ומשנים את שם השדה ל-
ads_data_redaction
. - עדכון השם המוצג ל
Redact Ads Data
בקישור הבא אפשר לקבל מידע נוסף על התנהגות קובצי cookie במהלך צנזור נתוני מודעות
אופציונלי: כדי להוסיף תמיכה בהעברת פרמטרים של כתובת אתר:
- לוחצים על Add Field (הוספת שדה), בוחרים באפשרות Checkbox ומשנים את שם השדה ל-
url_passthrough
. - עדכון השם המוצג ל
Pass through URL parameters
מידע נוסף על העברה דרך פרמטרים של כתובות אתרים
כך מוסיפים את קוד ההטמעה:
- פותחים את הכרטיסייה Code (קוד) בעורך התבניות.
- בדוגמת הקוד הבאה, עורכים את השדות של placeholders.
- מעתיקים את הקוד ומחליפים אותו בקוד הסטנדרטי שבעורך התבניות.
- שומרים את התבנית.
// 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 (גישה למצב ההסכמה).
- לוחצים על הוספת סוג הסכמה.
- לוחצים על התיבה ובוחרים
ad_storage
בתפריט הנפתח. - מסמנים את האפשרות כתיבה.
- לוחצים על הוספה.
- חוזרים על שלבים 2-5 עבור
ad_user_data
,ad_personalization
ו-analytics_storage
. אם אתם צריכים סוגי הסכמה נוספים, מוסיפים אותם באותו אופן. - לוחצים על שמירה.
כדי להוסיף הרשאות לגישה לקובצי cookie:
- בוחרים בכרטיסייה Permissions ולוחצים על Reads cookie value(s) .
- בקטע 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' . בדוגמה הזו, הדבר רלוונטי למשתמשים שאינם בארה"ב או בקנדה
|
מטא-נתונים נוספים
אפשר להשתמש ב-gtagSet API כדי להגדיר את הפרמטרים האופציונליים הבאים:
ממשקי ה-API האלה זמינים רק בסביבת ה-Sandbox של תבנית GTM.
העברה של פרטים לגבי קליק על מודעה, מזהה לקוח ומזהה סשן בכתובות URL
כאשר מבקר מגיע לאתר של מפרסם לאחר לחיצה על מודעה, מידע על המודעה עשוי להתווסף לכתובות של דפי הנחיתה כפרמטר של שאילתה. כדי לשפר את הדיוק של ההמרות, תגי Google בדרך כלל מאחסנים את המידע הזה בקובצי cookie מהדומיין הנוכחי בדומיין של המפרסם.
עם זאת, אם הערך של ad_storage
הוא denied
, תגי Google לא ישמרו את המידע הזה באופן מקומי. כדי לשפר את האיכות של מדידת הקליקים על מודעות, במקרה הזה, המפרסמים יכולים
להעביר את המידע לגבי קליקים על מודעות באמצעות פרמטרים של כתובת אתר בדפים שונים, בעזרת תכונה שנקראת Passthrough של כתובת URL.
באופן דומה, אם קובעים במדיניות analytics_storage
את הערך שנדחה, אפשר להשתמש בהמרת כתובת URL של כתובת URL כדי לשלוח ניתוח נתונים שמבוסס על אירועים וסשנים (כולל המרות) בלי להשתמש בקובצי cookie בדפים שונים.
כדי להשתמש בהמרת כתובת URL, יש לעמוד בתנאים הבאים:
- תגי Google שתומכים בסטטוס הסכמה נמצאים בדף.
- האתר הצטרף לשימוש בתכונה 'העברת כתובת אתר'.
- סטטוס ההסכמה הוטמע בדף.
- הקישור היוצא מתייחס לאותו דומיין שמופיע בדומיין של הדף הנוכחי.
- gclid/dclid קיים בכתובת ה-URL (תגים של Google Ads ו-Floodlight בלבד)
התבנית צריכה לאפשר למשתמש התבנית לקבוע אם הוא רוצה להפעיל את ההגדרה הזו. קוד התבנית הבא משמש להגדרת url_passthrough כ-true:
gtagSet('url_passthrough', true);
צנזור נתוני מודעות
כשהדוח ad_storage
נדחה, לא מוגדרים קובצי cookie חדשים למטרות פרסום. כמו כן, לא ייעשה שימוש בקובצי cookie של צד שלישי שהוגדרו בעבר ב-google.com וב-doubleclick.net. הנתונים שנשלחים ל-Google עדיין כוללים את כתובת ה-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, העלו אותה לגלריית תבניות הקהילה.