Set the consent default in <head>
BEFORE the GTM snippet, set defaults for all 6 signals. EEA/UK: deny by default. Rest of world: typically granted.
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'granted',
'security_storage': 'granted',
'wait_for_update': 500,
'region': ['GB','DK','DE','FR','IE','IT','ES','SE','NO','FI','NL','BE','AT','PL','PT','CZ','HU','RO','GR']
});
</script>
<!-- THEN your GTM snippet below -->wait_for_update tells Google to delay tags up to 500ms while waiting for the user's choice — prevents firing before consent updates.