# Google Consent Mode in Commanders Act CMP

Introduction

Google Consent Mode will evolve in March 2024!

As Google strongly recommends the use of Consent Mode on their tags, Commanders Act has developed a new built-in feature for clients who wish to implement it.

Just use our new native feature for a super smooth implementation!\
\
Please read the following documentation to learn more about this new feature, and how to use it.\
\
If you have already implemented Consent Mode v1 using our tag template and would like to keep it, you can update it on v2. Please see the following section for instructions: [Migration Guide Consent Mode v1 tag template to v2](#migration-guide)

{% hint style="info" %}
Please note: Google only requires a validated consent signal only for EEA countries and UK.

Implementing Google Consent Mode in regions beyond may negatively impact campaign performance and is not recommended.
{% endhint %}

## Difference between Basic & Advanced mode

Google Consent Mode provides 2 approaches: Basic & Advanced\
In both cases, you will have to activate the feature Google Consent Mode on your account.\
The only difference will be the following:\
\
**Basic Mode:** Google tags aren't triggered before consent & remains submitted to Commanders Act Consent Rules, there will be no tags firing in case of Optout\
**Advanced Mode:** Google tags are triggered before consent & the collected data will depend on the Consent Mode Signal. Tags remains fired even when user has Optout.

## How to use the Google Consent Mode feature ?

Just follow these 6 steps:

### 1- Activate the feature on your workspace

Login on[ your workspace](https://app.commandersact.com/)\
Go on page `Data Governance > Consent Management > Settings`\
Turn **On** the option Google Consent Mode. The sub-menu "Google Consent Mode settings" will appears

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-fe08020ed56fc57dc7fd6c63d463e2e130df5c85%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### 2-Configure your settings

#### Categories

Select your appropriate Privacy category from the drop-down list for each Google's category.

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-756e28fbc975c54ceaab3116ada7b1738c62c350%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Default Status

The Default Status will determine the behaviour of your tags BEFORE consent.\
If set on "denied": Google will collect minimum information (as if the user has Optout)\
If set on "granted": Google will collect all information (as if the user has Optin)\
\*You should ask to your DPO before to set a "granted" default status for any of theses categories

In all cases: once the user has given his consent (optin or optout), the default status will no longer apply. The user's choice will determine the status after consent.

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-2ad031df2422504080886f115888f7a960161394%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If you do not set a category, the status will always be "denied".\
The "Default Status" dropdown menu will no longer be displayed.\
Example below for "security\_storage" with no privacy category assigned:
{% endhint %}

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-8277a3d9c7827f104274a5fce1bb9ff0809356ba%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Additional Settings

* **enable\_tcf\_support**\
  If you use TCF 2.2 CMP template: TCData update (`TCData.enableAdvertiserConsentMode`) allows Google to infer ad\_storage, ad\_personalization, and ad\_user\_data settings from the TC string. This will incorporate consent mode v2 updates directly into the TC string.\
  \
  Enable the feature [tcf\_support](https://support.google.com/admanager/answer/9681920?hl=en) to let your IAB TCF privacy banner manage the advertising categories.\
  \
  \*Google recommends to activate this feature if your website use an IAB TCF banner template\
  Don't forget to add your Google associated Vendors (see [dedicated documentation](https://doc.commandersact.com/features/consent-management/knowledge-base/iab-tcf-v2.2-and-google-faq) for more details)

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-0dd477ef5e8dbd390b6400d742244a6e0c7d65b6%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

* **wait\_for\_update**\
  Enabling this optional feature will send a signal to Google's tags to [wait for an update](https://developers.google.com/tag-platform/security/guides/consent?hl=en#tracking_consent_state).\
  Enter a value in milliseconds to control the waiting time before the data is sent.\
  This can be useful if you are experiencing timing issues. Otherwise, you can leave it blank!\\

  <div align="center"><figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-7729c5c87416978d5ce1d6fb251f902137c5fe43%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure></div>
* **ads\_data\_redaction**\
  set [ads\_data\_redaction](https://developers.google.com/tag-platform/security/guides/consent?hl=en#redact_ads_data) to ON to further redact your advertising data when "ad\_storage" is "denied"

  <figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-16dc9a7a6e6afb4fd72a96c3b1feafa171d60262%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
* **url\_passthrough**\
  [URL passthrough](https://developers.google.com/tag-platform/security/guides/consent?hl=en#passthroughs) option can be used to send event and session-based analytics (including conversions) without cookies across pages.\
  \\

  <figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-b8c1c8401bc44e8657b66fcdcf339e4b940b8b34%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### 3-Activate the feature on your privacy banner(s)

`Sources > Privacy Banners > Select your banner(s)`\
Go at the edition step of your privacy banner, open the settings menu to turn ON Google Consent Mode Signal\\

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-9a361a9955f669bcc59c4ef4efe56727d30debd4%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

The privacy setup is done! You can now Generate and Deploy your Privacy Banner.\
\&#xNAN;*\*At this point, Consent Mode will not affect the behaviour of your tags. Please follow the next steps!*

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-678586fa5d389c35bcee8425eca4355e9b7bef57%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The activation of this option will automatically add an Google Policy URL, it's a legal requirement for using Google Consent Mode on your website. Feel free to adapt your introduction text if needed
{% endhint %}

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-5dffd9449f8d4212bd58247608d5ba1396627c91%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### 4- Advanced Mode: Remove your privacy constraints from Google tags

To setup the version "Advanced" of the Consent Mode, remove Commanders Act Privacy rules from all the Google tags, now it's managed by Google Consent Mode\
`Data Governance > Consent Management > Categories` see tab `assign tags`\
\- **Remove the privacy constraints from Google tags**\
\&#xNAN;**- Save**

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-2e3d6f8242e7dd5427f4ffca7d34fa45da7bb6f4%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
For Basic Consent Mode, skip the step 4!\
Keep your Privacy rules applied on your tags
{% endhint %}

### 5-Generate your container(s)

Go on `Sources > WebContainers > generation step`\
\
For a single container setup, generate your container with privacy banner(s) included

**For a multiple container setup, generate all your containers. The privacy banner(s) must be linked to the first loaded container** to ensure that the Consent Mode signal is always sent correctly.

{% hint style="warning" %}
*If you was using the Consent Mode v1 tag, don't forget to delete or deactivate it! It's useless now.*
{% endhint %}

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-adcac3fb7ed72188e1f0aa1df2d76f224054c339%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**What about the triggers ?**

The consent mode is compatible with the **container loaded** trigger. If your Google tags are already set to this, it will work without any trigger modification

But we also provide a custom trigger, if needed!\
When a Consent Mode signal is sent, our product pushes **tC.event.consent\_signal\_ready**\
You can use it to trigger your tags.

If your site is an SPA, you can keep your **tC.event.page/pageview**... as trigger for your Google tags. The same goes for your click/scroll tags.
{% endhint %}

### 6-Tests & deployment

#### Deployment

We recommend to test you setup on a UAT environment if possible.

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-0fca1e70849c79703ba4b1292cb5cc37a173ac2b%2Fimage.png?alt=media" alt="" width="377"><figcaption></figcaption></figure>

#### Test your configuration

There's 3 different ways to verify your Consent Mode setup:

{% tabs %}
{% tab title="Test with plugin Google Tag Assistant" %}
The easiest way to verify your setup is using the [Tag Assistant](https://tagassistant.google.com/) plugin provided by Google.\
\
**The "Consent" event should always be sent before any hits from the tags**\
The status "**On-page Default**" should be the same then the ones you setup at the [step 2](#categories)

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-bc2945688a936d4d5f2a225ef5c3126339d3f0dc%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

**After Consent**, the "**On-page Update**" status should correspond to the consent given on the privacy banner

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-2ac359df13f0d1e01c9546bbda3e90c4059715fe%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Test with the browser" %}
Feel as a developer? You can also look into the console to verify the Google arguments pushed in dataLayer Google.\
Type `dataLayer` then press `Enter`

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-fd4892138c4381284a6894415c8e9d1e83bd84a4%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Test with a payload verification" %}
One last method to verify your setup is possible: check into the payload of your hits in the network.\
The consent status is fed by the "gcd" parameter

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-f4db9de43750ab40a4ecd72a4f853702f7725b66%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

**Possibles values for gcd parameter**

`gcd` is included in all hits to Google services, even if Consent Mode isn’t active.

It encodes values for four consent signals (`ad_storage`, `analytics_storage`, `ad_user_data`, and `ad_personalization`), and it includes information how the consent signal was generated.

The format of the string is this:

`&gcd=11<ad_storage>1<analytics_storage>1<ad_user_data>1<ad_personalization>5`

The string starts with `11`, uses `1` to separate the different consent signals, and ends with a number like `5` (or sometimes something else) to mark the end.

<table><thead><tr><th width="97">Letter</th><th>Description</th><th width="142">Example value</th><th>Meaning</th></tr></thead><tbody><tr><td><code>l</code></td><td>The lowercase L means that the signal has not been set with Consent Mode</td><td><code>11l1p1l1l5</code></td><td>only analytics_storage has been denied by default</td></tr><tr><td><code>p</code></td><td>denied by default<br>(no update)</td><td><code>11p1p1p1p5</code></td><td>all consent states are denied by default</td></tr><tr><td><code>q</code></td><td>denied both by default and after update</td><td><code>11p1q1p1p5</code></td><td>the user updated their consent choice to set analytics_storage to denied after it was already set to denied by default</td></tr><tr><td><code>t</code></td><td>granted by default<br>(no update)</td><td><code>11t1t1t1t5</code></td><td>all consent states are granted by default</td></tr><tr><td><code>r</code></td><td>denied by default and granted after update.</td><td><code>11r1r1r1r5</code></td><td>the user grants consent to all services after they were first denied by default</td></tr><tr><td><code>m</code></td><td>denied after update<br>(no default)</td><td><code>11p1m1p1p5</code></td><td>all other states were denied by default, but analytics_storage was only set after the user denied it</td></tr><tr><td><code>n</code></td><td>granted after update<br>(no default)</td><td><code>11n1n1n1n5</code></td><td>the site did not set a default consent state and instead set all states to granted after the user chose so</td></tr><tr><td><code>u</code></td><td>granted by default and denied after update.</td><td><code>11u1u1u1u5</code></td><td>the user withdrew all consents after they were set to granted by default</td></tr><tr><td><code>v</code></td><td>granted both by default and after update.</td><td><code>11v1v1v1v5</code></td><td>all states were granted by default and by user confirmation</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

#### Verify the Consent Mode sequencing with our tC. method

To help you ensure that the consent signal is sent before your Google tags, we offer a method to get logs in the browser console

`tC.privacy.explainGCMSequencingValidation()`\
\
If the Consent is set before any Google tags triggered, you will obtain the log\
`'valid sequencing'`\
\
If Google tags are triggered before the Consent is set, then your implementation is incorrect. The log will returns the value\
`'Consent is set too late, Google tags are triggered before consent set. Please verify your Consent Mode sequencing'`

Need a boolean value for specific use cases ?\
Use `tC.privacy.validateGCMSequencing()`\
Will simply return `true` if your sequencing is correct, otherwise the result will be `false`

{% hint style="success" %}
If Google tags haven't been fired yet, the result will always be "false".\
To get a "valid sequencing" result, Google tags must have been fired at least once.
{% endhint %}

### FAQ

#### Modification/Update Configuration

In case of setup modification, such as activation/deactivation of a parameter, mapping changes on categories, etc.... Web Containers & Privacy banners must be regenerated & deployed.

#### Parameter "Region"

Google Consent Mode allows the consent management only for the declared Region(s)\
Our native feature does not include this parameter, for web performance reasons.\
If you need to use this parameter, we recommend using our TMS Tag template. Please refer to the next section of documentation for configuration details.

#### **Support & assistance**

Still facing trouble shooting on your implementation, and looking for help ?\
Contact our technical support team ! As a Google CMP partner with a Gold status, we provide a dedicated email support : <cact_support_cmp_google@commandersact.com>\
They will ever gave you a personalized reply to your questions!

## Migration guide

**For customers who has already implemented the Consent Mode v1**:\
You can activate the built in feature as described above (don't forget to deactivate your actual consent mode tag)\
However, if you really want to keep your actual setup and simply update your tag, then you can refer to this documentation!

Summarizing all recommended steps:

1. Access your [Commanders Act account](https://app.commandersact.com/).
2. Update your tag template.
3. Test and deploy your container(s).

### Update your tag template

Go on page `"Sources" > "Web containers"`\
Select you "Google Consent Mode with Trust" tag.

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-b8121cc6f0377eb2d93a0cd9feee08e08720775f%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

**Update the js code block** of your tag with the following code, then **save** to obtain the new fields

<details>

<summary>code snippet to update</summary>

```
<script language="javascript">
window.dataLayer = window.dataLayer || [];
var gtag = function (){
	dataLayer.push(arguments);
};
tC.internalvars.getRegion = function(a){
	a = a.toString().replace(/\s/g, '');
	a = a.split(",");
	return a;
};
tC.internalvars.setRegion = function(a) {
	tC.internalvars.regionArray = tC.internalvars.getRegion(a);
	if (((typeof tC.privacy.isEnable !== "undefined") && tC.privacy.isEnable()) && (tC.internalvars.regionArray.length > 0) && (tC.internalvars.regionArray[0] !== "") && (typeof tC.internalvars.consentSettings !== "undefined")) {
		tC.internalvars.consentSettings.region = tC.internalvars.regionArray;
		return true;
	} else return false;
};
tC.internalvars.setWait = function(a){
	if (((typeof tC.privacy.isEnable !== "undefined") && tC.privacy.isEnable()) && (isNaN(parseInt(a, 10)) === false) && (parseInt(a, 10) > 0) && (typeof tC.internalvars.consentSettings !== "undefined")) {
    	tC.internalvars.consentSettings.wait_for_update = parseInt(a, 10);
      	return true;
    } else return false;
};
tC.internalvars.setConsentCommand = function(a, b, c){
	tC.internalvars.isRegionSet = tC.internalvars.setRegion(b);
	tC.internalvars.isDelaySet = tC.internalvars.setWait(c);
  	if (((typeof tC.privacy.isEnable !== "undefined") && tC.privacy.isEnable()) && (tC.internalvars.isRegionSet || tC.internalvars.isDelaySet)){
    	return "default";
    }
  	if ((a.toString() === "default") || (a.toString() === "update")){
		return a;
	}
	if ((typeof tC.privacy.isEnable !== "undefined") && tC.privacy.isEnable()) return "default";
	else return "update";
	return "default";
};
gtag('set', 'developer_id.dOWVhY2', true);
tC.internalvars.consentSettings = {
	'ad_storage': (#DEFAULT_AD_CATEGORY# !== "")?#DEFAULT_AD_CATEGORY#:"denied",
	'analytics_storage': (#DEFAULT_ANALYTICS_CATEGORY# !== "")?#DEFAULT_ANALYTICS_CATEGORY#:"denied",
	'functionality_storage': (#DEFAULT_FUCTIONALITY_CATEGORY# !== "")?#DEFAULT_FUCTIONALITY_CATEGORY#:"denied",
	'personalization_storage': (#DEFAULT_PERSONALIZATION_CATEGORY# !== "")?#DEFAULT_PERSONALIZATION_CATEGORY#:"denied",
	'security_storage': (#DEFAULT_SECURITY_CATEGORY# !== "")?#DEFAULT_SECURITY_CATEGORY#:"denied",
  'ad_personalization':(#DEFAULT_AD_PERSONALIZATION_CATEGORY# !== "")?#DEFAULT_AD_PERSONALIZATION_CATEGORY#:"denied",
  'ad_user_data':(#DEFAULT_AD_USER_DATA_CATEGORY# !== "")?#DEFAULT_AD_USER_DATA_CATEGORY#:"denied" 
}
console.log(tC.internalvars.consentSettings);
console.log("REGION: " + #REGION#);
console.log("WAIT_FOR_UPDATE: " + #WAIT_FOR_UPDATE#);
// Default command on page load
console.log("INFO: default command");
gtag('consent', tC.internalvars.setConsentCommand("default", #REGION#, #WAIT_FOR_UPDATE#), tC.internalvars.consentSettings);
tC.internalvars.ga_url_passthrough = #URL_PASSTHROUGH#;
tC.internalvars.ga_ads_data_redaction = #ADS_DATA_REDACTION#;
if ((typeof tC.internalvars.consentSettings !== "undefined") && (tC.internalvars.consentSettings.ad_storage === "denied")) {
	if ((tC.internalvars.ga_url_passthrough !== "") && ((tC.internalvars.ga_url_passthrough.toLowerCase() === "true") || (tC.internalvars.ga_url_passthrough.toLowerCase() === "false"))) {
		gtag('set', 'url_passthrough', (tC.internalvars.ga_url_passthrough.toLowerCase() === "true"));
	}
	if ((tC.internalvars.ga_ads_data_redaction !== "") && ((tC.internalvars.ga_ads_data_redaction.toLowerCase() === "true") || (tC.internalvars.ga_ads_data_redaction.toLowerCase() === "false"))) {
		gtag('set', 'ads_data_redaction', (tC.internalvars.ga_ads_data_redaction.toLowerCase() === "true"));
	}
}
tC.internalvars.setConsentUpdateCommand = function(result){
	tC.internalvars.consentSettings = {
	    'ad_storage': (result.consent.categories[#TRUST_AD_CATEGORY_ID#].status === "on") ? "granted" : "denied",
	    'analytics_storage': (result.consent.categories[#TRUST_ANALYTICS_CATEGORY_ID#].status === "on") ? "granted" : "denied",
	    'functionality_storage': (result.consent.categories[#TRUST_FUNCTIONALITY_CATEGORY_ID#].status === "on") ? "granted" : "denied",
	    'personalization_storage': (result.consent.categories[#TRUST_PERSONALIZATION_CATEGORY_ID#].status === "on") ? "granted" : "denied",
	    'security_storage': (result.consent.categories[#TRUST_SECURITY_CATEGORY_ID#].status === "on") ? "granted" : "denied",
	  'ad_personalization':(result.consent.categories[#TRUST_AD_PERSONALIZATION_CATEGORY_ID#].status === "on") ? "granted" : "denied",
  'ad_user_data':(result.consent.categories[#TRUST_AD_USER_DATA_CATEGORY_ID#].status === "on") ? "granted" : "denied"
    }
	console.log(tC.internalvars.consentSettings);
	console.log("REGION: " + #REGION#);
	console.log("WAIT_FOR_UPDATE: " + #WAIT_FOR_UPDATE#);
	// Update command on page load
	console.log("INFO: update command");
	gtag('consent', tC.internalvars.setConsentCommand("update", #REGION#, #WAIT_FOR_UPDATE#), tC.internalvars.consentSettings);
};
cact('consent.get', function (result) {
	if (result.consent.status !== "unset") {
      tC.internalvars.setConsentUpdateCommand(result);
	}
});
// Triggered on consent changes
cact('consent.onUpdate', function (result) {
  	tC.internalvars.setConsentUpdateCommand(result);
});
</script>
```

</details>

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-6abf2a3947e3c8fdd7ed5e4c5243eb302e9a64ef%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

You can **do your mapping** on the new fields & **Save** again your tag

Set the by default status of the \*new categories (denied or granted)

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-1d7dea7ec28141c71da3d78e7fd0b375f5cf01de%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

Enter the ID of your privacy categories to link them with the Google's \*new categories\
If needed, you can find your privacy ID on the page `Data Governance > Consent Management > Categories`

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-114bda8441c74b9e8333fdebdd06b8a272093270%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

Don't forget to save your settings

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-bdfecb583e876edaa8371f53d857f070d5d0e632%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### Generate & Deploy your container

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-25eeb9f0148845d6560c2196d81d6d3076abeccd%2Fimage.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

### Update your Privacy Banner(s)

Go on page `Source > Privacy Banners > edition step`

{% hint style="danger" %}
**LEGAL REQUIREMENT**

Add the following link to the Google Consent Mode Policy in your Privacy Center or in your Vendors menu

<https://business.safety.google/privacy/>

Don't forget to generate & deploy your privacy banner(s) once you've made this additional setting.
{% endhint %}

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-a397a984ff7063dc4e15fd5d1bf2f07468f3fb32%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

You can now Generate & Deploy your privacy banner(s)

<figure><img src="https://1259070148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2Fgit-blob-c7704cae97ab240fab19a32a03dbf5bbc72b48b0%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

**You are up to date**, you can test your settings on your website.\
Don't hesitate to refer at the [test step above](#id-6-tests-and-deployment) to get tips & tricks.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.commandersact.com/features/consent-management/setup-guides/tag-manager/google-consent-mode-in-commanders-act-tms.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
