یک الگوی حالت رضایت ایجاد کنید

این مقاله برای توسعه دهندگانی است که راه حل مدیریت رضایت را در وب سایت هایی که از Google Tag Manager (GTM) استفاده می کنند، حفظ می کنند.

این صفحه انواع رضایت را در Google Tag Manager معرفی می کند و به شما نشان می دهد که چگونه آنها را با راه حل مدیریت رضایت خود ادغام کنید.

هنگامی که یک الگوی برچسب ارائه می کنید، کاربران شما می توانند راه حل رضایت شما را به روشی بدون کد یکپارچه کنند و در زمان و تلاش قابل توجهی صرفه جویی کنند.

کاربران می‌توانند با استفاده از یک الگوی حالت رضایت، وضعیت‌های رضایت پیش‌فرض را تنظیم کنند و انتخاب‌های رضایت بازدیدکننده را با Google Tag Manager ارتباط برقرار کنند. این کارکرد بهینه Google و برچسب‌های شخص ثالث را که از حالت رضایت پشتیبانی می‌کنند، تضمین می‌کند.

به عنوان ایجادکننده الگو، می‌توانید الگوهای حالت رضایت را برای استفاده داخلی پیاده‌سازی کنید یا آن‌ها را در گالری الگوی انجمن منتشر کنید تا در دسترس عموم قرار گیرند. ارائه‌دهندگان پلتفرم مدیریت رضایت (CMP) که الگوهای حالت رضایت را ارائه می‌کنند، این فرصت را دارند که در اسناد حالت رضایت ما فهرست شوند و انتخابگر گالری الگو الگوهای خود را داشته باشند.

Google و برچسب‌های شخص ثالث رفتار ذخیره‌سازی خود را بر اساس وضعیت رضایت granted یا denied تنظیم می‌کنند. آنها می توانند بررسی رضایت داخلی برای هر یک از انواع رضایت زیر داشته باشند:

نوع رضایت توضیحات
ad_storage ذخیره سازی، مانند کوکی ها، مربوط به تبلیغات را فعال می کند.
ad_user_data رضایت خود را برای ارسال اطلاعات کاربر به Google برای اهداف تبلیغات آنلاین تنظیم می کند.
ad_personalization رضایت را برای تبلیغات شخصی تنظیم می کند.
analytics_storage ذخیره‌سازی، مانند کوکی‌ها را فعال می‌کند، مرتبط با تجزیه و تحلیل (به عنوان مثال، مدت زمان بازدید).
functionality_storage فضای ذخیره سازی را فعال می کند که از عملکرد وب سایت یا برنامه مانند تنظیمات زبان پشتیبانی می کند.
personalization_storage فضای ذخیره سازی مربوط به شخصی سازی مانند توصیه های ویدیویی را فعال می کند.
security_storage ذخیره‌سازی مرتبط با امنیت مانند عملکرد احراز هویت، جلوگیری از تقلب و سایر محافظت از کاربر را فعال می‌کند

حالت رضایت، انتخاب‌های رضایت بازدیدکننده را ردیابی می‌کند و بررسی رضایت برچسب اطمینان می‌دهد که رفتار برچسب مطابق با آن تنظیم می‌شود. هنگام ایجاد یک الگوی رضایت جدید، بهترین شیوه ها را دنبال کنید:

  • از APIهای حالت رضایت مدیریت برچسب setDefaultConsentState و updateConsentState به جای gtag consent استفاده کنید.

  • با استفاده از راه انداز Consent Initialization - All Pages ، بلافاصله پس از شلیک، حالت های رضایت پیش فرض را تنظیم کنید.

  • CMP باید در اسرع وقت از بازدیدکننده بخواهد که رضایت خود را برای همه انواع رضایت قابل اجرا اعطا یا رد کند.

  • هنگامی که یک بازدیدکننده انتخاب رضایت خود را نشان می دهد، CMP باید وضعیت رضایت به روز شده را بگذراند.

1. یک قالب جدید ایجاد کنید

این رویکرد پیاده سازی از یک فیلد در الگو برای نگه داشتن وضعیت رضایت پیش فرض استفاده می کند. کد پیاده سازی آن فیلد را برای تنظیم وضعیت رضایت پیش فرض در زمان اجرا می خواند. برای دستور به‌روزرسانی، کد شما سعی می‌کند کوکی‌ای را بخواند که توسط راه‌حل رضایت برای ذخیره انتخاب‌های رضایت بازدیدکننده تنظیم شده است. همچنین برای رسیدگی به مواردی که بازدیدکننده هنوز رضایت خود را انتخاب نکرده است یا تصمیم به تغییر رضایت خود دارد، یک تماس پاسخ برای updateConsentState تنظیم خواهید کرد.

  1. وارد حساب Google Tag Manager خود شوید.
  2. در پیمایش سمت چپ، الگوها را انتخاب کنید.
  3. در قسمت Tag Templates ، روی New کلیک کنید.
  1. برگه فیلدها را انتخاب کنید، روی Add Field > Param table کلیک کنید.
  2. نام را به defaultSettings تغییر دهید.
  3. زمینه را گسترش دهید.
  4. نام نمایشی را به Default settings به روز کنید.
  5. روی افزودن ستون کلیک کنید، ورودی متن را انتخاب کنید، نام را به region تغییر دهید و کادر Require columns 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. روی Add Field کلیک کنید، Checkbox را انتخاب کنید و نام فیلد را به ads_data_redaction تغییر دهید.
  2. نام نمایشی را به Redact Ads Data به‌روزرسانی کنید

درباره رفتار کوکی با تغییر داده های تبلیغات بیشتر بیاموزید

اختیاری: برای افزودن پشتیبانی برای عبور از پارامترهای URL:

  1. روی Add Field کلیک کنید، Checkbox را انتخاب کنید و نام فیلد را به url_passthrough تغییر دهید.
  2. نام نمایشی را برای Pass through URL parameters به روز کنید

درباره عبور از پارامترهای URL بیشتر بیاموزید

برای افزودن کد پیاده سازی:

  1. تب Code را در ویرایشگر قالب باز کنید.
  2. در نمونه کد زیر، فیلدهای نگهدارنده مکان را ویرایش کنید.
  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();

در مرحله بعد، مجوزها را برای دسترسی به وضعیت رضایت و دسترسی به کوکی ها پیکربندی کنید.

  1. برگه مجوزها را انتخاب کنید و روی دسترسی به وضعیت رضایت کلیک کنید.
  2. روی افزودن نوع رضایت کلیک کنید.
  3. روی کادر کلیک کنید و ad_storage از منوی کشویی انتخاب کنید.
  4. نوشتن را بررسی کنید.
  5. روی افزودن کلیک کنید
  6. مراحل 2-5 را برای ad_user_data ، ad_personalization و analytics_storage تکرار کنید. اگر به انواع رضایت بیشتری نیاز دارید، آنها را به همان روش اضافه کنید.
  7. روی ذخیره کلیک کنید.

برای افزودن مجوز برای دسترسی به کوکی ها:

  1. برگه Permissions را انتخاب کرده و روی Reads value(s) کوکی کلیک کنید.
  2. در بخش Specific ، نام هر یک از کوکی‌هایی را که کد شما باید بخواند تا انتخاب‌های رضایت کاربر را مشخص کند، وارد کنید، یک نام در هر خط.
  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 API به‌روزرسانی کند.

مثال زیر فراخوان 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 برای منطقه US روی 'granted' و ad_storage را روی 'denied' برای منطقه US US-CA US-CA تنظیم کرده باشید، بازدیدکننده ای از کالیفرنیا تنظیمات خاص تری را اعمال می کند.

منطقه ad_storage رفتار
ایالات متحده 'granted' برای کاربرانی در ایالات متحده که در CA نیستند اعمال می شود
US-CA 'denied' برای کاربران US-CA اعمال می شود
نامشخص 'granted' از مقدار پیش‌فرض 'granted' استفاده می‌کند. در این مثال، این برای کاربرانی اعمال می‌شود که در ایالات متحده یا US-CA نیستند

فراداده اضافی

می توانید از gtagSet API برای تنظیم پارامترهای اختیاری زیر استفاده کنید:

این APIها فقط در محیط جعبه سندروم قالب GTM در دسترس هستند.

اطلاعات کلیک آگهی، شناسه مشتری، و شناسه جلسه را در URL ها ارسال کنید

هنگامی که یک بازدیدکننده پس از کلیک بر روی یک تبلیغ وارد وب سایت تبلیغ کننده می شود، اطلاعات مربوط به آگهی ممکن است به عنوان پارامتر جستجو به URL های صفحه فرود اضافه شود. برای بهبود دقت تبدیل، تگ‌های Google معمولاً این اطلاعات را در کوکی‌های شخص اول در دامنه تبلیغ‌کننده ذخیره می‌کنند.

با این حال، اگر ad_storage denied شود، برچسب‌های Google این اطلاعات را به صورت محلی ذخیره نمی‌کنند. برای بهبود کیفیت اندازه‌گیری کلیک روی آگهی در این مورد، تبلیغ‌کنندگان می‌توانند به‌صورت اختیاری اطلاعات کلیک آگهی را از طریق پارامترهای URL در سراسر صفحات با استفاده از ویژگی به نام عبور URL ارسال کنند.

به طور مشابه، اگر analytics_storage روی رد تنظیم شود، از مسیر عبور URL می‌توان برای ارسال تحلیل‌های مبتنی بر رویداد و جلسه (از جمله تبدیل‌ها) بدون کوکی در سراسر صفحات استفاده کرد.

برای استفاده از مسیر عبور URL باید شرایط زیر رعایت شود:

  • تگ‌های Google آگاه از رضایت در صفحه وجود دارد.
  • سایت استفاده از ویژگی عبور URL را انتخاب کرده است.
  • حالت رضایت در صفحه اجرا می شود.
  • پیوند خروجی به همان دامنه دامنه صفحه فعلی اشاره دارد.
  • یک gclid/dclid در URL موجود است (فقط برچسب‌های Google Ads و Floodlight)

الگوی شما باید به کاربر الگو اجازه دهد پیکربندی کند که آیا می‌خواهد این تنظیم را فعال کند یا نه. کد قالب زیر برای تنظیم url_passthrough روی true استفاده می شود:

gtagSet('url_passthrough', true);

ویرایش داده های تبلیغات

وقتی ad_storage رد می شود، هیچ کوکی جدیدی برای اهداف تبلیغاتی تنظیم نمی شود. علاوه بر این، کوکی‌های شخص ثالثی که قبلاً در google.com و doubleclick.net تنظیم شده‌اند استفاده نخواهند شد. داده‌های ارسال شده به Google همچنان شامل URL صفحه کامل، از جمله هرگونه اطلاعات کلیک روی آگهی در پارامترهای URL است.

برای ویرایش بیشتر داده‌های تبلیغات خود در صورت رد شدن ad_storage ، ads_data_redaction روی true تنظیم کنید.

وقتی ads_data_redaction درست است و 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 قرار دهید، آن را در گالری الگوی انجمن آپلود کنید.