יצירת תבנית לסטטוס הסכמה

המאמר הזה מיועד למפתחים שמנהלים פתרון לניהול הסכמה באתרים שמשתמשים ב-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 כדי לטפל במקרים שבהם המבקרים עדיין לא בחרו באפשרות ההסכמה או מחליטים לשנות את מצב ההסכמה.

  1. נכנסים לחשבון Google Tag Manager.
  2. בתפריט הניווט הימני, בוחרים באפשרות תבניות.
  3. בחלונית Tag Templates (תבניות תגים), לוחצים על New (חדש).
  1. בוחרים בכרטיסייה Fields ולוחצים על Add Field > Param table.
  2. משנים את השם לשם defaultSettings.
  3. מרחיבים את השדה.
  4. מעדכנים את השם המוצג ל-Default settings.
  5. לוחצים על Add column (הוספת עמודה), בוחרים באפשרות Text input (קלט טקסט), משנים את השם ל-region ומסמנים את התיבה Require column values to be unique (חובה שהערכים בעמודה יהיו ייחודיים).
  6. מרחיבים את העמודה ומשנים את השם המוצג ל-Region (leave blank to have consent apply to all regions). ההצהרה בסוגריים היא תיעוד למשתמשי התבנית שלכם. מידע נוסף על הגדרת ערכי ברירת מחדל להסכמה לאזורים שונים
  7. לוחצים על הוספת עמודה, בוחרים באפשרות קלט טקסט ומשנים את השם ל-granted.
  8. מרחיבים את העמודה ומשנים את השם המוצג ל-Granted Consent Types (comma separated).
  9. לוחצים על הוספת עמודה, בוחרים באפשרות קלט טקסט ומשנים את השם ל-denied.
  10. מרחיבים את העמודה ומשנים את השם המוצג ל-Denied Consent Types (comma separated)

אופציונלי: כדי להוסיף תמיכה בצנזור נתוני מודעות:

  1. לוחצים על הוספת שדה, בוחרים באפשרות תיבת סימון ומשנים את שם השדה ל-ads_data_redaction.
  2. מעדכנים את השם המוצג ל-Redact Ads Data

מידע נוסף על התנהגות קובצי cookie בהשמטת נתוני מודעות

אופציונלי: כדי להוסיף תמיכה בהעברת פרמטרים של כתובות אתרים:

  1. לוחצים על Add Field (הוספת שדה), בוחרים באפשרות Checkbox ומשנים את שם השדה ל-url_passthrough.
  2. מעדכנים את השם המוצג ל-Pass through URL parameters

מידע נוסף על העברה של פרמטרים של כתובות URL

כדי להוסיף את קוד ההטמעה:

  1. פותחים את הכרטיסייה Code (קוד) בכלי לעריכת התבניות.
  2. עורכים את שדות placeholder בקוד לדוגמה שבהמשך.
  3. מעתיקים את הקוד ומחליפים בו את קוד ה-boilerplate בעורך התבניות.
  4. שומרים את התבנית.
// 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.

  1. בוחרים בכרטיסייה Permissions ולוחצים על Accesses consent state.
  2. לוחצים על Add consent type (הוספת סוג ההסכמה).
  3. לוחצים על התיבה ובוחרים באפשרות ad_storage בתפריט הנפתח.
  4. מסמנים את התיבה כתיבה.
  5. לוחצים על הוספה.
  6. חוזרים על שלבים 2 עד 5 בשביל ad_user_data, ad_personalization ו-analytics_storage. אם אתם זקוקים לסוגים נוספים של הסכמה, תוכלו להוסיף אותם באותו אופן.
  7. לוחצים על שמירה.

כדי להוסיף הרשאות גישה לקובצי cookie:

  1. לוחצים על הכרטיסייה Permissions (הרשאות) ואז על Reads cookie value(s) (קריאת הערכים של קובצי ה-Cookie).
  2. בקטע specific (ספציפי), מזינים את השמות של כל אחד מקובצי ה-cookie שהקוד צריך לקרוא כדי לקבוע את אפשרויות הבחירה של המשתמש בנושא פרטיות, שם אחד בכל שורה.
  3. לוחצים על שמירה.

2. יצירת בדיקות יחידה

לקבלת מידע על יצירת בדיקות לתבנית, אפשר לעיין בקטע בדיקות.

הקוד הבא מציג דוגמה אחת לאופן שבו אפשר לשלב את התבנית הזו עם הקוד של הפתרון לניהול הסכמה על ידי הוספת האזנה:

// 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, תוכלו להעלות אותה אל גלריית התבניות של הקהילה.