{"id":67444,"date":"2025-02-04T07:33:32","date_gmt":"2025-02-04T07:33:32","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/consent-settings-in-google-tag-manager\/"},"modified":"2025-02-04T07:33:32","modified_gmt":"2025-02-04T07:33:32","slug":"consent-settings-in-google-tag-manager","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=67444","title":{"rendered":"Consent Settings In Google Tag Manager"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p><strong>Last updated 1 December 2023: New consent signals added<\/strong><\/p>\n<p>Ever since <a href=\"https:\/\/analytics.google.com\">Google Analytics<\/a> released the first features of <a href=\"https:\/\/www.simoahava.com\/analytics\/consent-mode-google-tags\/\">consent mode<\/a>, I\u2019ve been anxiously waiting for news about a more tightly-knit integration with Google\u2019s preferred implementation solution: Google Tag Manager.<\/p>\n<p>In a <a href=\"https:\/\/blog.google\/products\/marketingplatform\/360\/respect-user-consent-choices-google-tag-manager\/\">recent release<\/a>, Google released a veritable cornucopia of new features that <em>should<\/em> assist in determining and implementing consent not just across Google tags, but <em>any<\/em> tags running in the container.<\/p>\n<div style=\"aspect-ratio: 968 \/ 574;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-settings.jpg\" title=\"Consent settings\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"574\" width=\"968\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-settings.jpg#ZgotmplZ\" alt=\"Consent settings\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The new features are:<\/p>\n<ul>\n<li>New <strong>consent types<\/strong> (in addition to <code>ad_storage<\/code> and <code>analytics_storage<\/code> which were introduced with <a href=\"https:\/\/www.simoahava.com\/analytics\/consent-mode-google-tags\/\">consent mode<\/a>).<\/li>\n<li>Tag-specific <a href=\"https:\/\/support.google.com\/tagmanager\/answer\/10718549#tag-settings\">consent settings<\/a> with both <strong>built-in<\/strong> consent checks (if their behavior is modified by consent state) and <strong>additional<\/strong> consent checks, where you can determine if a tag requires specific types of consent to be allowed to fire in general.<\/li>\n<li>A new <strong>Consent Overview<\/strong> screen, where you can quickly check which tags have already been configured for additional consent settings and which are still waiting to be updated.<\/li>\n<li>New trigger types, with both a <strong>Consent Initialization<\/strong> trigger (fires before anything else in the container) and an <strong>Initialization<\/strong> trigger (fires before anything except the Consent Initialization trigger) being added to the mix.<\/li>\n<li>New <a href=\"https:\/\/www.simoahava.com\/analytics\/custom-templates-guide-for-google-tag-manager\/\">custom template<\/a> sandbox <a href=\"https:\/\/developers.google.com\/tag-manager\/templates\/cmp-consent\">APIs<\/a> for making consent management platform templates (and why not others as well) <strong>consent-aware<\/strong>.<\/li>\n<\/ul>\n<blockquote>\n<p>These features are available in both GTM 360 and regular (free) GTM containers.<\/p>\n<\/blockquote>\n<p>Let\u2019s take a closer look at all of these.<\/p>\n<p>                <span class=\"simmer\"><br \/>\n  <span class=\"close\">X<\/span><\/p>\n<p>\n    <span class=\"fa fa-md fa-bell\"\/><br \/>\n    <strong>The Simmer Newsletter<\/strong>\n  <\/p>\n<p>\n    Subscribe to the <a href=\"https:\/\/www.simoahava.com\/newsletter\/\">Simmer newsletter<\/a> to get the latest news and content from Simo Ahava into your email inbox!\n  <\/p>\n<p>  <\/span><\/p>\n<h2 id=\"new-consent-types\">New consent types<\/h2>\n<p>First of all, in addition to <code>ad_storage<\/code> and <code>analytics_storage<\/code>, which were introduced with <a href=\"https:\/\/www.simoahava.com\/analytics\/consent-settings-google-tag-manager\/(\/analytics\/consent-mode-google-tags\/)\">consent mode<\/a>, there are <strong>five<\/strong> additional consent types Google recommends to use with these APIs. Here\u2019s the full list (<a href=\"https:\/\/support.google.com\/tagmanager\/answer\/10718549#consent-types\">source<\/a>):<\/p>\n<table>\n<thead>\n<tr>\n<th>Consent type<\/th>\n<th>Required for Google\u2019s services<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ad_storage<\/code><\/td>\n<td>Yes<\/td>\n<td>Enables storage (such as cookies) related to advertising<\/td>\n<\/tr>\n<tr>\n<td><code>analytics_storage<\/code><\/td>\n<td>Yes<\/td>\n<td>Enables storage (such as cookies) related to analytics e.g. visit duration<\/td>\n<\/tr>\n<tr>\n<td><code>ad_user_data<\/code><\/td>\n<td>Yes<\/td>\n<td>Whether Google\u2019s services can use user data for building advertising audiences<\/td>\n<\/tr>\n<tr>\n<td><code>ad_personalization<\/code><\/td>\n<td>Yes<\/td>\n<td>Whether Google\u2019s services can use the data for remarketing<\/td>\n<\/tr>\n<tr>\n<td><code>functionality_storage<\/code><\/td>\n<td>No<\/td>\n<td>Enables storage that supports the functionality of the website or app e.g. language settings<\/td>\n<\/tr>\n<tr>\n<td><code>personalization_storage<\/code><\/td>\n<td>No<\/td>\n<td>Enables storage related to personalization e.g. video recommendations<\/td>\n<\/tr>\n<tr>\n<td><code>security_storage<\/code><\/td>\n<td>No<\/td>\n<td>Enables storage related to security such as authentication functionality, fraud prevention, and other user protection<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p>Note! The last three consent types are <em>only<\/em> for non-Google tags. Google tags (e.g. Analytics, Ads, and Floodlight) are only sensitive to <code>ad_storage<\/code>, <code>analytics_storage<\/code>. <code>ad_user_data<\/code>, and <code>ad_personalization<\/code>.<\/p>\n<\/blockquote>\n<p>It\u2019s somewhat odd seeing <code>functionality_storage<\/code> and <code>security_storage<\/code> here, as at least in the European Union they are typically deemed to be <strong>strictly necessary<\/strong> storage and thus wouldn\u2019t require consent at all. On the other hand, having more configuration options is rarely a bad thing.<\/p>\n<blockquote>\n<p>You can actually add <strong>any consent types you like<\/strong> into the respective API calls and tag settings. The three additional consent types are Google\u2019s recommendations, but they\u2019re not an exhaustive list.<\/p>\n<\/blockquote>\n<p>If you open a tag, <em>any<\/em> tag, and scroll down to its <strong>Advanced Settings<\/strong>, you\u2019ll find a section titled <strong>Consent Settings<\/strong>.<\/p>\n<div style=\"aspect-ratio: 922 \/ 678;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/full-consent-settings.jpg\" title=\"Full consent settings\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"678\" width=\"922\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/full-consent-settings.jpg#ZgotmplZ\" alt=\"Full consent settings\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>There are two sections here (although you might see just one in some cases).<\/p>\n<h3 id=\"built-in-consent-checks\">Built-in Consent Checks<\/h3>\n<p><strong>Built-in Consent Checks<\/strong> means that the tag (or, more precisely, the template running the tag) is <em>consent-aware<\/em>. This means that the tag is doing <em>something<\/em> with consent state, although it isn\u2019t really explained <em>what<\/em> it is.<\/p>\n<p>In the screenshot above, for example, you can see <code>ad_storage<\/code> and <code>functionality_storage<\/code> listed in the Built-in Consent Checks section. This means that this particular tag template has defined in its <a href=\"#new-permission-accesses-consent-state\">permissions<\/a> that it needs read and\/or write access to these particular consent types.<\/p>\n<p>It\u2019s a good thing to be aware of, in case you are wondering why the tag isn\u2019t behaving as you\u2019d expect it to behave.<\/p>\n<p>Google tags (Analytics, Ads, and Floodlight) have built-in checks for <code>analytics_storage<\/code>, <code>ad_storage<\/code>, <code>ad_user_data<\/code>, and <code>ad_personalization<\/code>, and their behavior <a href=\"https:\/\/support.google.com\/analytics\/answer\/9976101?hl=en\">is documented<\/a>. Other tags might show <a href=\"#new-consent-types\">other consent types<\/a> here, and it\u2019s up to these tags\u2019 documentation to explain how they are accessing consent state.<\/p>\n<blockquote>\n<p>Note! Built-in Consent Checks is only visible if the template is accessing consent state in its code. If it has nothing to do with consent APIs, you won\u2019t see Built-in Consent Checks under these settings.<\/p>\n<\/blockquote>\n<h3 id=\"additional-consent-checks\">Additional Consent Checks<\/h3>\n<p>The <em>other<\/em> section is called <strong>Additional Consent Checks<\/strong>, and\u2026<\/p>\n<p>This. Is. Really. Cool.<\/p>\n<p>With this setting, you can essentially handle consent checks <em>without having to apply consent check conditions to the tag\u2019s <strong>triggers<\/strong><\/em>!<\/p>\n<p>There are three options here:<\/p>\n<ul>\n<li><strong>Not set<\/strong> \u2013\u00a0the default option. Use this to indicate this tag hasn\u2019t been properly reviewed for whether its triggering should be conditioned on consent or not.<\/li>\n<li><strong>No additional consent required<\/strong> \u2013\u00a0Set this if the tag\u2019s triggering should <em>not<\/em> be limited based on consent.<\/li>\n<li><strong>Require additional consent for this tag<\/strong> \u2013\u00a0Set this if the tag should only fire if consent has been granted to one or more consent types. When you check this option, a small table appears, and you can add any of the <a href=\"#new-consent-types\">available consent types<\/a> into the table. The tag will <em>only<\/em> fire if all the listed consent types have the <code>granted<\/code> state.<\/li>\n<\/ul>\n<div style=\"aspect-ratio: 1002 \/ 542;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/three-consent-checks.jpg\" title=\"Three consent checks\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"542\" width=\"1002\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/three-consent-checks.jpg#ZgotmplZ\" alt=\"Three consent checks\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The tag with the settings as above will only fire if <code>security_storage<\/code>, <code>functionality_storage<\/code>, and <code>analytics_storage<\/code> have been <strong>granted<\/strong> consent.<\/p>\n<h2 id=\"consent-overview\">Consent Overview<\/h2>\n<p>To enable the Consent Overview screen, first go to <strong>Admin<\/strong> and then <strong>Container Settings<\/strong>.<\/p>\n<p>Check the box next to <strong>Enable consent overview<\/strong>.<\/p>\n<div style=\"aspect-ratio: 1216 \/ 902;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/container-settings.jpg\" title=\"Container settings\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"902\" width=\"1216\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/container-settings.jpg#ZgotmplZ\" alt=\"Container settings\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Now when you go to <strong>Tags<\/strong>, you can click the <strong>Consent Overview<\/strong> icon in the action bar.<\/p>\n<div style=\"aspect-ratio: 2024 \/ 328;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-overview-button.jpg\" title=\"Consent Overview\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"328\" width=\"2024\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-overview-button.jpg#ZgotmplZ\" alt=\"Consent Overview\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Consent Overview lists all your tags in two sections.<\/p>\n<p><strong>Consent Not Configured<\/strong> means that the <a href=\"#additional-consent-checks\"><strong>Additional Consent Checks<\/strong><\/a> setting for these tags is the default <strong>Not set<\/strong>.<\/p>\n<p><strong>Consent Configured<\/strong> means that the tag has been configured for additional consent checks (either <strong>None<\/strong> or one or more consent types that need to be granted for the tag to fire).<\/p>\n<div style=\"aspect-ratio: 2678 \/ 1862;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-overview-screen.jpg\" title=\"Consent overview screen\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1862\" width=\"2678\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-overview-screen.jpg#ZgotmplZ\" alt=\"Consent overview screen\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>You can mass edit the consent check settings for tags by selecting them and then clicking the Edit Consent Settings button in the action bar.<\/p>\n<div style=\"aspect-ratio: 1864 \/ 684;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/mass-edit-consent.jpg\" title=\"Mass edit consent settings\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"684\" width=\"1864\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/mass-edit-consent.jpg#ZgotmplZ\" alt=\"Mass edit consent settings\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Use the Consent Overview screen religiously, especially if you are integrating Google Tag Manager with a consent management platform (CMP). It\u2019s a great way to quickly see how and if your tags have been configured to work with the consent settings set by your CMP.<\/p>\n<h2 id=\"new-trigger-types\">New trigger types<\/h2>\n<p>There are <strong>two<\/strong> new trigger types in Google Tag Manager. Both are also automatically added to each container as built-in triggers, and both appear in Preview mode as new trigger events.<\/p>\n<div style=\"aspect-ratio: 982 \/ 616;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/new-trigger-types.jpg\" title=\"New trigger types\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"616\" width=\"982\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/new-trigger-types.jpg#ZgotmplZ\" alt=\"New trigger types\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<blockquote>\n<p><strong>Note!<\/strong> These triggers can\u2019t really handle asynchronous requests. If you have an asynchronous call to fetch consent state, for example, then it\u2019s possible that even when firing the tag with the <strong>Consent Initialization<\/strong> trigger, it completes only after some other tags have already started firing on later triggers.<\/p>\n<\/blockquote>\n<h3 id=\"consent-initialization\">Consent Initialization<\/h3>\n<p><strong>Consent Initialization<\/strong> is a trigger that <strong>fires before any other trigger in the container<\/strong>. It is programmatically generated to be the very first trigger that can fire on any given page.<\/p>\n<p>This means that it\u2019s good for, as the name implies, establishing the <strong>default consent state<\/strong> of the new consent types, for example (see <a href=\"#new-template-apis\">below<\/a>).<\/p>\n<p>In other words, if you are using a consent management platform and you want to run some code (perhaps their own custom template) that establishes the default consent state for the seven different consent types, <strong>this<\/strong> is the correct trigger type to use.<\/p>\n<p>The built-in trigger that\u2019s automatically available in all containers is called <strong>Consent Initialization &#8211; All Pages<\/strong>.<\/p>\n<div style=\"aspect-ratio: 826 \/ 302;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-init-trigger.jpg\" title=\"consent-init-trigger.jpg\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"302\" width=\"826\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/consent-init-trigger.jpg#ZgotmplZ\" alt=\"consent-init-trigger.jpg\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The <code>dataLayer<\/code> event for this trigger type is <code>gtm.init_consent<\/code> (although you won\u2019t actually find it in the <code>dataLayer<\/code> array), and in Preview mode it shows up as <strong>Consent Initialization<\/strong>.<\/p>\n<div style=\"aspect-ratio: 1728 \/ 960;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/gtm-init-consent-event.jpg\" title=\"gtm-init-consent-event.jpg\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"960\" width=\"1728\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/gtm-init-consent-event.jpg#ZgotmplZ\" alt=\"gtm-init-consent-event.jpg\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h3 id=\"initialization\">Initialization<\/h3>\n<p>The other new trigger type is <strong>Initialization<\/strong>. This fires <em>after<\/em> Consent Initialization but <em>before<\/em> the first trigger events that were actually pushed into <code>dataLayer<\/code>.<\/p>\n<p>It\u2019s where you\u2019d establish non-consent-related dependencies for the rest of the container to make use of.<\/p>\n<p>As it fires before anything else that\u2019s pushed into <code>dataLayer<\/code>, it guarantees that tag execution begins before any trigger based on actual <code>dataLayer<\/code> events has a chance to fire. Just note the caveat about <a href=\"#new-trigger-types\">asynchronous tags<\/a> above!<\/p>\n<p>The built-in trigger is called <strong>Initialization \u2013 All Pages<\/strong>.<\/p>\n<p>The <code>dataLayer<\/code> event for this trigger type is <code>gtm.init<\/code>, and in Preview mode it shows up as <strong>Initialization<\/strong>.<\/p>\n<div style=\"aspect-ratio: 1502 \/ 856;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/gtm-init-event.jpg\" title=\"gtm.init event\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"856\" width=\"1502\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/gtm-init-event.jpg#ZgotmplZ\" alt=\"gtm.init event\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h2 id=\"new-template-apis\">New template APIs<\/h2>\n<blockquote>\n<p>If you\u2019re not looking to build custom templates, you can <a href=\"#working-with-consent-management-platforms\">skip to the next chapter<\/a>.<\/p>\n<\/blockquote>\n<p>If you\u2019re building a <a href=\"https:\/\/www.simoahava.com\/analytics\/custom-templates-guide-for-google-tag-manager\/\">custom template<\/a> for a consent management platform (or really any script that should define consent status), there are new template APIs available for you.<\/p>\n<p>There are <strong>also<\/strong> some new APIs available for making templates generally sensitive to consent state on the site.<\/p>\n<h3 id=\"set-default-consent-state\">Set default consent state<\/h3>\n<p><strong>Default consent state<\/strong> is something that\u2019s applied as soon as the tag fires (preferably on the <strong>Consent Initialization<\/strong> trigger). This establishes a baseline for consent settings. Its values can be derived from CMP-specific cookies or something in the <code>dataLayer<\/code>, for example.<\/p>\n<p>The API is called <a href=\"https:\/\/developers.google.com\/tag-manager\/templates\/api#setdefaultconsentstate\"><code>setDefaultConsentState<\/code><\/a>, and it takes an object with five properties, each corresponding to a consent type listed in the <a href=\"#new-consent-types\">table above<\/a>. You can also provide an optional <code>region<\/code> parameter to have the settings established in the API call apply to visitors from specific regions. The regions (and sub-regions) are provided in <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_3166-2\">ISO 3166-2 format<\/a>.<\/p>\n<p>The default settings are applied until <a href=\"#update-consent-state\">consent state is updated<\/a>.<\/p>\n<p>In the example below, the CMP template establishes a default state of <code>denied<\/code> across the board, except for USA, where all but <code>ad_storage<\/code>, <code>ad_user_data<\/code>, and <code>ad_personalization<\/code> are set to <code>granted<\/code> state.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\"><span style=\"color:#00a\">const<\/span> setDefaultConsentState = require(<span style=\"color:#a50\">'setDefaultConsentState'<\/span>);\n\nsetDefaultConsentState({\n  ad_storage: <span style=\"color:#a50\">'denied'<\/span>,\n  analytics_storage: <span style=\"color:#a50\">'denied'<\/span>,\n  ad_user_data: <span style=\"color:#a50\">'denied'<\/span>,\n  ad_personalizatio: <span style=\"color:#a50\">'denied'<\/span>,\n  functionality_storage: <span style=\"color:#a50\">'denied'<\/span>,\n  personalization_storage: <span style=\"color:#a50\">'denied'<\/span>,\n  security_storage: <span style=\"color:#a50\">'denied'<\/span>\n});\n\nsetDefaultConsentState({\n  analytics_storage: <span style=\"color:#a50\">'granted'<\/span>,\n  functionality_storage: <span style=\"color:#a50\">'granted'<\/span>,\n  personalization_storage: <span style=\"color:#a50\">'granted'<\/span>,\n  security_storage: <span style=\"color:#a50\">'granted'<\/span>,\n  region: [<span style=\"color:#a50\">'US'<\/span>]\n});\n<\/code><\/pre>\n<\/div>\n<p>Naturally, you\u2019ll want to make the values dynamic based on, for example, existing consent cookies or settings in the <code>dataLayer<\/code>.<\/p>\n<h3 id=\"update-consent-state\">Update consent state<\/h3>\n<p>If the user then interacts with the consent management platform and changes their preferences, you can have the template call the <a href=\"https:\/\/developers.google.com\/tag-manager\/templates\/api#updateconsentstate\"><code>updateConsentState<\/code><\/a> API with a similar structure as above.<\/p>\n<blockquote>\n<p>Note that <code>region<\/code> is not available in <code>updateConsentState<\/code>. That\u2019s because when you need to invoke this API you should already know what the state of the consent call should be, regardless of where the user is located.<\/p>\n<\/blockquote>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\"><span style=\"color:#00a\">const<\/span> updateConsentState = require(<span style=\"color:#a50\">'updateConsentState'<\/span>);\n\nupdateConsentState({\n  ad_storage: data.ad_storage,\n  analytics_storage: data.analytics_storage,\n  ad_user_data: data.ad_user_data,\n  ad_personalization: data.ad_personalization,\n  functionality_storage: <span style=\"color:#a50\">'granted'<\/span>,\n  personalization_storage: data.personalization_storage,\n  security_storage: <span style=\"color:#a50\">'granted'<\/span>\n});\n<\/code><\/pre>\n<\/div>\n<p>In the example above, functionality and security storage are hard-coded to <code>granted<\/code>, and all the other consent states are pulled in from template fields, most likely configured to respond to user choice.<\/p>\n<h3 id=\"check-consent-state\">Check consent state<\/h3>\n<p>If you want a template to change its behavior based on the current consent state, you can use the <a href=\"https:\/\/developers.google.com\/tag-manager\/templates\/api#isconsentgranted\"><code>isConsentGranted<\/code><\/a> API.<\/p>\n<p>This takes a single parameter \u2013 one of the five consent types \u2013\u00a0and returns <code>true<\/code> or <code>false<\/code>, depending on what the state of consent is for the given consent type.<\/p>\n<p>For example, to set a cookie only if <code>analytics_storage<\/code> consent has been granted, you can run this code:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\"><span style=\"color:#00a\">const<\/span> isConsentGranted = require(<span style=\"color:#a50\">'isConsentGranted'<\/span>);\n\n<span style=\"color:#00a\">if<\/span> (isConsentGranted(<span style=\"color:#a50\">'analytics_storage'<\/span>)) {\n  <span style=\"color:#aaa;font-style:italic\">\/\/ Custom method that handles setting the cookie\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>  setCustomAnalyticsCookie();\n}\n<\/code><\/pre>\n<\/div>\n<h3 id=\"listen-for-changes-in-consent-state\">Listen for changes in consent state<\/h3>\n<p>Sometimes it\u2019s super clumsy to just add triggers to a tag to make it re-evaluate its functionality based on consent settings, for example. That\u2019s why there\u2019s a new API, <a href=\"https:\/\/developers.google.com\/tag-manager\/templates\/api#addconsentlistener\"><code>addConsentListener<\/code><\/a>, which can be used to execute a callback in a template once the consent state for any given consent type changes.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\"><span style=\"color:#00a\">const<\/span> addConsentListener = require(<span style=\"color:#a50\">'addConsentListener'<\/span>);\n\n<span style=\"color:#00a\">const<\/span> consentCallback = (consentType, granted) =&gt; {\n  <span style=\"color:#00a\">if<\/span> (consentType === <span style=\"color:#a50\">'analytics_storage'<\/span> &amp;&amp; granted) {\n    setCustomAnalyticsCookie();\n  }\n};\n\naddConsentListener(<span style=\"color:#a50\">'analytics_storage'<\/span>, consentCallback);\n<\/code><\/pre>\n<\/div>\n<p>The callback is passed the consent type and whether consent was granted or not (<code>true<\/code> \/ <code>false<\/code>) as arguments.<\/p>\n<p>This is a pretty nifty solution, as it leaves the batching and dispatching logic to the tag itself. You don\u2019t need to overengineer the tag with custom triggers that detect the change in consent state \u2013 the template will handle this for you.<\/p>\n<p>The template will simply listen for changes to consent state, and automatically send the hit that was blocked due to lack of consent before the state update.<\/p>\n<h3 id=\"new-permission-accesses-consent-state\">New permission: Accesses consent state<\/h3>\n<p>There is also the new <strong>Accesses consent state<\/strong> permission, which controls which consent states the template is allowed to read\/write.<\/p>\n<div style=\"aspect-ratio: 2530 \/ 548;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/05\/new-permission.jpg\" title=\"New consent permissions\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"548\" width=\"2530\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/05\/new-permission.jpg#ZgotmplZ\" alt=\"New consent permissions\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Here are the permissions required by all of the APIs listed above:<\/p>\n<table>\n<thead>\n<tr>\n<th>API name<\/th>\n<th>Requires <strong>read<\/strong><\/th>\n<th>Requires <strong>write<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>setDefaultConsentState<\/code><\/td>\n<td>No<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td><code>updateConsentState<\/code><\/td>\n<td>No<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td><code>isConsentGranted<\/code><\/td>\n<td>Yes<\/td>\n<td>No<\/td>\n<\/tr>\n<tr>\n<td><code>addConsentListener<\/code><\/td>\n<td>Yes<\/td>\n<td>No<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Each consent type that your APIs want to read and\/or write needs to be separately listed in the permissions table (thus it can have a maximum of five rows).<\/p>\n<p>Any consent types you add to this permission table will be listed in the <strong>Built-in Consent Checks<\/strong> section of the tag.<\/p>\n<h2 id=\"working-with-consent-management-platforms\">Working with Consent Management Platforms<\/h2>\n<p>It\u2019s no secret that these new consent settings have been created <em>specifically<\/em> with CMPs in mind.<\/p>\n<p>However, for there to be an actual <em>benefit<\/em> to using a CMP with these new settings, a couple of things need to be in place:<\/p>\n<ol>\n<li>The CMP needs to build a custom template that makes use of the <a href=\"#new-consent-types\">new consent types<\/a> <em>and<\/em> of both the <a href=\"#set-default-consent-state\">default<\/a> and <a href=\"#update-consent-state\">update<\/a> consent status APIs.<\/li>\n<li>Ideally, tags you run in the container would <em>modify<\/em> their behavior based on consent state. They can do this with the <a href=\"#listen-for-changes-in-consent-state\">new template APIs<\/a> that let templates react to consent state (and changes).<\/li>\n<li>At the very least, you should go through every tag in the container and check its <strong>Advanced Settings<\/strong> to see if consent status should <strong>block<\/strong> the tag if not granted.<\/li>\n<\/ol>\n<p>The biggest bottlenecks are obviously (1) and (2). Judging by the <a href=\"https:\/\/support.google.com\/tagmanager\/answer\/10718549#cmp-integrations\">list provided by Google<\/a>, it doesn\u2019t look like the most popular CMPs are exactly jumping at the opportunity to integrate with either GTM or consent mode. Well, these are still fairly new features (and in beta), so let\u2019s hope the situation improves soon.<\/p>\n<p>Hopefully, tag templates in general will be engineered to be consent-aware where necessary. It makes a whole lot of sense for templates that <em>can<\/em> work without storage to conditionally block setting cookies if there isn\u2019t appropriate consent available.<\/p>\n<p>Similarly, vendors that <em>do<\/em> have a separate endpoint for \u201cprivacy-friendly\u201d data collection (e.g. no third-party cookies) should make the decision which endpoint to use dependent on the state of the relevant consent.<\/p>\n<p>As before, configuring consent management is <strong>a lot of work<\/strong>. This is by design, as consent needs to be deliberately integrated and engineered, as there are legal consequences for ignoring the granularity of what user choice actually is.<\/p>\n<p>With these new consent settings in GTM, thankfully it\u2019s no longer the Google Tag Manager admin who has to do the bulk of the work, but vendors are required to participate and cooperate as well.<\/p>\n<h2 id=\"summary\">Summary<\/h2>\n<p>Whenever Google Tag Manager makes a conscious effort to make life easier for its admins and users, it makes me happy.<\/p>\n<p>Integrating consent management platforms with Google Tag Manager has historically been a veritable pain in the rump. The new consent features don\u2019t take away all of the friction, but they do make it more manageable to work together with CMPs to make sure that the GTM container is wired for consent options.<\/p>\n<p>Similarly, service vendors now have new template APIs that allow them to add more granularity to their tags than just block vs. fire based on consent choice. I really, really hope vendors will make use of these features.<\/p>\n<p>The new UI features make it easy to quickly audit a container for consent support, but I did find myself craving more even more transparency from the tag settings directly. It\u2019s good to know what the built-in consent choices are, for example, but it would be even more useful to know <em>how<\/em> the tag actually relies on consent without having to dig into the template code itself.<\/p>\n<p>Other things that I feel like should be improved include:<\/p>\n<ul>\n<li>Incentivize using the new Consent Initialization and Initialization trigger types. Make them work with asynchronous requests as well (i.e. don\u2019t proceed to the next trigger event until a success signal has been sent).<\/li>\n<li>Make it possible to grant \/ deny consent on a vendor-by-vendor basis as well.<\/li>\n<li>Make it possible to add custom purpose types instead of just the seven consent types that are now available (although that is a whole lot better than the two (<code>ad_storage<\/code> and <code>analytics_storage<\/code>) we used to have!).<\/li>\n<li>Expose consent state to outside Google Tag Manager as well, as it\u2019s possible that not all tags are running through Google Tag Manager.<\/li>\n<\/ul>\n<p>In general, consent is predicated on <strong>transparency<\/strong>. The more GTM can improve transparency to what the state of consent is, the better for all parties involved.<\/p>\n<p>What do you think about the current state of consent management in Google Tag Manager?<\/p>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Last updated 1 December 2023: New consent signals added Ever since Google Analytics released the first features of consent mode, I\u2019ve been anxiously waiting for news about a more tightly-knit integration with Google\u2019s preferred implementation solution: Google Tag Manager. In a recent release, Google released a veritable cornucopia of new features that should assist in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":67445,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[16490,1531,14495,5501,1791],"dealstore":[],"offerexpiration":[],"class_list":["post-67444","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-consent","tag-google","tag-manager","tag-settings","tag-tag"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Consent Settings In Google Tag Manager - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=67444\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Consent Settings In Google Tag Manager - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Last updated 1 December 2023: New consent signals added Ever since Google Analytics released the first features of consent mode, I\u2019ve been anxiously waiting for news about a more tightly-knit integration with Google\u2019s preferred implementation solution: Google Tag Manager. In a recent release, Google released a veritable cornucopia of new features that should assist in [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=67444\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-04T07:33:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1441\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=67444#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Consent Settings In Google Tag Manager\",\"datePublished\":\"2025-02-04T07:33:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444\"},\"wordCount\":2686,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg\",\"keywords\":[\"Consent\",\"Google\",\"Manager\",\"Settings\",\"TAG\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=67444#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=67444\",\"url\":\"https:\/\/fivemor.com\/?p=67444\",\"name\":\"Consent Settings In Google Tag Manager - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg\",\"datePublished\":\"2025-02-04T07:33:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=67444#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=67444\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=67444#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg\",\"width\":2560,\"height\":1441},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=67444#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Consent Settings In Google Tag Manager\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Consent Settings In Google Tag Manager - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=67444","og_locale":"en_US","og_type":"article","og_title":"Consent Settings In Google Tag Manager - Som2ny Network","og_description":"Last updated 1 December 2023: New consent signals added Ever since Google Analytics released the first features of consent mode, I\u2019ve been anxiously waiting for news about a more tightly-knit integration with Google\u2019s preferred implementation solution: Google Tag Manager. In a recent release, Google released a veritable cornucopia of new features that should assist in [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=67444","og_site_name":"Som2ny Network","article_published_time":"2025-02-04T07:33:32+00:00","og_image":[{"width":2560,"height":1441,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=67444#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=67444"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Consent Settings In Google Tag Manager","datePublished":"2025-02-04T07:33:32+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=67444"},"wordCount":2686,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=67444#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg","keywords":["Consent","Google","Manager","Settings","TAG"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=67444#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=67444","url":"https:\/\/fivemor.com\/?p=67444","name":"Consent Settings In Google Tag Manager - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=67444#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=67444#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg","datePublished":"2025-02-04T07:33:32+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=67444#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=67444"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=67444#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/consent-settings-google-tag-manager-scaled.jpg","width":2560,"height":1441},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=67444#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Consent Settings In Google Tag Manager"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/67444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=67444"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/67444\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/67445"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=67444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=67444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=67444"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=67444"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=67444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}