המאמר הזה מיועד למפתחים שמתחזקים פתרון לניהול הסכמה ב- אתרים שמשתמשים ב-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 |
מאפשרת שמירה של נתונים שקשורים לאבטחה, כמו אימות פונקציונליות, מניעת הונאות ואמצעים אחרים להגנה על המשתמשים |
יצירה של תבנית הסכמה חדשה
התכונה 'סטטוס הסכמה' עוקבת אחרי הבחירות של המבקרים בנושא פרטיות ובדיקות ההסכמה לתגים כדי לוודא שהתנהגות התגים משתנה בהתאם. כשיוצרים תבנית חדשה להסכמה, מומלץ לפעול לפי השיטות המומלצות הבאות:
להשתמש ב-setDefaultConsentState בממשקי ה-API של סטטוס ההסכמה ב-Tag Manager updateConsentState במקום
gtag consent
.להגדיר את מצבי ברירת המחדל להסכמה מיד אחרי ההפעלה באמצעות הטריגר Consent Initialization - All Pages (הפעלת הגדרות הסכמה – כל הדפים).
פלטפורמת ה-CMP צריכה להציג בקשה למבקר בהקדם האפשרי כדי לאשר או לדחות את ההסכמה לכל סוגי ההסכמה הרלוונטיים.
כשמבקרים מציינים את הבחירות שלהם בנוגע להסכמה, פלטפורמת ה-CMP צריכה להעביר את העדכון המעודכן את מצב ההסכמה.
1. יצירת תבנית חדשה
בגישת ההטמעה הזו נעשה שימוש בשדה אחד בתבנית כדי לשמור את מצב ההסכמה שמוגדר כברירת מחדל. קוד ההטמעה קורא את השדה הזה כדי להגדיר ברירת המחדל של מצב ההסכמה בזמן הריצה. בפקודת העדכון, הקוד מנסה לקרוא קובץ cookie שהוגדר על ידי הפתרון לקבלת הסכמה כדי לשמור את הבחירות של המבקרים בנושא פרטיות. צריך גם להגדיר התקשרות חזרה אל
updateConsentState
כדי לטפל בפנייה מקרים שבהם המבקר עדיין לא בחר להביע הסכמה או מחליט לשנות לקבל את הסכמתם.
כדי ליצור תבנית הסכמה:
- נכנסים לחשבון Google Tag Manager.
- בחלונית הניווט הימנית, בוחרים באפשרות תבניות.
- בחלונית Tag Templates (תבניות התג), לוחצים על New (חדש).
כדי להגדיר מצבי הסכמה שמוגדרים כברירת מחדל:
- בוחרים בכרטיסייה שדות ולוחצים על הוספת שדה > טבלת פרמטרים.
- משנים את השם לשם
defaultSettings
. - מרחיבים את השדה.
- מעדכנים את Display name (השם המוצג) ל-
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_passthrough
. - עדכון השם המוצג ל-
Pass through URL parameters
מידע נוסף על העברת פרמטרים של כתובת אתר
כדי להוסיף את קוד ההטמעה:
- פותחים את הכרטיסייה Code בעורך התבניות.
- בדוגמת הקוד שלמטה, עורכים את שדות ה-placeholder.
- מעתיקים את הקוד ומחליפים בו את הקוד הרגיל בעורך התבניות.
- שומרים את התבנית.
// 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(קריאת ערכים של קובצי Cookie).
- בקטע ספציפי, מזינים את השמות של כל קובצי ה-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 |
התנהגות |
---|---|---|
US | 'granted' |
רלוונטי למשתמשים בארה"ב שלא נמצאים בקנדה |
US-CA | 'denied' |
חל על משתמשים מ-US-CA |
לא צוין | 'granted' |
שימוש בערך ברירת המחדל של 'granted' . במשפט הזה
חל על משתמשים שלא נמצאים בארה"ב או בקנדה
|
מטא-נתונים נוספים
אפשר להשתמש ב-API של gtagSet כדי להגדיר את הפרמטרים האופציונליים הבאים:
ממשקי ה-API האלה זמינים רק בסביבת ה-Sandbox של תבנית GTM.
העברה של פרטים לגבי קליקים על מודעות, מזהה לקוח ומזהה סשן בכתובות URL
כשמבקר מגיע לאתר של מפרסם אחרי לחיצה על מודעה, מידע על המודעה עשוי להיות מצורף לכתובות דפי הנחיתה כשאילתה הפרמטר. כדי לשפר את הדיוק של ההמרות, התגים מסוג Google Tag בדרך כלל שומרים את הנתונים האלה מידע בקובצי cookie מהדומיין הנוכחי בדומיין של המפרסם.
אבל אם הערך של ad_storage
הוא denied
, התגים מסוג Google Tag לא ישמרו את המידע הזה.
מקומית. כדי לשפר את האיכות של מדידת הקליקים על המודעות במקרה כזה, המפרסמים יכולים
אופציונלי: להעביר מידע לגבי קליקים על מודעות דרך פרמטרים של כתובת אתר בדפים שונים באמצעות
שנקראת 'העברת כתובת URL'.
באופן דומה, אם המדיניות analytics_storage
מוגדרת למצב 'נדחתה', אפשר להשתמש בהעברה של כתובת URL אחרת
לשליחת ניתוח נתונים המבוסס על אירועים וסשנים (כולל המרות) מבלי
קובצי Cookie בדפים שונים.
כדי להשתמש בהעברה של כתובת URL, התנאים הבאים חייבים להתקיים:
- יש בדף תגי Google שמתחשבים בסטטוס ההסכמה.
- האתר הביע הסכמה להשתמש בתכונה 'העברת כתובת URL'.
- סטטוס ההסכמה מוטמע בדף.
- הקישור היוצא מתייחס לאותו דומיין כמו הדומיין של הדף הנוכחי.
- 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, צריך להעלות אותה אל גלריית תבניות הקהילה.