Bu makale, Google Etiket Yöneticisi (GTM) kullanan web sitelerinde kullanıcı rızası yönetim çözümü bulunduran geliştiriciler içindir.
Bu sayfada, Google Etiket Yöneticisi'ndeki izin türleri tanıtılmakta ve bunların kullanıcı rızası yönetim çözümünüzle nasıl entegre edileceği gösterilmektedir.
İzin için neden etiket şablonu kullanmalısınız?
Bir etiket şablonu sağladığınızda kullanıcılarınız izin çözümünüzü kodsuz bir şekilde entegre ederek önemli ölçüde zaman ve efor tasarrufu sağlayabilir.
Kullanıcılar, izin modu şablonu kullanarak varsayılan izin durumlarını ayarlayabilir ve ziyaretçi izin tercihlerini Google Etiket Yöneticisi'ne iletebilir. Bu sayede, izin modunu destekleyen Google ve üçüncü taraf etiketlerinin optimum şekilde çalışması sağlanır.
Ş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ı, izin modu dokümanlarımızda listelenme ve şablon galerisi seçicide şablonlarını öne çıkarma fırsatına sahiptir.
İ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 biri için yerleşik izin kontrolleri olabilir:
İzin Türü | Açıklama |
---|---|
ad_storage |
Reklamcılıkla ilgili bilgilerin (ör. çerezler) depolanmasını etkinleştirir. |
ad_user_data |
Kullanıcı verilerinin internet reklamcılığı amacıyla Google'a gönderilmesine yönelik izinleri belirler. |
ad_personalization |
Kişiselleştirilmiş reklamcılığa yönelik izni belirler. |
analytics_storage |
Analizle ilgili olarak çerezler gibi bilgilerin (ör. ziyaret süresi) depolanmasını etkinleştirir. |
functionality_storage |
Web sitesinin veya uygulamanın işlevlerini destekleyen bilgilerin (ör. dil ayarları) depolanmasını etkinleştirir. |
personalization_storage |
Video önerileri gibi kişiselleştirmeyle ilgili bilgilerin depolanmasını 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. |
Yeni izin şablonu oluşturma
İzin modu, ziyaretçi izin tercihlerini izler ve etiket izin kontrolleri, etiket davranışının buna göre ayarlanmasını sağlar. Yeni bir izin şablonu oluştururken en iyi uygulamaları izleyin:
gtag consent
yerine Etiket Yöneticisi izin modu API'leri setDefaultConsentState ve updateConsentState'i kullanın.İzin Başlatma - Tüm Sayfalar tetikleyicisini kullanarak, etkinleştirildikten hemen sonra varsayılan izin durumlarını ayarlayın.
CMP'nin, geçerli tüm izin türleri için ziyaretçiden en kısa sürede izin vermesini veya reddetmesini istemesi gerekir.
Bir ziyaretçi izin tercihini belirttiğinde CMP'nin güncellenmiş izin durumunu iletmesi gerekir.
1. Yeni şablon oluşturma
Bu uygulama yaklaşımında, varsayılan izin durumunu tutmak için şablonda bir alan kullanılır. Uygulama kodu, çalışma zamanında varsayılan izin durumunu ayarlamak için bu alanı okur. Kodunuz, güncelleme komutu için ziyaretçi izin tercihlerini depolamak amacıyla izin çözümü tarafından ayarlanan bir çerezi okumaya çalışır. Ayrıca, ziyaretçinin henüz izin seçimlerini yapmadığı veya izinlerini değiştirmeye karar verdiği durumlarda
updateConsentState
için geri arama ayarlayabilirsiniz.
İzin şablonu oluşturmak için:
- Google Etiket Yöneticisi hesabınıza giriş yapın.
- Sol gezinme bölmesinde Şablonlar'ı seçin.
- Etiket Şablonları bölmesinde Yeni'yi tıklayın.
Varsayılan izin durumlarını ayarlamak için:
- Alanlar sekmesini seçin ve Alan Ekle > Parametre tablosu'nu tıklayın.
- 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ı zorunlu 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ız için bir dokümandır. Farklı bölgeler için izin varsayılanlarını ayarlama hakkında daha fazla bilgi edinin. - Sütun ekle'yi tıklayın, Metin girişi'ni seçin, 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, adı
denied
olarak değiştirin. - Sütunu genişletin ve görünen adı
Denied Consent Types (comma separated)
olarak değiştirin
İsteğe bağlı: Reklam verileri azaltma desteği eklemek için:
- 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
Reklam verileri azaltma ile çerez davranışı hakkında daha fazla bilgi edinin.
İsteğe bağlı: URL parametrelerinin iletilmesine yönelik destek eklemek için:
- Alan Ekle'yi tıklayın, Onay Kutusu'nu seçin ve alan adını
url_passthrough
olarak değiştirin. - Görünen adı
Pass through URL parameters
olarak güncelleyin
Uygulama kodunu eklemek için:
- Şablon düzenleyicide Kod sekmesini açın.
- Aşağıdaki kod örneğinde yer tutucu alanları düzenleyin.
- Kodu kopyalayıp şablon düzenleyicideki şablon kodunu bununla değiştirin.
- Ş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 = '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();
Ardından, izin durumuna ve çerezlere erişim izinlerini yapılandırın.
İzin durumlarını yönetme izni eklemek için:
- İzinler sekmesini seçin ve Erişim izni durumunu kontrol eder'i tıklayın.
- İzin türü ekle'yi tıklayın.
- Kutuyu tıklayın ve açılır menüden
ad_storage
simgesini seçin. - Yaz'ı işaretleyin.
- Ekle'yi tıklayın.
ad_user_data
,ad_personalization
veanalytics_storage
için 2-5. adımları tekrarlayın. Daha fazla izin türüne ihtiyacınız varsa bunları da aynı şekilde ekleyin.- Kaydet'i tıklayın.
Çerezlere erişme izinleri eklemek için:
- İzinler sekmesini seçin ve Çerez değerlerini okuma'yı tıklayın.
- Belirli bölümünde, kullanıcının izin tercihlerini belirlemek için kodunuzun okuması gereken her çerezin adını satır başına bir ad olacak şekilde girin.
- Kaydet'i tıklayın.
2. Birim testi oluşturma
Şablonunuz için test oluşturma hakkında bilgi edinmek üzere Testler bölümüne bakın.
3. Şablonu izin çözümüyle entegre etme
Aşağıdaki kodda, bu şablonun bir işleyici ekleyerek kullanıcı rızası yönetim çözümünüzün koduyla nasıl entegre edilebileceğine dair bir örnek gösterilmektedir:
// 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);
});
};
İzin durumunu güncelleme
Web sitesi ziyaretçisi genellikle bir izin banner'ı ile etkileşim kurarak izin seçeneklerini gösterdikten sonra şablon kodu, izin durumlarını updateConsentState API'ye uygun şekilde güncellemelidir.
Aşağıdaki örnekte, tüm depolama türlerine izin verdiğini belirten bir ziyaretçi için updateConsentState
çağrısı gösterilmektedir. Bu örnekte de granted
için sabit kodlanmış değerler kullanılmaktadır ancak pratikte bu değerler, CMP tarafından toplanan ziyaretçi izni kullanılarak çalışma zamanında belirlenmelidir.
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'
});
Bölgeye özgü davranış hakkında
Belirli alanlardan gelen ziyaretçiler için geçerli olan varsayılan izin durumlarını ayarlamak amacıyla şablonda bir bölge (ISO 3166-2'ye göre) belirtin. Bölge değerlerini kullanmak, şablon kullanıcılarının bu bölgelerin dışındaki ziyaretçilerden gelen bilgileri kaybetmeden bölgesel düzenlemelere uymasını sağlar. setDefaultConsentState
komutunda bir 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 ziyaretçiler için analytics_storage
varsayılan durumu
denied
, diğer tüm ziyaretçiler içinse analytics_storage
granted
olarak ayarlanır:
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
En belirgin ayar önceliklidir
Aynı sayfada, bir bölge ve alt bölgenin değerlerini içeren iki varsayılan izin komutu varsa daha belirli bir bölgeye sahip olan komut geçerli olur. Örneğin, ad_storage
US
bölgesi için 'granted'
, ad_storage
ise US-CA
bölgesi için 'denied'
olarak ayarlandıysa Kaliforniya'dan bir ziyaretçinin daha ayrıntılı US-CA
ayarı geçerli olur.
Bölge | ad_storage |
Davranış |
---|---|---|
ABD | 'granted' |
ABD'de bulunan ve Kanada'da olmayan kullanıcılar için geçerlidir |
US-CA | 'denied' |
ABD-CA'daki kullanıcılar için geçerlidir |
Belirtilmedi | 'granted' |
'granted' varsayılan değerini kullanır. Bu örnekte, bu durum ABD veya ABD-CA'da bulunmayan kullanıcılar için geçerlidir.
|
Ek meta veriler
Aşağıdaki isteğe bağlı parametreleri ayarlamak için gtagSet API'yi kullanabilirsiniz:
Bu API'ler yalnızca GTM şablonu korumalı alan ortamında kullanılabilir.
URL'lerdeki reklam tıklaması, istemci kimliği ve oturum kimliği bilgilerini iletme
Bir ziyaretçi bir reklamı tıkladıktan sonra reklamverenin web sitesine ulaştığında, reklamla ilgili bilgiler açılış sayfası URL'lerine sorgu parametresi olarak eklenebilir. Dönüşüm doğruluğunu artırmak için Google etiketleri genellikle bu bilgileri reklamverenin alanındaki birinci taraf çerezlerinde depolar.
Ancak ad_storage
denied
ise Google etiketleri bu bilgileri yerel olarak kaydetmez. Bu durumda reklam tıklaması ölçüm kalitesini iyileştirmek için reklamverenler, URL geçişi adlı bir özelliği kullanarak isteğe bağlı olarak sayfalar arasında URL parametreleri aracılığıyla reklam tıklama bilgileri iletebilir.
Benzer şekilde, analytics_storage
reddet olarak ayarlanırsa URL iletme, sayfalar arasında çerez olmadan etkinlik ve oturuma dayalı analizleri (dönüşümler dahil) göndermek için kullanılabilir.
URL aktarımını kullanmak için aşağıdaki koşulların karşılanması gerekir:
- Sayfada izin odaklı Google etiketleri var.
- Site, URL geçişi özelliğini kullanmayı tercih etmiş olmalıdır.
- İzin modu sayfada uygulanır.
- Giden bağlantı, geçerli sayfanın alanıyla aynı alanı ifade eder.
- URL'de gclid/dclid mevcuttur (yalnızca Google Ads ve Floodlight etiketleri)
Şablonunuz, şablon kullanıcısının bu ayarı etkinleştirmek isteyip istemediğini yapılandırmasına izin vermelidir. Aşağıdaki şablon kodu, url_passthrough parametresini true olarak ayarlamak için kullanılır:
gtagSet('url_passthrough', true);
Reklam verilerini çıkartma
ad_storage
reddedildiğinde reklamcılık amacıyla yeni çerez ayarlanmaz. Ayrıca, daha önce google.com ve doubleclick.net'te ayarlanan üçüncü taraf çerezleri de kullanılmaz. Google'a gönderilen verilerde, URL parametrelerindeki reklam tıklama bilgileri dahil olmak üzere tam sayfa URL'si yer almaya devam eder.
ad_storage
reddedildiğinde reklam verilerinizi daha fazla çıkartmak için ads_data_redaction
değerini true olarak ayarlayın.
ads_data_redaction
doğru değerine ayarlandığında ve ad_storage
reddedildiğinde, Google Ads ve Floodlight etiketleri tarafından ağ isteklerinde gönderilen reklam tıklaması tanımlayıcıları çıkartılır.
gtagSet('ads_data_redaction', true);
Geliştirici kimliği
Google tarafından verilen bir geliştirici kimliğine sahip bir CMP tedarikçisiyseniz bu kimliği şablonunuzda mümkün olduğunca erken ayarlamak için aşağıdaki yöntemi kullanın.
Geliştirici kimliğine yalnızca uygulamanız birden fazla web sitesinde alakasız şirketler veya tüzel kişiler tarafından kullanılacaksa ihtiyacınız vardır. Uygulama tek bir site veya varlık tarafından kullanılacaksa geliştirici kimliği için başvuruda bulunmayın.
gtagSet('developer_id.<your_developer_id>', true);
Kullanıcılarınıza doküman sağlama
Kullanıcılarınız, kullanıcı iznini toplayan bir etiket oluşturmak için izin şablonunuzu kullanır. Kullanıcılarınıza aşağıdaki en iyi uygulamaları açıklayan dokümanlar sağlayın:
- Ayarlar tablosunda varsayılan izin ayarlarını belirleme
- Ek tablo satırları ekleyerek farklı bölgeler için izin varsayılanlarını ayarlama.
- Etiketi İzin Başlatma - Tüm Sayfalar tetikleyicisinde tetikleyin.
Sonraki adımlar
Şablonunuzu tüm Etiket Yöneticisi kullanıcılarına sunmak istiyorsanız Topluluk Şablon Galerisi'ne yükleyin.