İzin modu şablonu oluşturma

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.

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.

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.

İ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.

  1. Google Etiket Yöneticisi hesabınıza giriş yapın.
  2. Sol gezinme bölmesinde Şablonlar'ı seçin.
  3. Etiket Şablonları bölmesinde Yeni'yi tıklayın.
  1. Alanlar sekmesini seçin ve 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 bir dokümandır. Farklı bölgeler için izin varsayılanlarını ayarlama hakkında daha fazla bilgi edinin.
  7. Sütun ekle'yi tıklayın, Metin girişi'ni seçin, 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, 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 verileri azaltma desteği eklemek için:

  1. Alan Ekle'yi 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 verileri azaltma ile çerez davranışı hakkında daha fazla bilgi edinin.

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

  1. Alan Ekle'yi 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

Uygulama kodunu eklemek için:

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

  1. İzinler sekmesini seçin ve Erişim izni durumunu kontrol eder'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 simgesini 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. Daha fazla izin türüne ihtiyacınız varsa bunları da aynı şekilde ekleyin.
  7. Kaydet'i tıklayın.

Çerezlere erişme izinleri eklemek için:

  1. İzinler sekmesini seçin ve Çerez değerlerini okuma'yı tıklayın.
  2. 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.
  3. 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.

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

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.