İzin modu şablonu oluşturma

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:

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.

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 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
});

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

  1. Google Etiket Yöneticisi hesabınıza giriş yapın.
  2. Sol gezinme menüsünde Şablonlar'ı seçin.
  3. Etiket Şablonları bölmesinde Yeni'yi tıklayın.

Alan Ekle

  1. Alanlar sekmesini seçin ve Alan Ekle'yi tıklayın.
  2. Param tablosu'nu seçin.
  3. Adı defaultSettings olarak değiştirin.
  4. Alanı genişletin.
  5. Görünen adı Default settings olarak güncelleyin.
  6. 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.
  7. 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.
  8. Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı granted olarak değiştirin.
  9. Sütunu genişletin ve görünen adı Granted Consent Types(comma separated) olarak değiştirin.
  10. Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı denied olarak değiştirin.
  11. Sütunu genişletin ve görünen adı Denied Consent Types (comma separated) olarak değiştirin.
  12. Alan Ekle'yi tıklayın, Onay kutusu'nu seçin ve alan adını ads_data_redaction olarak değiştirin.
  13. 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:

  1. İzinler sekmesini seçin ve İzin durumuna erişir'i tıklayın.
  2. İzin türü ekle'yi tıklayın.
  3. Kutuyu tıklayın ve açılır menüden ad_storage'i seçin.
  4. Yaz'ı işaretleyin.
  5. 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:

  1. İzinler sekmesini seçin ve Çerez değerlerini okur'u tıklayın.
  2. Specific (Kimlik) altında, kullanıcının izin tercihlerini belirlemek için her çerezin adını, kodunuzun okuması gereken her bir ada girin.
  3. Kaydet'i tıklayın.

Testler

Şablonunuz için test oluşturma hakkında bilgi edinmek üzere Testler bölümüne bakın.

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.