Google Etiket Yöneticisi'ni (GTM) kullanan siteler için bir kullanıcı rızası yönetim çözümü kullanıyorsanız Google İzin Modu'nu destekleyen bir şablon oluşturmanızı önemle öneririz. İzin modu şablonu, kullanıcılarınızın izin modunu kullanmaya başlamasını ve izin çözümüyle kodsuz bir şekilde entegre etmesini sağlayarak zaman ve emekten tasarruf edilmesini sağlar.
İzin Modu şablonları, varsayılan izin durumunu ayarlayan ve ziyaretçi izin seçimlerini Google Etiket Yöneticisi'ne ileten etiketlerin oluşturulmasını destekler. Bu, izin modunu destekleyen Google ve üçüncü taraf etiketlerinin en iyi şekilde çalışmasını sağlar.
Şablon oluşturucu olarak izin modu şablonlarını dahili kullanım için uygulayabilir veya herkese açık hale getirmek için Topluluk Şablon Galerisi'nde yayınlayabilirsiniz. İzin Modu şablonları sunan Kullanıcı Rızası Yönetim Platformu (CMP) sağlayıcıları, İzin Modu dokümanlarımızda listelenme ve Şablon Galerisi seçicinin şablonlarını desteklemelerini sağlama fırsatına sahiptir.
Bu sayfada, izin durumu ve izin türleri tanıtılmakta ve izin modu API'leriyle nasıl kullanılacağı gösterilmektedir. Son bölümde, bir Etiket Yöneticisi şablonu oluşturmak için API'lerin nasıl kullanılacağına dair bir örnek verilmiştir. İzin modu veya Etiket Yöneticisi şablonları konusunda yeniyseniz aşağıdaki makalelerde arka plan bilgileri sağlanır:
İzin durumu ve izin türleri
Google ve üçüncü taraf etiketleri, depolama davranışlarını granted
veya denied
izin durumuna göre ayarlar. Aşağıdaki izin türlerinden herhangi birinde yerleşik izin kontrolleri oluşturabilirler:
İzin Türü | Açıklama |
---|---|
ad_storage |
Reklamcılıkla ilgili çerezler gibi çerezlerin kullanılmasını sağlar |
analytics_storage |
Analizlerle ilgili çerezler (ör. ziyaret süresi) gibi depolamayı etkinleştirir |
functionality_storage |
Web sitesinin veya uygulamanın dil desteği gibi işlevlerini destekleyen depolamayı etkinleştirir |
personalization_storage |
Video önerileri gibi kişiselleştirmeyle ilgili depolamayı etkinleştirir |
security_storage |
Kimlik doğrulama işlevi, sahtekarlık önleme ve diğer kullanıcı koruma işlevleri gibi güvenlikle ilgili bilgilerin depolanmasını etkinleştirir. |
Şablon, kullanıcılarınıza web siteleri tarafından kullanılan her bir izin türü için varsayılan bir izin durumu belirleme olanağı tanımalıdır. Ayrıca, farklı bölgeler için varsayılan izin durumlarını ayarlamak da isteyebilir.
GTM kullanıcıları, izin başlatma tetikleyicisini kullanarak tüm sayfalarda şablonunuzla oluşturulan etiketleri tetiklemelidir. Böylece, diğer tüm etiketlerden önce tetiklenir. Şablon kodu, yapılandırılan varsayılan izin durumlarını tetikleme işleminden hemen sonra ayarlamalıdır. CMP, daha sonra ziyaretçiden tüm geçerli izin türleri için izin vermesini veya reddetmesini ister. Ziyaretçi seçimini belirttiğinde CMP, güncellenen izin durumunu uygun şablon API'si üzerinden iletmelidir. İzin modu, ziyaretçi izin seçimlerini izler ve etiket izni kontrolleri, etiket davranışının buna göre ayarlanmasını sağlar.
Consent API'leri
Etiketleme için GTM'den yararlanan sitelerdeki izin modu uygulamalarında, izin durumlarını yönetmek için GTM'ye özel API'ler, setDefaultConsentState ve updateConsentState kullanılmalıdır. İsteğe bağlı olarak, ads_data_redaction
ve url_passthrough
ayarlarını uygun şekilde belirlemek için gtagSet API'sini kullanabilirler. Bu API'ler yalnızca GTM şablonu korumalı alanı ortamında kullanılabilir.
Etiketi tetiklemek için İzin Başlatma etkinliği kullanılarak, sayfa yüklenirken varsayılan izin durumu mümkün olduğunca erken ayarlanmalıdır. İzin güncellemeleri, kullanıcı izin verdikten veya kullanıcının önceki izin seçimi çerezlerden yüklendikten sonra en kısa süre içinde GTM'ye işaret edilmelidir.
updateConsentState
tetiklemek için birkaç olası yaklaşım vardır.
Bu makalenin ilerleyen örneklerinde iki olası seçenek gösterilmektedir.
Varsayılan izin durumu
Varsayılan izin ayarlarını yapılandırmak için setDefaultConsentState API'sini kullanın.
Aşağıdaki örnekte setDefaultConsentState
çağrısının kullanımı gösterilmektedir.
ad_storage
varsayılan olarak reddeder ve diğer depolama türleri için izin verir.
CMP'den ziyaretçi seçimlerini almak için zaman tanımak amacıyla wait_for_update
kullanır.
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'ad_storage': 'denied',
'analytics_storage': 'granted',
'functionality_storage': 'granted',
'personalization_storage': 'granted',
'security_storage': 'granted',
'wait_for_update': 500
});
İzin durumunu güncelle
Bir web sitesi ziyaretçisi, genellikle bir izin banner'ı ile etkileşimde bulunarak izin tercihlerini belirttiğinde şablon kodunun izin durumlarını updateConsentState API'sine göre uygun şekilde güncellemesi gerekir.
Aşağıdaki örnekte, bir ziyaretçiye yapılan ve tüm depolama türlerine izin verdiğini belirten updateConsentState
çağrısı gösterilmektedir. Bu örnekte granted
için sabit kodlu değerler kullanılmıştır ancak pratikte bu değerler, çalışma zamanında ziyaretçinin CMP tarafından toplanan izni kullanılarak belirlenmelidir.
const updateConsentState = require('updateConsentState');
updateConsentState({
'ad_storage': 'granted',
'analytics_storage': 'granted',
'functionality_storage': 'granted',
'personalization_storage': 'granted',
'security_storage': 'granted'
});
Bölgeye özgü davranış
Belirli bölgelerdeki ziyaretçiler için geçerli olan varsayılan izin durumlarını ayarlamak için şablonda bir bölge belirtin (ISO 3166-2'ye göre). Bölge değerlerinin kullanılması, şablon kullanıcılarının söz konusu bölgelerin ziyaretçilerinden bilgi kaybetmeden bölgesel düzenlemelere uymasını sağlar. setDefaultConsentState
komutunda bölge belirtilmediğinde, değer diğer tüm bölgeler için geçerli olur.
Örneğin, aşağıda İspanya ve Alaska'dan gelen ziyaretçiler için analytics_storage
alanının varsayılan durumu denied
, diğer tüm siteler için analytics_storage
olarak granted
olarak belirlenmiştir:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
En spesifik olanlar önceliklidir
Aynı sayfada bir bölge ve alt bölge değerleriyle iki varsayılan izin komutu oluşursa daha spesifik bir bölgeye sahip komut geçerli olur. Örneğin, ad_storage
bölgesi US
için 'granted'
ve ad_storage
bölgesi US-CA
için 'denied'
olarak ayarlanmışsa Kaliforniya'dan bir ziyaretçi, daha spesifik US-CA
ayarı geçerli olur.
Bölge | ad_storage |
Davranış |
---|---|---|
ABD | 'granted' |
ABD'de olup Kanada'da olmayan kullanıcılar için geçerlidir |
ABD-Kanada | 'denied' |
US-CA kullanıcıları için geçerlidir |
Belirtilmedi | 'granted' |
Varsayılan 'granted' değerini kullanır. Bu örnekte, ABD'de veya US-CA'da bulunmayan kullanıcılar için geçerlidir
|
URL'lerde reklam tıklaması, istemci kimliği ve oturum kimliği bilgileri aktarılıyor
Ziyaretçi bir reklamı tıkladıktan sonra reklamverenin web sitesine geldiğinde, reklamla ilgili bilgiler açılış sayfası URL'lerine bir sorgu parametresi olarak eklenebilir. Google etiketleri, dönüşüm doğruluğunu iyileştirmek için bu bilgileri genellikle reklamverenin alanındaki birinci taraf çerezlerinde depolar.
Ancak ad_storage
denied
ise Google etiketleri bu bilgileri yerel olarak kaydetmez. Bu durumda, reklamverenler URL tıklama ölçümü adı verilen bir özelliği kullanarak isteğe bağlı olarak URL parametreleri aracılığıyla reklam tıklama bilgilerini iletebilir.
Benzer şekilde, analytics_storage
reddedildi olarak ayarlanırsa URL geçişi, sayfalarda çerezler olmadan etkinliğe ve oturuma dayalı analizler (dönüşümler dahil) göndermek için kullanılabilir.
URL geçişinin kullanılması için aşağıdaki koşulların karşılanması gerekir:
- Sayfada izne duyarlı Google etiketleri bulunur.
- Site, URL geçişi özelliğini kullanmayı tercih etti.
- İzin Modu sayfada uygulanır.
- Giden bağlantı, mevcut sayfanın alan adıyla aynı alan anlamına gelir.
- URL'de bir GCLID/DCLID var (yalnızca Google Ads ve Floodlight etiketleri)
Şablonunuz, şablon kullanıcısının bu ayarı etkinleştirmek isteyip istemeyeceğini yapılandırmasına izin vermelidir. Aşağıdaki şablon kodu, url_passthrough'yu doğru değerine ayarlamak için kullanılır:
gtagSet('url_passthrough', true);
Reklam verilerini çıkart
ad_storage
reddedildiğinde, reklam amacıyla yeni çerezler ayarlanmaz. Ayrıca, daha önce google.com ve doubleclick.net'te ayarlanan üçüncü taraf çerezleri kullanılmayacaktır. Google'a gönderilen veriler, URL parametrelerindeki tüm reklam tıklama bilgileri dahil olmak üzere tam sayfa URL'sini içermeye devam eder.
ad_storage
reddedildiğinde reklam verilerinizi tekrar çıkartmak için ads_data_redaction
değerini true olarak ayarlayın.
gtagSet('ads_data_redaction', true);
ads_data_redaction
doğru olduğunda ve ad_storage
reddedildiğinde Google Ads ve Floodlight etiketleri tarafından ağ isteklerinde gönderilen reklam tıklama tanımlayıcıları çıkarılır.
Geliştirici Kimliği
Google tarafından verilen geliştirici kimliğine sahip bir CMP tedarikçisiyseniz bunu şablonunuzda mümkün olduğunca erken ayarlamak için aşağıdaki yöntemi kullanın.
gtagSet('developer_id.<your_developer_id>', true);
Uygulama örneği
Bu örnekte, ziyaretçi izin seçeneklerini almak için kullanıcı rızası yönetim çözümündeki çerezleri okuyan bir şablonun nasıl oluşturulacağı gösterilmektedir. Bu, ziyaretçilerin bir önceki sayfada seçimlerini yaptıkları yükleme işlemi sırasında bu seçimleri GTM'ye mümkün kılar.
Bu örneği uygulamak için şablonda varsayılan izin durumunu barındıran bir alan oluşturacaksınız. Uygulama kodu, çalışma zamanında varsayılan izin durumunu ayarlamak için bu alanı okur. Güncelleme komutu için kodunuz, ziyaretçi izni seçeneklerini depolamak için izin çözümü tarafından ayarlanan bir çerezi okumaya çalışır.
Ziyaretçinin henüz izin seçimleri yapmadığı veya iznini değiştirme kararı aldığı durumlarda bu amaçla updateConsentState
için bir geri çağırma ayarlayacaksınız.
Ana adımlar şunlardır:
- Şablonu oluşturmak için Şablon Düzenleyici'yi kullanın
- Şablonu izin çözümüyle entegre etme
- Şablon kullanıcısı kurulumu
Şablonu oluşturmak için Şablon Düzenleyici'yi kullanın
- Google Etiket Yöneticisi hesabınıza giriş yapın.
- Sol gezinme menüsünde Şablonlar'ı seçin.
- Etiket Şablonları bölmesinde Yeni'yi tıklayın.
Alan Ekle
- Alanlar sekmesini seçin ve Alan Ekle'yi tıklayın.
- Param tablosu'nu seçin.
- Adı
defaultSettings
olarak değiştirin. - Alanı genişletin.
- Görünen adı
Default settings
olarak güncelleyin. - Sütun ekle'yi tıklayın, Metin girişi'ni seçin, adı
region
olarak değiştirin ve Sütun değerlerinin benzersiz olmasını gerekli kıl kutusunu işaretleyin. - Sütunu genişletin ve görünen adı
Region (leave blank to have consent apply to all regions)
olarak değiştirin. Parantez içindeki ifade, şablon kullanıcılarınıza yönelik dokümanlardır. - Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı
granted
olarak değiştirin. - Sütunu genişletin ve görünen adı
Granted Consent Types(comma separated)
olarak değiştirin. - Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı
denied
olarak değiştirin. - Sütunu genişletin ve görünen adı
Denied Consent Types (comma separated)
olarak değiştirin. - Alan Ekle'yi tıklayın, Onay kutusu'nu seçin ve alan adını
ads_data_redaction
olarak değiştirin. - Görünen adı
Redact Ads Data
olarak güncelleyin.
Kod Ekle
Aşağıdaki kodu kopyalayın ve parametreleri köşeli parantez içinde (çerez adı ve güncellenmiş izin durumunu kontrol edin) uygulamanıza uygun olanlarla değiştirin. Güncelleme işleminden sonra, GTM Kod sekmesindeki ortak kodu değiştirmek için kodunuzu kullanın. Yapıştırdıktan sonra şablonu kaydedin.
// 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 = '<replace_with_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',
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
*
* Note: Developer IDs are only required when you're building an implementation
* that will be used across multiple websites by unrelated companies or
* entities. If the implementation will be used by one site or entity,
* please do not apply for a developer ID.
*/
const main = (data) => {
// Set developer ID
gtagSet('developer_id.<replace_with_your_developer_id>', true);
// Set default consent state(s)
data.defaultSettings.forEach(settings => {
const defaultData = parseCommandData(settings);
defaultData.wait_for_update = 500;
setDefaultConsentState(defaultData);
});
gtagSet('ads_data_redaction', data.ads_data_redaction);
// Check if cookie is set and has values that corresopnd 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();
İzin Ekle
Ardından, izin durumuna ve çerezlere erişim izinlerini yapılandırın.
İzin durumlarını yönetmek için:
- İzinler sekmesini seçin ve İzin durumuna erişir'i tıklayın.
- İzin türü ekle'yi tıklayın.
- Kutuyu tıklayın ve açılır menüden
ad_storage
'i seçin. - Yaz'ı işaretleyin.
- Ekle'yi tıklayın.
2-5 arası adımları tekrarlayarak ad_storage
yerine analytics_storage
kullanın.
Kaydet'i tıklayarak işlemi tamamlayın.
Çerezlere erişmek için:
- İzinler sekmesini seçin ve Çerez değerlerini okur'u tıklayın.
- Specific (Kimlik) altında, kullanıcının izin tercihlerini belirlemek için her çerezin adını, kodunuzun okuması gereken her bir ada girin.
- Kaydet'i tıklayın.
Testler
Şablonunuz için test oluşturma hakkında bilgi edinmek üzere Testler bölümüne bakın.
Şablonu izin çözümüyle entegre etme
Aşağıdaki kod, bir işleyici ekleyerek izin yönetim çözümünüzün koduyla bu şablonu nasıl entegre edebileceğine dair bir örnek göstermektedir:
// 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);
});
};
Şablon kullanıcı kurulumu
Şablon kullanıcıları için doküman sağlamanız gerekir. Bu şablon, İzin Başlatma - Tüm Sayfalar tetikleyicisini kullanan bir etiket oluşturmak için kullanılır. Ayarlar tablosunda izin türlerinin listesi ve her birini varsayılan olarak izin vermek mi yoksa reddetmek mi istedikleri girilmelidir. Varsayılan ayarlar kullanıcının bulunduğu yere bağlı olarak farklılık gösteriyorsa aynı varsayılan izin durumunu paylaşan her bölge grubu için bir satır oluşturmalıdır.