این سند برای توسعهدهندگانی است که در وبسایتهایی که از Google Tag Manager (GTM) استفاده میکنند، راهکار مدیریت رضایت را ارائه میدهند.
این صفحه انواع رضایتنامه را در گوگل تگ منیجر معرفی میکند و به شما نشان میدهد که چگونه آنها را با راهکار مدیریت رضایتنامه خود ادغام کنید.
چرا از الگوی برچسب برای رضایت استفاده کنیم؟
وقتی یک الگوی برچسب ارائه میدهید، کاربران شما میتوانند راهکار رضایت شما را به روشی بدون کد ادغام کنند و در زمان و تلاش قابل توجهی صرفهجویی کنند.
کاربران میتوانند با استفاده از یک الگوی حالت رضایت، حالتهای رضایت پیشفرض را تنظیم کنند و گزینههای رضایت بازدیدکننده را به Google Tag Manager اطلاع دهند. این امر عملکرد بهینه تگهای گوگل و شخص ثالثی را که از حالت رضایت پشتیبانی میکنند، تضمین میکند.
به عنوان یک سازنده قالب، میتوانید قالبهای حالت رضایت را برای استفاده داخلی پیادهسازی کنید یا آنها را در گالری قالبهای انجمن منتشر کنید تا در دسترس عموم قرار گیرند. ارائهدهندگان پلتفرم مدیریت رضایت (CMP) که قالبهای حالت رضایت را ارائه میدهند، این فرصت را دارند که در مستندات حالت رضایت ما فهرست شوند و انتخابگر گالری قالب، قالبهای آنها را نمایش دهد.
حالت رضایت و انواع رضایت
تگهای گوگل و شخص ثالث رفتار ذخیرهسازی خود را بر اساس وضعیت رضایت (اعم از granted یا denied تنظیم میکنند. آنها میتوانند برای هر یک از انواع رضایتهای زیر، بررسیهای رضایت داخلی داشته باشند:
| نوع رضایت | توضیحات |
|---|---|
ad_storage | ذخیرهسازی، مانند کوکیها، مربوط به تبلیغات را فعال میکند. |
ad_user_data | رضایت برای ارسال دادههای کاربر به گوگل برای اهداف تبلیغات آنلاین را تعیین میکند. |
ad_personalization | رضایت برای تبلیغات شخصیسازیشده را تعیین میکند. |
analytics_storage | ذخیرهسازی، مانند کوکیها، مربوط به تجزیه و تحلیل (مثلاً مدت زمان بازدید) را فعال میکند. |
functionality_storage | فضای ذخیرهسازی را فعال میکند که از عملکردهای وبسایت یا برنامه مانند تنظیمات زبان پشتیبانی میکند. |
personalization_storage | امکان ذخیرهسازی مربوط به شخصیسازی مانند توصیههای ویدیویی را فراهم میکند. |
security_storage | امکان ذخیرهسازی مرتبط با امنیت مانند قابلیت احراز هویت، جلوگیری از کلاهبرداری و سایر موارد حفاظت از کاربر را فراهم میکند. |
ایجاد یک الگوی رضایت جدید
حالت رضایت، انتخابهای رضایت بازدیدکننده را پیگیری میکند و بررسیهای رضایت برچسب، اطمینان حاصل میکند که رفتار برچسب بر اساس آن تنظیم میشود. هنگام ایجاد یک الگوی رضایت جدید، بهترین شیوهها را دنبال کنید:
به جای
gtag consentاز APIهای setDefaultConsentState و updateConsentState مربوط به حالت رضایت Tag Manager استفاده کنید.بلافاصله پس از فعال شدن، با استفاده از تریگر Consent Initialization - All Pages، حالتهای پیشفرض رضایت را تنظیم کنید.
CMP باید در اسرع وقت از بازدیدکننده بخواهد که برای همه انواع رضایتهای مربوطه، رضایت خود را اعلام یا رد کند.
وقتی بازدیدکنندهای رضایت خود را اعلام میکند، CMP باید از وضعیت رضایت بهروزرسانیشده عبور کند.
۱. یک الگوی جدید ایجاد کنید
این رویکرد پیادهسازی از یک فیلد در قالب برای نگهداری حالت رضایت پیشفرض استفاده میکند. کد پیادهسازی، آن فیلد را میخواند تا حالت رضایت پیشفرض را در زمان اجرا تنظیم کند. برای دستور بهروزرسانی، کد شما سعی میکند کوکی تنظیمشده توسط راهحل رضایت را بخواند تا گزینههای رضایت بازدیدکننده را ذخیره کند. همچنین یک فراخوانی برای
updateConsentStateتنظیم خواهید کرد تا مواردی را که بازدیدکننده هنوز انتخابهای رضایت خود را انجام نداده یا تصمیم به تغییر رضایت خود دارد، مدیریت کند.
برای ایجاد الگوی رضایت:
- وارد حساب گوگل تگ منیجر خود شوید.
- در منوی سمت چپ، گزینهی «قالبها» (Templates) را انتخاب کنید.
- در پنل قالبهای برچسب ، روی «جدید» کلیک کنید.
برای تنظیم حالتهای پیشفرض رضایت:
- تب Fields را انتخاب کنید، روی Add Field > Param table کلیک کنید.
- نام را به
defaultSettingsتغییر دهید. - زمینه را گسترش دهید.
- نام نمایشی را به
Default settingsبهروزرسانی کنید. - روی افزودن ستون کلیک کنید، ورودی متن را انتخاب کنید، نام را به
regionتغییر دهید و کادر «نیاز به مقادیر ستون برای منحصر به فرد بودن» را علامت بزنید. - ستون را گسترش دهید و نام نمایشی را به
Region (leave blank to have consent apply to all regions). عبارت داخل پرانتز، مستنداتی برای کاربران قالب شماست. درباره تنظیم پیشفرضهای رضایت برای مناطق مختلف بیشتر بیاموزید. - روی افزودن ستون کلیک کنید، ورودی متن را انتخاب کنید، نام را به
grantedتغییر دهید. - ستون را باز کنید و نام نمایشی را به
Granted Consent Types (comma separated)تغییر دهید. - روی افزودن ستون کلیک کنید، ورودی متن را انتخاب کنید، نام را به
deniedتغییر دهید. - ستون را گسترش دهید و نام نمایشی را به
Denied Consent Types (comma separated)تغییر دهید.
اختیاری: برای افزودن پشتیبانی برای ویرایش دادههای تبلیغات:
- روی «افزودن فیلد» کلیک کنید، «چکباکس» را انتخاب کنید و نام فیلد را به
ads_data_redactionتغییر دهید. - نام نمایشی را به
Redact Ads Dataبهروزرسانی کنید
با ویرایش دادههای تبلیغات ، درباره رفتار کوکیها بیشتر بدانید
اختیاری: برای افزودن پشتیبانی برای ارسال پارامترهای URL:
- روی افزودن فیلد کلیک کنید، کادر انتخاب را انتخاب کنید و نام فیلد را به
url_passthroughتغییر دهید. - نام نمایشی را برای
Pass through URL parametersبهروزرسانی کنید
درباره ارسال پارامترهای URL بیشتر بدانید
برای اضافه کردن کد پیادهسازی:
- تب Code را در ویرایشگر قالب باز کنید.
- در نمونه کد زیر، فیلدهای placeholder را ویرایش کنید.
- کد را کپی کنید و کد قالب را در ویرایشگر قالب با آن جایگزین کنید.
- الگو را ذخیره کنید .
// 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 JSON = require('JSON');
const COOKIE_NAME = 'Your_cookie_name';
/*
* Splits the input string using comma as a delimiter, returning an array of
* strings
*/
const splitInput = (input) => {
if (!input) return [];
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). Add optional chaining to safely handle cases
// where defaultSettings might be null or undefined.
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 cookieValues = getCookieValues(COOKIE_NAME);
if (cookieValues && cookieValues.length > 0) {
try {
const settings = JSON.parse(cookieValues[0]);
if (settings) {
onUserConsent(settings);
}
} catch (e) {
// Log an error if the cookie value is not valid JSON.
}
}
/**
* 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();
در مرحله بعد، مجوزهای دسترسی به وضعیت رضایت و دسترسی به کوکیها را پیکربندی کنید.
برای افزودن مجوزها برای مدیریت حالتهای رضایت:
- برگه مجوزها را انتخاب کنید و روی وضعیت رضایت دسترسیها کلیک کنید.
- روی افزودن نوع رضایت کلیک کنید.
- روی کادر کلیک کنید و از منوی کشویی،
ad_storageرا انتخاب کنید. - نوشتن را بررسی کنید.
- روی افزودن کلیک کنید.
- مراحل ۲ تا ۵ را برای
ad_user_data،ad_personalizationوanalytics_storageتکرار کنید. اگر به انواع رضایت بیشتری نیاز دارید، آنها را به همین روش اضافه کنید. - روی ذخیره کلیک کنید.
برای افزودن مجوزها برای دسترسی به کوکیها:
- برگه مجوزها را انتخاب کنید و روی «خواندن مقدار(های) کوکی» کلیک کنید.
- در قسمت Specific ، نام هر یک از کوکیهایی را که کد شما باید برای تعیین گزینههای رضایت کاربر بخواند، وارد کنید، یک نام در هر خط.
- روی ذخیره کلیک کنید.
۲. ایجاد تستهای واحد
برای اطلاعات بیشتر در مورد ایجاد تست برای قالب خود، به بخش تستها مراجعه کنید.
۳. الگو را با راهکار رضایت ادغام کنید
کد زیر نمونهای از چگونگی ادغام این الگو با کد مربوط به راهکار مدیریت رضایت شما با اضافه کردن یک شنونده را نشان میدهد:
// 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 را برای منطقه US روی 'granted' و ad_storage را برای منطقه US-CA روی 'denied' تنظیم کرده باشید، برای بازدیدکنندهای از کالیفرنیا، تنظیمات خاصتر US-CA اعمال خواهد شد.
| منطقه | ad_storage | رفتار |
|---|---|---|
| ما | 'granted' | برای کاربرانی در ایالات متحده که در کالیفرنیا نیستند ، اعمال میشود |
| ایالات متحده-کالیفرنیا | 'denied' | برای کاربران ایالات متحده-کالیفرنیا اعمال میشود |
| نامشخص | 'granted' | از مقدار پیشفرض 'granted' استفاده میکند. در این مثال، این مقدار برای کاربرانی که در ایالات متحده یا ایالات متحده-کالیفرنیا نیستند، اعمال میشود. |
فرادادههای اضافی
شما میتوانید از API مربوط به gtagSet برای تنظیم پارامترهای اختیاری زیر استفاده کنید:
این APIها فقط در محیط سندباکس قالب GTM در دسترس هستند.
اطلاعات کلیک روی تبلیغ، شناسه مشتری و شناسه جلسه را در URLها منتقل کنید
وقتی بازدیدکنندهای پس از کلیک روی یک تبلیغ وارد وبسایت تبلیغکننده میشود، اطلاعات مربوط به تبلیغ ممکن است به عنوان یک پارامتر جستجو به آدرسهای اینترنتی صفحه فرود اضافه شود. برای بهبود دقت تبدیل، تگهای گوگل معمولاً این اطلاعات را در کوکیهای شخص اول در دامنه تبلیغکننده ذخیره میکنند.
با این حال، اگر ad_storage denied شود، تگهای گوگل این اطلاعات را به صورت محلی ذخیره نمیکنند. برای بهبود کیفیت اندازهگیری کلیک روی تبلیغ در این مورد، تبلیغکنندگان میتوانند به صورت اختیاری اطلاعات کلیک روی تبلیغ را از طریق پارامترهای URL در صفحات مختلف با استفاده از ویژگیای به نام URL passthrough منتقل کنند.
به طور مشابه، اگر analytics_storage روی denied تنظیم شده باشد، میتوان از URL passthrough برای ارسال تجزیه و تحلیلهای مبتنی بر رویداد و جلسه (از جمله تبدیلها) بدون کوکی در صفحات مختلف استفاده کرد.
برای استفاده از URL passthrough باید شرایط زیر رعایت شود:
- برچسبهای گوگلِ آگاه از رضایت در صفحه وجود دارند.
- این سایت استفاده از ویژگی عبور از طریق URL را انتخاب کرده است.
- حالت رضایت (Consent Mode) در صفحه پیادهسازی شده است.
- لینک خروجی به همان دامنهای اشاره دارد که دامنه صفحه فعلی در آن قرار دارد.
- یک gclid/dclid در URL وجود دارد (فقط تگهای Google Ads و Floodlight)
قالب شما باید به کاربر قالب اجازه دهد تا پیکربندی کند که آیا میخواهد این تنظیم را فعال کند یا خیر. کد قالب زیر برای تنظیم url_passthrough روی true استفاده میشود:
gtagSet('url_passthrough', true);
دادههای تبلیغات را ویرایش کنید
وقتی ad_storage رد میشود، هیچ کوکی جدیدی برای اهداف تبلیغاتی تنظیم نمیشود. علاوه بر این، کوکیهای شخص ثالث که قبلاً در google.com و doubleclick.net تنظیم شدهاند، استفاده نخواهند شد. دادههای ارسالی به گوگل همچنان شامل آدرس کامل صفحه، از جمله هرگونه اطلاعات کلیک روی تبلیغ در پارامترهای URL، خواهد بود.
برای ویرایش بیشتر دادههای تبلیغات خود هنگام رد شدن ad_storage ، ads_data_redaction روی true تنظیم کنید.
وقتی ads_data_redaction روی مقدار true تنظیم شده باشد و ad_storage رد شده باشد، شناسههای کلیک تبلیغ که در درخواستهای شبکه توسط Google Ads و برچسبهای Floodlight ارسال میشوند، حذف خواهند شد.
gtagSet('ads_data_redaction', true);
شناسه توسعهدهنده
اگر شما یک فروشنده CMP با شناسه توسعهدهنده صادر شده توسط گوگل هستید، از روش زیر برای تنظیم این شناسه در اسرع وقت در الگوی خود استفاده کنید.
شما فقط زمانی به شناسه توسعهدهنده نیاز دارید که پیادهسازی شما در چندین وبسایت توسط شرکتها یا نهادهای غیرمرتبط استفاده شود. اگر پیادهسازی توسط یک سایت یا نهاد استفاده میشود، برای شناسه توسعهدهنده درخواست ندهید.
gtagSet('developer_id.<your_developer_id>', true);
ارائه مستندات برای کاربران شما
کاربران شما از الگوی رضایت شما برای تنظیم برچسبی که رضایت کاربر را جمعآوری میکند، استفاده خواهند کرد. مستنداتی را برای کاربران خود ارائه دهید که بهترین شیوههای زیر را توضیح دهد:
- نحوه تنظیم پیشفرضهای رضایت در جدول تنظیمات .
- نحوه تنظیم پیشفرضهای رضایت برای مناطق مختلف با اضافه کردن ردیفهای جدول اضافی.
- تگ را در تریگر Consent Initialization - All Pages فعال کنید.
مراحل بعدی
اگر میخواهید الگوی خود را در اختیار همه کاربران Tag Manager قرار دهید، آن را در Community Template Gallery آپلود کنید.