İzin modu şablonu oluşturma

Bu makale, Google Etiket Yöneticisi'ni (GTM) kullanan web sitelerinde bir kullanıcı rızası yönetim çözümü sürdüren geliştiricilere yöneliktir.

Bu sayfada, Google Etiket Yöneticisi'ndeki izin türleri tanıtılmakta ve bunları kullanıcı rızası yönetim çözümünüzle nasıl entegre edeceğiniz gösterilmektedir.

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 emekten tasarruf edebilir.

Kullanıcılar, bir izin modu şablonu kullanarak varsayılan izin durumlarını ayarlayabilir ve ziyaretçilerin izin tercihlerini Google Etiket Yöneticisi'ne iletebilir. 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ı, izin modu belgelerimizde listelenme ve Şablon Galerisi seçiciye şablonlarını sunma fırsatına sahiptir.

Google ve üçüncü taraf etiketleri, depolama davranışı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 çerezler gibi bilgilerin depolanmasını etkinleştirir.
ad_user_data Kullanıcı verilerinin dijital reklamcılık amacıyla Google'a gönderilmesi için izin belirler.
ad_personalization Kişiselleştirilmiş reklamcılığa yönelik izinleri belirler.
analytics_storage Analizle ilgili çerezler gibi bilgilerin (ör. ziyaret süresi) depolanmasını etkinleştirir.
functionality_storage Web sitesinin veya uygulamanın, dil ayarları gibi işlevlerini destekleyen depolamayı 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

İzin modu, ziyaretçilerin izin tercihlerini izler ve etiket izin kontrolleri, etiket davranışının uygun şekilde ayarlanmasını sağlar. Yeni bir izin şablonu oluştururken en iyi uygulamaları izleyin:

  • gtag consent yerine Etiket Yöneticisi izin modu API'lerinin setDefaultConsentState ve updateConsentState API'sini kullanın.

  • İzin Başlatma - Tüm Sayfalar tetikleyicisini kullanarak, etkinleşmenin hemen ardından varsayılan izin durumlarını ayarlayın.

  • CMP, ziyaretçiden en kısa sürede geçerli tüm izin türleri için izin vermesi veya reddetmesi için istekte bulunmalıdır.

  • Bir ziyaretçi izin seçimini belirttiğinde CMP'nin güncellenmiş izin durumunu iletmesi gerekir.

1. Yeni şablon oluştur

Bu uygulama yaklaşımı, varsayılan izin durumunu korumak için şablondaki bir alanı kullanır. Uygulama kodu, çalışma zamanında varsayılan izin durumunu ayarlamak için bu alanı okur. Güncelleme komutu için kodunuz, izin çözümü tarafından ziyaretçi izin seçeneklerini saklamak amacıyla oluşturulan çerezi okumaya çalışır. Ayrıca, bir ziyaretçinin henüz izin seçimlerini yapmadığı veya iznini değiştirmeye karar verdiği durumu ele almak için updateConsentState için bir geri çağırma da ayarlarsınız.

  1. Google Etiket Yöneticisi hesabınıza giriş yapın.
  2. Soldaki gezinme panelinde Şablonlar'ı seçin.
  3. Etiket Şablonları bölmesinde Yeni'yi tıklayın.
  1. Alanlar sekmesini seçin, Alan Ekle > Parametre tablosu'nu tıklayın.
  2. Adı defaultSettings olarak değiştirin.
  3. Alanı genişletin.
  4. Görünen adDefault settings olarak güncelleyin.
  5. 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.
  6. 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 belgelerdir. Farklı bölgeler için varsayılan izin ayarlarını belirleme hakkında daha fazla bilgi edinin.
  7. Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı granted olarak değiştirin.
  8. Sütunu genişletin ve görünen adı Granted Consent Types (comma separated) olarak değiştirin.
  9. Sütun ekle'yi tıklayın, Metin girişi'ni seçin ve adı denied olarak değiştirin.
  10. Sütunu genişletin ve görünen adı Denied Consent Types (comma separated) olarak değiştirin

İsteğe bağlı: Reklam verilerinin azaltılmasına yönelik destek eklemek için:

  1. Add Field (Alan Ekle) seçeneğini tıklayın, Onay kutusu'nu seçin ve alan adını ads_data_redaction olarak değiştirin.
  2. Görünen adı Redact Ads Data olarak güncelleyin

Reklam verilerinin azaltılması ile çerez davranışı hakkında daha fazla bilgi edinin.

İsteğe bağlı: URL parametrelerinin iletilmesine yönelik destek eklemek için:

  1. Add Field (Alan Ekle) seçeneğini tıklayın, Onay kutusu'nu seçin ve alan adını url_passthrough olarak değiştirin.
  2. Görünen adı Pass through URL parameters olarak güncelleyin

URL parametrelerini iletme hakkında daha fazla bilgi edinin.

Uygulama kodunu eklemek için:

  1. Şablon düzenleyicide Kod sekmesini açın.
  2. Aşağıdaki kod örneğinde yer tutucu alanlarını düzenleyin.
  3. Kodu kopyalayın ve şablon düzenleyicideki ortak metin kodunu bu kodla değiştirin.
  4. Ş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 erişim ve çerezlere erişim izinlerini yapılandırın.

  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 öğesini seçin.
  4. Yaz'ı işaretleyin.
  5. Ekle'yi tıklayın.
  6. ad_user_data, ad_personalization ve analytics_storage için 2-5. adımları tekrarlayın. Ek izin türlerine ihtiyacınız varsa bunları da aynı şekilde ekleyin.
  7. Kaydet'i tıklayın.

Çerezlere erişim izinleri eklemek için:

  1. İzinler sekmesini seçin ve Çerez değerlerini okur'u tıklayın.
  2. Belirli bölümünde, kullanıcının izin seçeneklerini belirlemek için kodunuzun okuması gereken her bir çerezin adını her satırda bir ad olacak şekilde girin.
  3. Kaydet'i tıklayın.

2. Birim testleri oluşturma

Şablonunuza yönelik testler oluşturma hakkında bilgi için Testler konusuna bakın.

Aşağıdaki kod, bu şablonun bir işleyici eklenerek kullanıcı rızası yönetim çözümünüzün koduyla nasıl entegre edilebileceğ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);
  });
};

Bir web sitesi ziyaretçisi genellikle bir izin banner'ıyla etkileşimde bulunarak izin tercihlerini belirttikten sonra şablon kodu, updateConsentState API'sini kullanarak izin durumlarını uygun şekilde güncellemelidir.

Aşağıdaki örnekte bir ziyaretçi için tüm depolama alanı türlerine izin verdiğini belirten updateConsentState çağrısı gösterilmektedir. Bu örnekte de granted için koda gömülmüş 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 bölgelerdeki 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ğerlerinin kullanılması, şablon kullanıcılarının bu bölgelerin dışındaki ziyaretçilerden gelen bilgilerini kaybetmeden bölgesel düzenlemelere uymaları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 analytics_storage İspanya ve Alaska'dan gelen ziyaretçiler için varsayılan durumu denied, diğer tüm ziyaretçiler için ise analytics_storage değerini granted olarak ayarlar:

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'analytics_storage': 'denied',
  'region': ['ES', 'US-AK']
});
setDefaultConsentState({
  'analytics_storage': 'granted'
});

En belirgin olanlar önceliklidir

Bir bölge ve alt bölge değerleriyle aynı sayfada iki varsayılan izin komutu verilirse daha spesifik bölgeye sahip olan komut geçerli olur. Örneğin, US bölgesi için ad_storage değerini 'granted', US-CA bölgesi için ad_storage politikasını 'denied' olarak ayarlarsanız Kaliforniya'dan gelen bir ziyaretçi için daha spesifik olan US-CA ayarı geçerli olur.

Bölge ad_storage Davranış
ABD 'granted' ABD'de olup Kanada'da bulunmayan kullanıcılar için geçerlidir
ABD-Kanada 'denied' US-CA kullanıcıları için geçerlidir
Belirtilmedi 'granted' 'granted' varsayılan değerini kullanır. Bu örnekte bu, ABD veya ABD-Kanada'da olmayan 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'lerde 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 bir sorgu parametresi olarak eklenebilir. Google etiketleri, dönüşüm doğruluğunu artırmak için genellikle bu bilgileri reklamverenin alanındaki birinci taraf çerezlerinde depolar.

Ancak ad_storage değeri denied ise Google etiketleri bu bilgileri yerel olarak kaydetmez. Bu durumda reklam tıklaması ölçüm kalitesini artırmak isteyen reklamverenler, isteğe bağlı olarak URL geçişi adı verilen bir özelliği kullanarak reklam tıklama bilgilerini sayfalar arasında URL parametreleri aracılığıyla iletebilir.

Benzer şekilde, analytics_storage reddedildi olarak ayarlanırsa URL geçişi, sayfalar arasında çerezler olmadan etkinlik ve oturum tabanlı analizleri (dönüşümler dahil) göndermek için kullanılabilir.

URL geçişini kullanmak için aşağıdaki koşullar karşılanmalıdır:

  • İzne duyarlı Google etiketleri sayfada bulunuyor.
  • Site, URL geçiş özelliğinin kullanılmasını etkinleştirmiştir.
  • İzin modu sayfada uygulanmış olmalıdır.
  • Giden bağlantı, geçerli sayfanın alanıyla aynı alanı belirtir.
  • 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 istemediğini yapılandırmasına izin vermelidir. url_passthrough'yu true olarak ayarlamak için aşağıdaki şablon kodu kullanılır:

gtagSet('url_passthrough', true);

Reklam verilerini çıkartma

ad_storage reddedildiğinde reklam amaçlı yeni çerezler ayarlanmaz. Ayrıca, önceden google.com ve doubleclick.net'te ayarlanan üçüncü taraf çerezleri kullanılmaz. Google'a gönderilen veriler, URL parametrelerindeki tüm reklam tıklama bilgileri dahil olmak üzere tam sayfa URL'sini içerir.

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 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ı çıkartılır.

gtagSet('ads_data_redaction', true);

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.

Yalnızca uygulamanızın alakasız şirketler veya tüzel kişiler tarafından birden fazla web sitesinde kullanılacağı durumlarda geliştirici kimliğine ihtiyacınız vardır. Uygulama bir site veya tüzel kişi 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ümanlar sağlayın

Kullanıcılarınız, kullanıcı izni 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 izin varsayılanlarını ayarlama
  • Ek tablo satırları ekleyerek farklı bölgeler için varsayılan izin ayarlarını belirleme
  • İzin Başlatma - Tüm Sayfalar tetikleyicisinde etiketi tetikleyin.

Sonraki adımlar

Şablonunuzu tüm Etiket Yöneticisi kullanıcılarına sunmak istiyorsanız Topluluk Şablon Galerisi'ne yükleyin.