Criar um modelo do modo de consentimento

Este artigo é destinado a desenvolvedores que mantêm uma solução de gestão de consentimento em sites que usam o Gerenciador de tags do Google (GTM).

Esta página apresenta os tipos de consentimento no Gerenciador de tags do Google e mostra como integrá-los à sua solução de gestão de consentimento.

Quando você fornece um modelo de tag, os usuários podem integrar sua solução de consentimento sem código, economizando bastante tempo e esforço.

Os usuários podem definir estados de consentimento padrão usando um modelo de modo de consentimento e comunicar as opções do visitante ao Gerenciador de tags do Google. Isso garante o funcionamento ideal das tags de terceiros e do Google com o modo de consentimento.

Como criador de modelos, você pode implementar modelos do modo de consentimento para uso interno ou publicá-los na Galeria de modelos da comunidade para que eles fiquem disponíveis a todos os usuários. Os provedores da plataforma de gestão de consentimento (CMP) que oferecem modelos desse modo podem aparecer na nossa documentação e mostrar modelos na Galeria.

As tags independentes e do Google ajustam o comportamento de armazenamento com base em um estado de consentimento granted ou denied. Elas podem ter verificações integradas em qualquer um destes tipos de consentimento:

Tipo de consentimento Descrição
ad_storage Permite o armazenamento (como cookies) relacionado a publicidade.
ad_user_data Define o consentimento para enviar dados do usuário ao Google com a finalidade de veicular publicidade on-line.
ad_personalization Define o consentimento para veicular publicidade personalizada.
analytics_storage Permite o armazenamento (como cookies) relacionado a análises (por exemplo, duração da visita).
functionality_storage Permite o armazenamento compatível com as funções do site ou app, por exemplo, as configurações de idioma.
personalization_storage Permite o armazenamento relacionado à personalização, como recomendações de vídeos.
security_storage Permite o armazenamento relacionado a segurança, por exemplo, recurso de autenticação, prevenção de fraudes e outras proteções de usuário.

Esse modo rastreia as opções dos visitantes, e as verificações de consentimento da tag garantem que o comportamento dela seja ajustado corretamente. Ao criar um novo modelo de consentimento, siga as práticas recomendadas:

  • Use as APIs do modo de consentimento do Gerenciador de tags setDefaultConsentState e updateConsentState em vez de gtag consent.

  • Defina estados de consentimento padrão imediatamente após disparar usando o acionador de Inicialização de consentimento: todas as páginas.

  • A CMP precisa pedir ao visitante o mais rápido possível para dar ou negar a autorização em todos os tipos de consentimento relevantes.

  • Quando um visitante indica sua escolha de consentimento, a CMP precisa transmitir o estado de consentimento atualizado.

1. Criar um novo modelo

Esta abordagem de implementação usa um campo no modelo para manter o estado de consentimento padrão. O código de implementação vai ler esse campo para definir o estado de consentimento padrão no ambiente de execução. No comando de atualização, seu código vai tentar ler um cookie definido pela solução de consentimento para armazenar as escolhas dos visitantes. Você também vai configurar um callback para updateConsentState tratar o caso quando um visitante ainda não tiver definido o consentimento ou decidir mudar a permissão.

  1. Faça login na sua conta do Gerenciador de tags do Google.
  2. Na navegação à esquerda, selecione Modelos.
  3. No painel Modelos de tag, clique em Novo.
  1. Selecione a guia Campos, clique em Adicionar campo > Tabela de parâmetros.
  2. Mude o nome para defaultSettings.
  3. Abra o campo.
  4. Atualize o nome de exibição para Default settings.
  5. Clique em Adicionar coluna, escolha Entrada de texto, mude o nome para region e marque a caixa Os valores das colunas precisam ser únicos.
  6. Abra a coluna e mude o nome de exibição para Region (leave blank to have consent apply to all regions). A instrução entre parênteses é a documentação para os usuários do seu modelo. Saiba mais sobre como configurar os padrões de consentimento para diferentes regiões.
  7. Clique em Adicionar coluna e escolha Entrada de texto. Mude o nome para granted.
  8. Abra a coluna e mude o nome de exibição para Granted Consent Types (comma separated).
  9. Clique em Adicionar coluna e escolha Entrada de texto. Mude o nome para denied.
  10. Abra a coluna e mude o nome de exibição para Denied Consent Types (comma separated).

Opcional – Para permitir o descarte de dados sensíveis de anúncios:

  1. Clique em Adicionar campo, escolha Caixa de seleção e mude o nome do campo para ads_data_redaction.
  2. Atualize o nome de exibição para Redact Ads Data.

Saiba mais sobre o comportamento dos cookies com o descarte de dados sensíveis de anúncios

Opcional – Para permitir a transmissão pelos parâmetros de URL:

  1. Clique em Adicionar campo, escolha Caixa de seleção e mude o nome do campo para url_passthrough.
  2. Atualize o nome de exibição para Pass through URL parameters.

Saiba mais sobre como transmitir por meio de parâmetros de URL.

Para adicionar o código de implementação:

  1. Abra a guia Código no editor de modelo.
  2. No exemplo de código abaixo, edite os campos de marcador de posição.
  3. Copie o código e substitua o código boilerplate no editor de modelo por ele.
  4. Salve o modelo.
// 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();

Depois, configure as permissões para acessar o estado de consentimento e os cookies.

  1. Selecione a guia Permissões e clique em Estado do consentimento de acessos.
  2. Escolha Adicionar tipo de consentimento.
  3. Clique na caixa e selecione ad_storage no menu suspenso.
  4. Marque a opção Gravação.
  5. Clique em Adicionar
  6. Repita as etapas 2 a 5, para ad_user_data, ad_personalization e analytics_storage. Se você precisar de outros tipos de consentimento, adicione-os da mesma maneira.
  7. Clique em Salvar.

Para adicionar permissões para acessar cookies:

  1. Selecione a guia Permissões e clique em Lê valores de cookies.
  2. Em Específico, insira o nome de cada um dos cookies que seu código precisa ler para determinar as opções de consentimento do usuário (um nome por linha).
  3. Clique em Salvar.

2. Criar testes de unidade

Consulte Testes para conferir detalhes sobre como criar testes para o modelo.

O código a seguir mostra um exemplo de como esse modelo pode ser integrado ao código da sua solução de gestão de consentimento com a adição de um listener:

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

Depois que um visitante do site indica as escolhas de consentimento, geralmente em uma interação com um banner, o código do modelo precisa atualizar os estados de acordo com a API updateConsentState.

O exemplo a seguir mostra a chamada updateConsentState para um visitante que indicou que concorda com todos os tipos de armazenamento. Novamente, esse exemplo usa valores codificados para granted, mas, na prática, eles precisam ser determinados no ambiente da execução usando o consentimento do visitante que é coletado pela CMP.

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

Sobre o comportamento específico da região

Para definir estados de consentimento padrão usados com visitantes de áreas específicas, defina uma região (de acordo com a ISO 3166-2) no modelo. Com o uso de valores de região, os usuários do modelo podem cumprir os regulamentos regionais sem perder informações de visitantes fora dessas áreas. Quando uma região não é especificada em um comando setDefaultConsentState, o valor é usado em todas as outras áreas.

Por exemplo, o código a seguir define o status padrão de analytics_storage como denied para visitantes da Espanha e do Alasca e define analytics_storage como granted para todas as outras pessoas:

const setDefaultConsentState = require('setDefaultConsentState');

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

A versão mais específica tem prioridade

Se dois comandos de consentimento padrão forem incluídos na mesma página com valores distintos para região e sub-região, o comando que tiver a região mais específica vai ter prioridade. Por exemplo, se ad_storage tiver sido definido como 'granted' para a região US e ad_storage estiver definido como 'denied' para a região US-CA, a configuração mais específica US-CA vai prevalecer.

Região ad_storage Comportamento
Estados Unidos 'granted' Aplica-se a usuários nos EUA que não estão na Califórnia.
US-CA 'denied' Utilizado com usuários da região US-CA.
Não especificado 'granted' Usa o valor padrão de 'granted'. Neste exemplo, serve para usuários que não estão nos EUA nem na região US-CA.

Metadados adicionais

Use a API gtagSet para definir os seguintes parâmetros opcionais:

Essas APIs estão disponíveis apenas no ambiente de sandbox do modelo do GTM.

Transmitir informações sobre clique no anúncio, IDs de clientes e IDs de sessões em URLs

Quando um visitante acessa o site de um anunciante após clicar em um anúncio, as informações sobre esse anúncio podem ser incluídas nos URLs da página de destino como um parâmetro de consulta. Para melhorar a precisão das conversões, as tags do Google geralmente armazenam essas informações em cookies primários no domínio do anunciante.

No entanto, quando ad_storage está definido como denied, as tags do Google não salvam as informações localmente. Nesse caso, para melhorar a qualidade da medição de cliques, os anunciantes podem transmitir informações de cliques no anúncio usando parâmetros de URL nas páginas com a transferência de URL.

Da mesma forma, se analytics_storage for definido como "denied", a transferência poderá ser usada para enviar análises baseadas em eventos e sessões (incluindo conversões) sem cookies em todas as páginas.

Para usar a transferência de URL, as seguintes condições precisam ser atendidas:

  • As tags do Google com necessidade de consentimento estão presentes na página.
  • O anunciante aceitou usar a transferência de URL.
  • O modo de consentimento está implementado na página.
  • O link de saída se refere ao mesmo domínio da página atual.
  • Há um gclid/dclid presente no URL (somente tags do Google Ads e do Floodlight).

Seu modelo precisa permitir que o usuário do modelo defina se quer ou não ativar essa configuração. O código do modelo a seguir é usado para definir "url_passthrough" como "true":

gtagSet('url_passthrough', true);

Encobrir dados de anúncios

Quando ad_storage é negado, nenhum novo cookie é definido para fins de publicidade. Além disso, cookies de terceiros definidos anteriormente em google.com e doubleclick.net não serão usados. Os dados enviados ao Google ainda vão conter o URL completo da página, incluindo as informações de cliques no anúncio nos parâmetros de URL.

Para encobrir mais seus dados de anúncios quando ad_storage for "denied", defina ads_data_redaction como "true".

Quando ads_data_redaction for "true" e ad_storage for "denied", os identificadores de cliques no anúncio enviados nas solicitações de rede pelas tags do Google Ads e do Floodlight serão editados.

gtagSet('ads_data_redaction', true);

ID do desenvolvedor

Se você for um fornecedor de CMP com um ID do desenvolvedor emitido pelo Google, use o método a seguir para definir o ID o quanto antes no seu modelo.

Você só precisará de um ID de desenvolvedor quando sua implementação for usada em vários sites por empresas ou entidades não relacionadas. Se a implementação for usada por um site ou entidade, não solicite um ID do desenvolvedor.

gtagSet('developer_id.<your_developer_id>', true);

Forneça documentação aos usuários

Seus usuários usarão seu modelo de consentimento para configurar uma tag que coleta o consentimento do usuário. Forneça aos seus usuários documentação que explique as seguintes práticas recomendadas:

  • Como definir os padrões de consentimento na tabela Configurações.
  • Como configurar padrões de consentimento para diferentes regiões adicionando linhas à tabela.
  • Disparar a tag no acionador Inicialização de consentimento: todas as páginas.

Próximas etapas

Se você quiser fornecer seu modelo para todos os usuários do Gerenciador de tags, faça o upload na Galeria de modelos da comunidade.