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

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

  1. נכנסים לחשבון Google Tag Manager.
  2. בחלונית הניווט הימנית, בוחרים באפשרות תבניות.
  3. בחלונית Tag Templates (תבניות התגים), לוחצים על New (חדש).
  1. בוחרים בכרטיסייה שדות ואז לוחצים על הוספת שדה > טבלת פרמטרים.
  2. שינוי השם לשם defaultSettings.
  3. מרחיבים את השדה.
  4. יש לעדכן את השם המוצג לערך Default settings.
  5. לוחצים על Add column (הוספת עמודה), בוחרים באפשרות Text variable (קלט טקסט), משנים את השם ל-region ומסמנים את התיבה דרישה לערכי עמודה שיהיו ייחודיים.
  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. לוחצים על Add Field (הוספת שדה), בוחרים באפשרות Checkbox ומשנים את שם השדה ל-ads_data_redaction.
  2. עדכון השם המוצג לRedact Ads Data

בקישור הבא אפשר לקבל מידע נוסף על התנהגות קובצי cookie במהלך צנזור נתוני מודעות

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

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

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

כך מוסיפים את קוד ההטמעה:

  1. פותחים את הכרטיסייה Code (קוד) בעורך התבניות.
  2. בדוגמת הקוד הבאה, עורכים את השדות של placeholders.
  3. מעתיקים את הקוד ומחליפים אותו בקוד הסטנדרטי שבעורך התבניות.
  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. לוחצים על הוספת סוג הסכמה.
  3. לוחצים על התיבה ובוחרים ad_storage בתפריט הנפתח.
  4. מסמנים את האפשרות כתיבה.
  5. לוחצים על הוספה.
  6. חוזרים על שלבים 2-5 עבור ad_user_data, ad_personalization ו-analytics_storage. אם אתם צריכים סוגי הסכמה נוספים, מוסיפים אותם באותו אופן.
  7. לוחצים על שמירה.

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

  1. בוחרים בכרטיסייה Permissions ולוחצים על Reads cookie value(s) .
  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'. בדוגמה הזו, הדבר רלוונטי למשתמשים שאינם בארה"ב או בקנדה

מטא-נתונים נוספים

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