Bài viết này dành cho những nhà phát triển vẫn duy trì giải pháp quản lý sự đồng ý trên các 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 đồng ý trong Trình quản lý thẻ của Google và hướng dẫn bạn cách tích hợp chúng với giải pháp quản lý sự đồng ý của bạn.
Tại sao bạn nên sử dụng mẫu thẻ để thu thập sự đồng ý?
Khi bạn cung cấp mẫu thẻ, người dùng có thể tích hợp sự đồng ý của bạn theo cách không dùng mã, 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 các lựa chọn đồng ý của khách truy cập cho Trình quản lý thẻ của Google. Việc này giúp đảm bảo tính tối ưu hoạt động của thẻ Google và thẻ của bên thứ ba hỗ trợ về sự đồng ý .
Là nhà tạo mẫu, bạn có thể triển khai các mẫu về chế độ đồng ý để sử dụng nội bộ hoặc xuất bản chúng trong Thư viện mẫu cho cộng đồng để tạo chúng sẽ xuất hiện công khai. Những nhà cung cấp Nền tảng quản lý sự đồng ý (CMP) cung cấp các mẫu chế độ đồng ý có cơ hội được đưa vào chế độ đồng ý và có bộ chọn Thư viện mẫu có các mẫu tương ứng.
Trạng thái đồng ý và các loại đồng ý
Các thẻ của Google và bên thứ ba điều chỉnh cách hoạt động của bộ nhớ dựa trên sự đồng ý
trạng thái granted
hoặc denied
. Trẻ có thể tích hợp sẵn chế độ kiểm tra trạng thái đồng ý
dành cho bất kỳ loại đồng ý nào sau đây:
Loại đồ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ụ: truy cập vào thời lượng). |
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ư video nội dung đề xuất. |
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ư xác thực chức năng, chống lừa đảo và các biện pháp bảo vệ người dùng khác |
Tạo mẫu đồng ý mới
Chế độ đồng ý theo dõi các lựa chọn đồng ý của khách truy cập và quy trình kiểm tra trạng thái đồng ý đối với thẻ hãy đảm bảo rằng hành vi của thẻ điều chỉnh cho phù hợp. Khi tạo một yêu cầu đồng ý mới mẫu, hãy làm theo các phương pháp hay nhất:
Sử dụng các 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 cách sử dụng Đ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.
CMP phải nhắc khách truy cập đồng ý hoặc từ chối trong thời gian sớm nhất có thể cho mọi loại đồng ý có thể áp dụng.
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 ý.
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 để giữ trạng thái đồng ý mặc định. Mã triển khai sẽ đọc trường đó để đặt giá trị 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 đồng ý đặt nhằm lưu trữ các lựa chọn đồng ý của khách truy cập. Bạn cũng sẽ thiết lập một lệnh gọi lại cho
updateConsentState
để xử lý trường hợp này khi khách truy cập chưa đưa ra lựa chọn đồng ý hoặc quyết định thay đổi sự đồng ý của họ.
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 thanh đ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 thông số.
- Hãy đổ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, đổi tên thành
region
và chọn hộp Yêu cầu các giá trị cột phải là duy nhất. - Mở rộng cột rồi 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à cho người dùng mẫu của bạn. Tìm hiểu thêm về thiết lập chế độ đồ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, đổ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 rồi 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ợ cho tính năng loại bỏ dữ liệu quảng cáo:
- Nhấp vào Thêm trường, chọn Hộp đánh dấu 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 cookie với 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 đánh dấu 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ề chuyển thông qua 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ã rồi thay thế mã nguyên mẫu bằng mã đó trong trình chỉnh sửa mẫu.
- 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 các quyền để truy cập vào trạng thái đồng ý và quyền truy cập 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 vào 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 mục Write (Ghi).
- Nhấp vào Thêm
- Lặp lại các bước từ 2 đến 5 đối với
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 đồng ý đó vào . - Nhấp vào Lưu.
Cách thêm quyền truy cập vào cookie:
- Chọn thẻ Permissions (Quyền) rồi nhấp vào Đọc (các) giá trị cookie.
- Trong phần Specific (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 tên một dòng.
- Nhấp vào Lưu.
2. Tạo chương trình kiểm thử đơn vị
Xem phần Kiểm thử để biết thông tin về cách tạo bài kiểm thử cho mẫu.
3. Tích hợp mẫu này với giải pháp yêu cầu sự đồ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 đoạn 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 đồng ý của họ, thường là thông qua tương tác với một biểu ngữ yêu cầu đồng ý, mã mẫu sẽ cập nhật trạng thái đồng ý trạng thái tương ứng với API updateConsentState.
Ví dụ sau đây cho thấy lệnh gọi updateConsentState
cho một khách truy cập
cho biết rằng họ đồng ý với tất cả các loại hình lưu trữ. Xin nhắc lại, ví dụ này sử dụng mã hoá cứng
các giá trị 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
thông qua sự đồng ý của khách truy cập mà 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 cụ thể
Để đặt trạng thái đồng ý mặc định áp dụng cho khách truy cập ở những khu vực cụ thể,
chỉ định một khu vực (theo ISO
3166-2) trong
mẫu. Việc sử dụng giá trị khu vực cho phép người dùng mẫu tuân thủ 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 đó. Thời gian
khu vực không được chỉ định trong lệnh setDefaultConsentState
, giá trị này
áp dụng cho tất cả các vùng khác.
Ví dụ: mục sau đây đặt trạng thái mặc định của 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 dùng khác:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
Nội dung cụ thể nhất sẽ được ưu tiên
Nếu hai lệnh về sự đồng ý mặc định 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 vùng, thì hành động với 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
, một khách truy cập từ California
chế độ cài đặt US-CA
cụ thể hơn sẽ có hiệu lực.
Khu vực | ad_storage |
Hành vi |
---|---|---|
Hoa Kỳ | 'granted' |
Áp dụng cho những người dùng ở Hoa Kỳ không ở Canada |
Hoa Kỳ-Canada | 'denied' |
Áp dụng cho người dùng US-CA |
Không xác định | 'granted' |
Sử dụng giá trị mặc định của 'granted' . Trong ví dụ này,
á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 đây:
Các API này chỉ khả dụng trong môi trường hộp cát mẫu GTM.
Chuyển qua thông tin về lượt nhấp vào quảng cáo, mã ứng dụng khách và mã phiên trong các URL
Khi một khách truy cập vào trang web của một 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 nối vào URL trang đích dưới dạng một 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
, các thẻ Google sẽ không lưu thông tin này
cục bộ. Để 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ể
tùy ý chuyển thông tin về lượt nhấp vào quảng cáo thông qua các thông số URL trên các trang bằng cách sử dụng
có tên là Truyền qua 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 sử 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
trên các trang.
Các điều kiện sau đây phải được đáp ứng để sử dụng tính năng truyền qua URL:
- Các thẻ Google nhận biết được sự đồng ý đã có 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 đi dẫn đến cùng một miền với miền của trang hiện tại.
- GCLID/dclid có trong URL (chỉ 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 cài đặt này. Mã mẫu sau đây được dùng để đặt url_pass through thành true:
gtagSet('url_passthrough', true);
Loại bỏ dữ liệu quảng cáo
Khi ad_storage
bị từ chối, sẽ không có cookie mới nào được đặt cho quảng cáo
. Ngoài ra, các 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, bao gồm mọi thông tin về lượt nhấp vào quảng cáo trong tham số URL.
Để loại bỏ thêm dữ liệu quảng cáo của bạn khi ad_storage
bị từ chối, hãy đặt
ads_data_redaction
thành true.
Khi ads_data_redaction
là đúng và ad_storage
bị từ chối, lượt nhấp vào quảng cáo
giá trị nhận dạng do thẻ Google Ads và Floodlight gửi trong yêu cầu mạng sẽ được
bị loại bỏ.
gtagSet('ads_data_redaction', true);
Mã nhà phát triển
Nếu bạn là một nhà cung cấp CMP có mã nhà phát triển do Google cấp, hãy sử dụng các phương thức sau để đặt 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 triển khai của bạn sẽ được sử dụng trên nhiều trang web bởi các công ty hoặc pháp nhân không liên quan. Nếu cách triển khai sẽ được một trang web hoặc pháp nhân sử dụng, 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 của bạn
Người dùng sẽ sử dụng mẫu đồng ý của bạn để thiết lập một thẻ thu thập người dùng đồng ý. Cung cấp tài liệu giải thích rõ nhất cho người dùng của bạn thực tiễn:
- Cách đặt trạng thái đồng ý mặc định trong bảng Cài đặt.
- Cách thiết lập chế độ đồng ý mặc định cho nhiều khu vực bằng cách thêm chế độ đồng ý bổ sung các hàng của bảng.
- 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 của mình 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.