Bài viết này dành cho các nhà phát triển duy trì giải pháp quản lý sự đồng ý trên những trang web sử dụng Trình quản lý thẻ của Google (GTM).
Trang này giới thiệu các loại sự đồng ý trong Trình quản lý thẻ của Google và hướng dẫn bạn cách tích hợp các loại sự đồng ý đó với giải pháp quản lý sự đồng ý.
Tại sao bạn nên sử dụng mẫu thẻ cho sự đồng ý?
Khi bạn cung cấp mẫu thẻ, người dùng có thể tích hợp giải pháp yêu cầu đồng ý mà không cần lập trình, giúp tiết kiệm đáng kể thời gian và công sức.
Người dùng có thể đặt trạng thái đồng ý mặc định bằng cách sử dụng mẫu chế độ đồng ý và thông báo cho Trình quản lý thẻ của Google về lựa chọn đồng ý của khách truy cập. Điều này giúp đảm bảo hoạt động tối ưu của các thẻ của Google và bên thứ ba hỗ trợ chế độ đồng ý.
Là nhà tạo mẫu, bạn có thể triển khai các mẫu chế độ đồng ý để sử dụng nội bộ hoặc phát hành các mẫu đó trong Thư viện mẫu cho cộng đồng để cung cấp công khai. Những nhà cung cấp Nền tảng quản lý sự đồng ý (CMP) cung cấp mẫu chế độ đồng ý có cơ hội được liệt kê trong tài liệu về chế độ đồng ý của chúng tôi và có bộ chọn Thư viện mẫu giới thiệu mẫu của họ.
Trạng thái đồng ý và loại đồng ý
Thẻ Google và thẻ của bên thứ ba điều chỉnh hành vi lưu trữ dựa trên trạng thái đồng ý là granted
hoặc denied
. Các ứng dụng này có thể tích hợp sẵn tính năng kiểm tra trạng thái đồng ý cho bất kỳ loại đồng ý nào sau đây:
Loại yêu cầu đồng ý | Nội dung mô tả |
---|---|
ad_storage |
Cho phép việc lưu trữ (chẳng hạn như cookie) có liên quan đến quảng cáo. |
ad_user_data |
Đặt trạng thái đồng ý đối với việc gửi dữ liệu người dùng đến Google cho mục đích quảng cáo trực tuyến. |
ad_personalization |
Đặt trạng thái đồng ý cho quảng cáo được cá nhân hoá. |
analytics_storage |
Cho phép việc lưu trữ, chẳng hạn như cookie, có liên quan đến số liệu phân tích (ví dụ: thời lượng truy cập). |
functionality_storage |
Cho phép việc lưu trữ hỗ trợ chức năng của trang web hoặc ứng dụng, chẳng hạn như chế độ cài đặt ngôn ngữ. |
personalization_storage |
Cho phép việc lưu trữ có liên quan đến hoạt động cá nhân hoá, chẳng hạn như các đề xuất về video. |
security_storage |
Cho phép việc lưu trữ có liên quan đến tính bảo mật, chẳng hạn như chức năng xác thực, biện pháp ngăn chặn hành vi gian lận và các biện pháp bảo vệ người dùng khác |
Tạo mẫu mới về sự đồng ý
Chế độ đồng ý theo dõi các lựa chọn đồng ý của khách truy cập và các bước kiểm tra sự đồng ý của thẻ để đảm bảo rằng hành vi của thẻ được điều chỉnh cho phù hợp. Khi tạo mẫu đồng ý mới, hãy làm theo các phương pháp hay nhất:
Sử dụng API chế độ đồng ý của Trình quản lý thẻ setDefaultConsentState và updateConsentState thay vì
gtag consent
.Đặt trạng thái đồng ý mặc định ngay khi kích hoạt bằng trình kích hoạt Hoạt động tiến hành lấy sự đồng ý – Tất cả các trang.
CMP phải nhắc khách truy cập sớm nhất có thể để cấp hoặc từ chối cấp sự đồng ý cho tất cả các loại sự đồng ý hiện hành.
Khi khách truy cập cho biết lựa chọn đồng ý của họ, CMP phải chuyển trạng thái đồng ý đã cập nhật.
1. Tạo mẫu mới
Phương pháp triển khai này sử dụng một trường trong mẫu để lưu trữ trạng thái đồng ý mặc định. Mã triển khai sẽ đọc trường đó để đặt trạng thái đồng ý mặc định trong thời gian chạy. Đối với lệnh cập nhật, mã của bạn sẽ cố gắng đọc cookie do giải pháp yêu cầu đồng ý đặt ra để lưu trữ lựa chọn đồng ý của khách truy cập. Bạn cũng sẽ thiết lập lệnh gọi lại cho
updateConsentState
để xử lý trường hợp khách truy cập chưa chọn đồng ý hoặc quyết định thay đổi lựa chọn đồng ý.
Cách tạo mẫu yêu cầu đồng ý:
- Đăng nhập vào tài khoản Trình quản lý thẻ của Google.
- Trong bảng điều hướng bên trái, hãy chọn Mẫu.
- Trong ngăn Mẫu thẻ, hãy nhấp vào Mới.
Cách đặt trạng thái đồng ý mặc định:
- Chọn thẻ Trường, nhấp vào Thêm trường > Bảng tham số.
- Thay đổi tên thành
defaultSettings
. - Mở rộng trường.
- Cập nhật Tên hiển thị thành
Default settings
. - Nhấp vào Thêm cột, chọn Nhập văn bản, thay đổi tên thành
region
rồi đánh dấu vào hộp Yêu cầu giá trị cột phải là duy nhất. - Mở rộng cột và thay đổi tên hiển thị thành
Region (leave blank to have consent apply to all regions)
. Câu lệnh trong ngoặc đơn là tài liệu dành cho người dùng mẫu của bạn. Tìm hiểu thêm về cách thiết lập trạng thái đồng ý mặc định cho nhiều khu vực. - Nhấp vào Thêm cột, chọn Nhập văn bản, thay đổi tên thành
granted
. - Mở rộng cột rồi thay đổi tên hiển thị thành
Granted Consent Types (comma separated)
. - Nhấp vào Thêm cột, chọn Nhập văn bản, đổi tên thành
denied
. - Mở rộng cột và thay đổi tên hiển thị thành
Denied Consent Types (comma separated)
Không bắt buộc: Cách thêm tính năng hỗ trợ loại bỏ dữ liệu quảng cáo:
- Nhấp vào Thêm trường, chọn Hộp kiểm rồi thay đổi tên trường thành
ads_data_redaction
. - Cập nhật Tên hiển thị thành
Redact Ads Data
Tìm hiểu thêm về hành vi của cookie thông qua tính năng loại bỏ dữ liệu quảng cáo
Không bắt buộc: Cách thêm tính năng hỗ trợ truyền tham số URL:
- Nhấp vào Thêm trường, chọn Hộp kiểm rồi thay đổi tên trường thành
url_passthrough
. - Cập nhật Tên hiển thị thành
Pass through URL parameters
Tìm hiểu thêm về cách chuyển tham số URL
Cách thêm mã triển khai:
- Mở thẻ Code (Mã) trong trình chỉnh sửa mẫu.
- Trong mã mẫu bên dưới, hãy chỉnh sửa các trường phần giữ chỗ.
- Sao chép mã này và thay thế mã nguyên mẫu trong trình chỉnh sửa mẫu bằng mã đó.
- Lưu mẫu.
// 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();
Tiếp theo, hãy định cấu hình quyền truy cập vào trạng thái đồng ý và quyền truy cập vào cookie.
Cách thêm quyền để quản lý trạng thái đồng ý:
- Chọn thẻ Quyền rồi nhấp vào Truy cập trạng thái đồng ý.
- Nhấp vào Thêm loại đồng ý.
- Nhấp vào hộp và chọn
ad_storage
từ trình đơn thả xuống. - Đánh dấu vào Write (Ghi).
- Nhấp vào Thêm
- Lặp lại các bước 2-5 cho
ad_user_data
,ad_personalization
vàanalytics_storage
. Nếu bạn cần các loại đồng ý khác, hãy thêm các loại đó theo cách tương tự. - Nhấp vào Lưu.
Cách thêm quyền truy cập vào cookie:
- Chọn thẻ Quyền rồi nhấp vào Đọc(các) giá trị của cookie.
- Trong phần Cụ thể, hãy nhập tên của từng cookie mà mã của bạn cần đọc để xác định lựa chọn đồng ý của người dùng, mỗi dòng một tên.
- Nhấp vào Lưu.
2. Tạo chương trình kiểm thử đơn vị
Hãy xem phần Kiểm thử để biết thông tin về cách tạo kiểm thử cho mẫu.
3. Tích hợp mẫu với giải pháp đồng ý
Đoạn mã sau đây cho thấy một ví dụ về cách tích hợp mẫu này với mã cho giải pháp quản lý sự đồng ý bằng cách thêm một trình nghe:
// 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);
});
};
Cập nhật trạng thái đồng ý
Sau khi khách truy cập trang web cho biết lựa chọn về sự đồng ý của họ, thường là thông qua việc tương tác với biểu ngữ yêu cầu đồng ý, mã mẫu sẽ cập nhật trạng thái đồng ý tương ứng với API updateConsentState.
Ví dụ sau đây minh hoạ lệnh gọi updateConsentState
cho một khách truy cập cho biết họ đồng ý với mọi loại hình lưu trữ. Xin nhắc lại, ví dụ này sử dụng các giá trị được mã hoá cứng cho granted
, nhưng trong thực tế, các giá trị này phải được xác định trong thời gian chạy bằng cách sử dụng sự đồng ý của khách truy cập do CMP thu thập.
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'
});
Giới thiệu về hành vi theo khu vực
Để đặt trạng thái đồng ý mặc định áp dụng cho khách truy cập từ những khu vực cụ thể, hãy chỉ định một khu vực (theo ISO 3166-2) trong mẫu. Việc sử dụng giá trị khu vực giúp người dùng mẫu tuân thủ các quy định theo khu vực mà không làm mất thông tin của khách truy cập bên ngoài các khu vực đó. Khi một khu vực không được chỉ định trong lệnh setDefaultConsentState
, giá trị đó sẽ áp dụng cho mọi khu vực khác.
Ví dụ: đoạn mã sau đây đặt trạng thái mặc định cho analytics_storage
thành denied
cho khách truy cập từ Tây Ban Nha và Alaska, đồng thời đặt analytics_storage
thành granted
cho tất cả những người khác:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
Cụ thể nhất được ưu tiên
Nếu hai lệnh mặc định về sự đồng ý xuất hiện trên cùng một trang với các giá trị cho một khu vực và tiểu khu vực, thì lệnh có khu vực cụ thể hơn sẽ có hiệu lực. Ví dụ: nếu bạn đặt ad_storage
thành 'granted'
cho khu vực US
và đặt ad_storage
thành 'denied'
cho khu vực US-CA
, thì một khách truy cập ở California sẽ có chế độ cài đặt US-CA
cụ thể hơn.
Khu vực | ad_storage |
Hành vi |
---|---|---|
Hoa Kỳ | 'granted' |
Áp dụng cho người dùng ở Hoa Kỳ không ở Canada |
US-CA | 'denied' |
Áp dụng cho người dùng ở Hoa Kỳ và Canada |
Không xác định | 'granted' |
Sử dụng giá trị mặc định là 'granted' . Trong ví dụ này, điều đó áp dụng cho những người dùng không ở Hoa Kỳ hoặc Hoa Kỳ-California
|
Siêu dữ liệu bổ sung
Bạn có thể sử dụng API gtagSet để đặt các thông số không bắt buộc sau:
Các API này chỉ có trong môi trường hộp cát của mẫu GTM.
Truyền thông tin về lượt nhấp quảng cáo, mã ứng dụng và mã phiên trong URL
Khi khách truy cập truy cập vào trang web của nhà quảng cáo sau khi nhấp vào quảng cáo, thông tin về quảng cáo đó có thể được thêm vào URL trang đích dưới dạng tham số truy vấn. Để cải thiện độ chính xác của lượt chuyển đổi, các thẻ Google thường lưu trữ thông tin này trong cookie của bên thứ nhất trên miền của nhà quảng cáo.
Tuy nhiên, nếu ad_storage
là denied
, thì thẻ Google sẽ không lưu thông tin này trên máy. Để cải thiện chất lượng đo lường lượt nhấp vào quảng cáo trong trường hợp này, nhà quảng cáo có thể tuỳ ý truyền thông tin về lượt nhấp vào quảng cáo thông qua các tham số URL trên các trang bằng cách sử dụng tính năng truyền URL.
Tương tự, nếu bạn đặt analytics_storage
thành bị từ chối, thì tính năng truyền qua URL có thể được dùng để gửi số liệu phân tích dựa trên sự kiện và phiên hoạt động (bao gồm cả lượt chuyển đổi) mà không cần cookie trên các trang.
Các điều kiện sau phải được đáp ứng để sử dụng tính năng truyền qua URL:
- Thẻ Google nhận biết sự đồng ý xuất hiện trên trang.
- Trang web đã chọn sử dụng tính năng truyền qua URL.
- Chế độ đồng ý được triển khai trên trang.
- Đường liên kết ngoài trỏ đến cùng một miền với miền của trang hiện tại.
- URL có gclid/dclid (chỉ áp dụng cho thẻ Google Ads và Floodlight)
Mẫu của bạn phải cho phép người dùng mẫu định cấu hình xem họ có muốn bật chế độ cài đặt này hay không. Mã mẫu sau đây được dùng để đặt url_passpass thành true:
gtagSet('url_passthrough', true);
Xoá dữ liệu quảng cáo
Khi ad_storage
bị từ chối, hệ thống sẽ không đặt cookie mới cho mục đích quảng cáo. Ngoài ra, cookie của bên thứ ba đã đặt trước đây trên google.com và
doubleclick.net sẽ không được sử dụng. Dữ liệu gửi đến Google sẽ vẫn bao gồm URL đầy đủ của trang, kể cả mọi thông tin về lượt nhấp vào quảng cáo trong các tham số URL.
Để loại bỏ thêm dữ liệu quảng cáo khi ad_storage
bị từ chối, hãy đặt
ads_data_redaction
thành true.
Khi ads_data_redaction
là true và ad_storage
bị từ chối, giá trị nhận dạng lượt nhấp
vào quảng cáo do thẻ Google Ads và Floodlight gửi trong các yêu cầu mạng sẽ
bị loại bỏ.
gtagSet('ads_data_redaction', true);
Mã nhà phát triển
Nếu bạn là nhà cung cấp CMP có mã nhà phát triển do Google phát hành, hãy sử dụng phương thức sau để thiết lập mã này càng sớm càng tốt trong mẫu.
Bạn chỉ cần mã nhà phát triển khi các công ty hoặc pháp nhân không liên quan sử dụng cách triển khai của bạn trên nhiều trang web. Nếu một trang web hoặc pháp nhân sử dụng cách triển khai này, thì đừng đăng ký mã nhà phát triển.
gtagSet('developer_id.<your_developer_id>', true);
Cung cấp tài liệu cho người dùng
Người dùng sẽ sử dụng mẫu yêu cầu đồng ý của bạn để thiết lập một thẻ thu thập sự đồng ý của người dùng. Cung cấp tài liệu cho người dùng giải thích các phương pháp hay nhất sau đây:
- Cách đặt chế độ mặc định về sự đồng ý trong bảng Cài đặt.
- Cách thiết lập trạng thái đồng ý mặc định cho nhiều khu vực bằng cách thêm các hàng bảng khác.
- Kích hoạt thẻ trên điều kiện kích hoạt Hoạt động tiến hành lấy sự đồng ý – Tất cả các trang.
Các bước tiếp theo
Nếu bạn muốn cung cấp mẫu cho tất cả người dùng Trình quản lý thẻ, hãy tải mẫu đó lên Thư viện mẫu cho cộng đồng.