सहमति मोड वाला टेंप्लेट बनाना

यह लेख उन डेवलपर के लिए है जो Google Tag Manager (GTM) का इस्तेमाल करने वाली वेबसाइटों के लिए, सहमति मैनेजमेंट समाधान बनाए रखते हैं.

इस पेज पर, Google Tag Manager में सहमति के टाइप के बारे में बताया गया है. साथ ही, सहमति मैनेजमेंट से जुड़े समाधान के साथ उन्हें जोड़ने का तरीका भी बताया गया है.

टैग टेंप्लेट देने पर, उपयोगकर्ता कोडलेस तरीके से आपके सहमति समाधान को इंटिग्रेट कर सकते हैं. इससे, समय और मेहनत कम होती है.

उपयोगकर्ता, सहमति मोड टेंप्लेट का इस्तेमाल करके सहमति की डिफ़ॉल्ट स्थितियां सेट कर सकते हैं. साथ ही, Google Tag Manager को वेबसाइट पर आने वाले लोगों की सहमति के विकल्प के बारे में बता सकते हैं. इससे यह पक्का होता है कि सहमति मोड के साथ काम करने वाले Google और तीसरे पक्ष के टैग, बेहतर तरीके से काम करें.

टेंप्लेट क्रिएटर के तौर पर, अंदरूनी इस्तेमाल के लिए सहमति मोड टेंप्लेट लागू किए जा सकते हैं. इसके अलावा, उन्हें कम्यूनिटी टेंप्लेट गैलरी में पब्लिश किया जा सकता है, ताकि उन्हें सार्वजनिक तौर पर उपलब्ध कराया जा सके. सहमति मोड के टेंप्लेट देने वाले सहमति मैनेजमेंट प्लैटफ़ॉर्म (सीएमपी) की सेवा देने वाली कंपनियों के पास, हमारे सहमति मोड वाले दस्तावेज़ में शामिल होने का मौका होता है. साथ ही, उनके टेंप्लेट गैलरी पिकर की सुविधा होती है.

Google और तीसरे पक्ष के टैग, granted या denied की सहमति की स्थिति के आधार पर, अपने स्टोरेज के व्यवहार में बदलाव करते हैं. उनके पास इनमें से किसी भी सहमति टाइप के लिए, पहले से मौजूद सहमति की जांच हो सकती है:

सहमति टाइप जानकारी
ad_storage विज्ञापन से जुड़ी कुकी जैसी स्टोरेज को चालू करता है.
ad_user_data ऑनलाइन विज्ञापन दिखाने के मकसद से, Google को उपयोगकर्ता का डेटा भेजने के लिए सहमति सेट की जाती है.
ad_personalization लोगों के हिसाब से विज्ञापन दिखाने के लिए सहमति सेट करता है.
analytics_storage ऐनलिटिक्स से जुड़ी कुकी, जैसे कि स्टोरेज को चालू करता है (उदाहरण के लिए, विज़िट की अवधि).
functionality_storage वेबसाइट या ऐप्लिकेशन की भाषा की सेटिंग जैसी सुविधाओं के साथ काम करने वाली मेमोरी चालू करता है.
personalization_storage पसंद के हिसाब से डिवाइस की मेमोरी को चालू करता है, जैसे कि वीडियो के सुझाव.
security_storage पुष्टि करने के तरीके, धोखाधड़ी रोकने, और उपयोगकर्ता की बाकी सुरक्षा वगैरह से जुड़ी मेमोरी को चालू करता है

सहमति मोड, वेबसाइट पर आने वाले लोगों की सहमति के विकल्पों को ट्रैक करता है. साथ ही, टैग से जुड़ी सहमति की जांच से यह पक्का होता है कि टैग का व्यवहार उसके हिसाब से अडजस्ट हो जाता है. सहमति का नया टेंप्लेट बनाते समय, सबसे सही तरीके अपनाएं:

  • gtag consent के बजाय, Tag Manager के सहमति मोड के एपीआई setDefaultConsentState और updateConsentState का इस्तेमाल करें.

  • सभी पेजों के लिए सहमति की प्रोसेस शुरू करने वाले ट्रिगर का इस्तेमाल करके, ट्रिगर होने के तुरंत बाद सहमति की डिफ़ॉल्ट स्थितियां सेट करें.

  • सीएमपी को वेबसाइट पर आने वाले व्यक्ति से जल्द से जल्द यह अनुरोध करना होगा कि वह लागू होने वाले सभी तरह के सहमति के लिए सहमति देने या न देने का अनुरोध करे.

  • जब वेबसाइट पर आने वाला कोई व्यक्ति सहमति देता है, तो सीएमपी को अपडेट की गई सहमति की स्थिति पास करनी होती है.

1. नया टेंप्लेट बनाना

लागू करने का यह तरीका, सहमति की डिफ़ॉल्ट स्थिति को होल्ड करने के लिए टेंप्लेट में एक फ़ील्ड का इस्तेमाल करता है. लागू करने वाला कोड, उस फ़ील्ड को पढ़ता है, ताकि रनटाइम के दौरान सहमति की डिफ़ॉल्ट स्थिति सेट की जा सके. अपडेट करने के निर्देश के लिए, आपका कोड, सहमति से जुड़े समाधान से सेट की गई कुकी को पढ़ने की कोशिश करता है. इससे, वेबसाइट पर आने वाले लोगों की सहमति के विकल्पों को सेव किया जाता है. अगर वेबसाइट पर आने वाले लोगों ने अभी अपनी सहमति नहीं चुनी है या उसने अपनी सहमति नहीं बदली है, तो ऐसे मामलों में कार्रवाई करने के लिए, updateConsentState के लिए एक कॉलबैक सेट अप किया जाएगा.

  1. Google Tag Manager खाते में लॉग इन करें.
  2. बाईं ओर मौजूद नेविगेशन में, टेंप्लेट चुनें.
  3. टैग टेंप्लेट पैनल में, नया पर क्लिक करें.
  1. फ़ील्ड टैब चुनें. इसके बाद, फ़ील्ड > पैरामीटर टेबल पर क्लिक करें.
  2. नाम बदलकर defaultSettings करें.
  3. फ़ील्ड को बड़ा करें.
  4. डिसप्ले नेम को 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 में अपडेट करें

विज्ञापनों का डेटा छिपाने के लिए कुकी के व्यवहार के बारे में ज़्यादा जानें

ज़रूरी नहीं: यूआरएल पैरामीटर को पास करने की सुविधा जोड़ने के लिए:

  1. फ़ील्ड जोड़ें पर क्लिक करें, चेकबॉक्स चुनें, और फ़ील्ड के नाम को बदलकर url_passthrough करें.
  2. डिसप्ले नेम को Pass through URL parameters में अपडेट करें

यूआरएल पैरामीटर पास करने के बारे में ज़्यादा जानें

लागू करने वाला कोड जोड़ने के लिए:

  1. टेंप्लेट एडिटर में, कोड टैब खोलें.
  2. नीचे दिए गए कोड सैंपल में, प्लेसहोल्डर फ़ील्ड में बदलाव करें.
  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();

इसके बाद, सहमति की स्थिति और कुकी ऐक्सेस करने के लिए अनुमतियां कॉन्फ़िगर करें.

  1. अनुमतियां टैब को चुनें. इसके बाद, सहमति की स्थिति को ऐक्सेस करने की अनुमति पर क्लिक करें.
  2. सहमति टाइप जोड़ें पर क्लिक करें.
  3. बॉक्स पर क्लिक करें और ड्रॉप-डाउन मेन्यू से ad_storage चुनें.
  4. लिखें को चुनें.
  5. जोड़ें पर क्लिक करें
  6. ad_user_data, ad_personalization, और analytics_storage के लिए, दूसरे से लेकर पांचवें चरण को दोहराएं. अगर आपको अन्य सहमति टाइप की ज़रूरत है, तो उन्हें भी उसी तरह जोड़ें.
  7. सेव करें पर क्लिक करें.

कुकी ऐक्सेस करने की अनुमतियां जोड़ने के लिए:

  1. अनुमतियां टैब चुनें और कुकी की वैल्यू पढ़ता है पर क्लिक करें.
  2. खास में, हर उस कुकी का नाम डालें जिसे आपके कोड को पढ़ना है, ताकि उपयोगकर्ता की सहमति से जुड़े विकल्प तय किए जा सकें. एक लाइन में एक नाम होना चाहिए.
  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);
  });
};

जब वेबसाइट पर आने वाला कोई व्यक्ति सहमति के बैनर से अपनी सहमति के विकल्प के बारे में बताता है, तब टेंप्लेट कोड को updateConsentState एपीआई के हिसाब से सहमति की स्थिति अपडेट कर देना चाहिए.

इस उदाहरण में, वेबसाइट पर आने वाले ऐसे लोगों के लिए updateConsentState कॉल के बारे में बताया गया है जिन्होंने सभी तरह के स्टोरेज के लिए सहमति दी है. फिर से, इस उदाहरण में granted के लिए हार्डकोड की गई वैल्यू का इस्तेमाल किया गया है. हालांकि, असल में इनका पता, रनटाइम पर सीएमपी से इकट्ठा की गई वेबसाइट पर आने वाले लोगों की सहमति से किया जाना चाहिए.

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'
});

सबसे सटीक को प्राथमिकता दी जाती है

अगर एक ही पेज पर किसी क्षेत्र और उपक्षेत्र की वैल्यू के साथ दो डिफ़ॉल्ट सहमति निर्देश दिए जाते हैं, तो ज़्यादा खास क्षेत्र वाला निर्देश लागू होगा. उदाहरण के लिए, अगर आपने US क्षेत्र के लिए ad_storage को 'granted' पर और US-CA के लिए ad_storage को 'denied' पर सेट किया है, तो कैलिफ़ोर्निया से आने वाले व्यक्ति के लिए, ज़्यादा सटीक US-CA सेटिंग लागू होगी.

इलाका ad_storage व्यवहार
अमेरिका 'granted' यह ऑफ़र अमेरिका में रहने वाले उन लोगों के लिए है जो कनाडा में नहीं हैं
US-CA 'denied' अमेरिका के कनाडा के उपयोगकर्ताओं पर लागू होता है
सेट नहीं है 'granted' 'granted' की डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है. इस उदाहरण में, यह उन उपयोगकर्ताओं पर लागू होता है जो अमेरिका या अमेरिका के कनाडा में नहीं रहते हैं

अतिरिक्त मेटाडेटा

नीचे दिए गए वैकल्पिक पैरामीटर सेट करने के लिए, gtagSet API का इस्तेमाल किया जा सकता है:

ये एपीआई सिर्फ़ GTM टेंप्लेट के सैंडबॉक्स एनवायरमेंट में उपलब्ध हैं.

यूआरएल में विज्ञापन पर क्लिक, क्लाइंट आईडी, और सेशन आईडी की जानकारी पास करना

जब वेबसाइट पर आने वाला कोई व्यक्ति किसी विज्ञापन पर क्लिक करके, विज्ञापन देने वाले की वेबसाइट पर जाता है, तो विज्ञापन की जानकारी को लैंडिंग पेज के यूआरएल में क्वेरी पैरामीटर के तौर पर जोड़ा जा सकता है. कन्वर्ज़न को ज़्यादा सटीक बनाने के लिए, Google टैग आम तौर पर विज्ञापन देने वाले के डोमेन पर पहले-पक्ष की कुकी में इस जानकारी को स्टोर करता है.

हालांकि, अगर ad_storage denied है, तो Google टैग इस जानकारी को स्थानीय तौर पर सेव नहीं करेगा. इस मामले में, विज्ञापन पर क्लिक मेज़रमेंट की क्वालिटी को बेहतर बनाने के लिए, विज्ञापन देने वाले, यूआरएल पासथ्रू नाम की सुविधा का इस्तेमाल करके, यूआरएल पैरामीटर के ज़रिए विज्ञापन पर क्लिक की जानकारी पास कर सकते हैं. हालांकि, ऐसा करना ज़रूरी नहीं है.

इसी तरह, अगर analytics_storage को 'अनुमति नहीं है' पर सेट किया गया है, तो यूआरएल पासथ्रू का इस्तेमाल सभी पेजों पर कुकी के बिना, इवेंट और सेशन पर आधारित आंकड़े (इसमें कन्वर्ज़न भी शामिल हैं) भेजने के लिए किया जा सकता है.

यूआरएल पासथ्रू का इस्तेमाल करने के लिए, इन शर्तों को पूरा करना ज़रूरी है:

  • सहमति को ध्यान में रखकर बनाए गए Google टैग, पेज पर मौजूद हैं.
  • साइट ने यूआरएल पासथ्रू की सुविधा इस्तेमाल करने के लिए ऑप्ट इन किया है.
  • सहमति मोड, पेज पर लागू किया गया.
  • आउटगोइंग लिंक उसी डोमेन का हवाला देता है जो मौजूदा पेज का डोमेन है.
  • यूआरएल में gclid/dclid मौजूद है (सिर्फ़ Google Ads और Floodlight टैग)

आपके टेंप्लेट से उपयोगकर्ता को यह कॉन्फ़िगर करने की अनुमति मिलनी चाहिए कि वह इस सेटिंग को चालू करना चाहता है या नहीं. इस टेंप्लेट कोड का इस्तेमाल, url_passथ्रू को 'सही' पर सेट करने के लिए किया जाता है:

gtagSet('url_passthrough', true);

विज्ञापनों का डेटा छिपाने के लिए उसमें बदलाव करें

ad_storage को अस्वीकार किए जाने पर, विज्ञापन के लिए कोई नई कुकी सेट नहीं की जाती. इसके अलावा, google.com और doubleclick.net पर पहले से सेट की गई तीसरे पक्ष की कुकी का इस्तेमाल नहीं किया जाएगा. Google को भेजे गए डेटा में अब भी पूरा पेज यूआरएल शामिल होगा. इसमें यूआरएल पैरामीटर में विज्ञापन पर क्लिक की जानकारी भी शामिल होगी.

ad_storage के अस्वीकार होने पर अपने विज्ञापनों का डेटा और छिपाने के लिए, ads_data_redaction को 'सही' पर सेट करें.

अगर ads_data_redaction सही है और ad_storage अस्वीकार किया गया है, तो Google Ads और Floodlight टैग से नेटवर्क अनुरोधों में भेजे गए विज्ञापन क्लिक आइडेंटिफ़ायर को हटा दिया जाएगा.

gtagSet('ads_data_redaction', true);

डेवलपर आईडी

अगर आप ऐसे सीएमपी वेंडर हैं जिनके पास Google का डेवलपर आईडी है, तो यहां दिए गए तरीके का इस्तेमाल करके, इसे अपने टेंप्लेट में जल्द से जल्द सेट करें.

डेवलपर आईडी की ज़रूरत सिर्फ़ तब होती है, जब आपके लागू किए गए वर्शन का इस्तेमाल, एक से ज़्यादा वेबसाइटों पर किया जाएगा. ऐसा तब होगा, जब कंपनियां या इकाइयां, आपके लागू किए गए आईडी का इस्तेमाल करेंगी. अगर लागू करने की प्रक्रिया का इस्तेमाल एक साइट या इकाई करेगा, तो डेवलपर आईडी के लिए लागू न करें.

gtagSet('developer_id.<your_developer_id>', true);

अपने उपयोगकर्ताओं के लिए दस्तावेज़ उपलब्ध कराएं

आपके उपयोगकर्ता, सहमति के टेंप्लेट का इस्तेमाल करके ऐसा टैग सेट अप करेंगे जो उपयोगकर्ता की सहमति इकट्ठा करता है. अपने उपयोगकर्ताओं के लिए, यहां बताए गए सबसे सही तरीकों के बारे में बताने वाले दस्तावेज़ उपलब्ध कराएं:

  • सेटिंग टेबल में सहमति को डिफ़ॉल्ट तौर पर सेट करने का तरीका.
  • टेबल में अन्य लाइनें जोड़कर, अलग-अलग इलाकों के लिए सहमति की डिफ़ॉल्ट सेटिंग सेट अप करने का तरीका.
  • सहमति की प्रोसेस शुरू करने वाले - सभी पेज ट्रिगर पर टैग को ट्रिगर करें.

अगले चरण

अगर आपको Tag Manager के सभी उपयोगकर्ताओं को अपना टेंप्लेट देना है, तो उसे कम्यूनिटी टेंप्लेट गैलरी पर अपलोड करें.