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

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

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

מידע נוסף על ההתנהגות של קובצי Cookie בצנזור נתוני מודעות

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

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

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

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

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