Why does Google Tag Manager now show gtag.config events, and do I need to change anything?
Short answer
As of October 2026, Google says Google Tag Manager containers start as soon as they load, without waiting for gtag('config') commands, and those commands now appear in the dataLayer as gtag.config events. A store that loads GTM with its GTM- ID, keeps the Google tag inside GTM and has no wildcard triggers needs no changes. Act if gtm.js loads with a G-, AW- or DC- ID, if the page calls gtag('config') without the gtag.js snippet, or if a Custom Event trigger matches every event with the regex .*.
What did Google change in Google Tag Manager on October 8, 2026?
Google Tag Manager (GTM) loads your marketing tags from one container script, gtm.js. On October 8, 2026, the GTM release notes said every gtm.js container snippet will start when the container loads, whether or not the page sends gtag('config') commands1. A gtag('config') command is a line of Google tag code that sets up a destination, such as a GA4 property or a Google Ads account2.
Config commands now appear in the dataLayer, the list a page uses to hand data to tags, as gtag.config events, and tags on wildcard Custom Event triggers may fire on them1.
Official sources disagree on timing: the release notes say "With this update"1, the gtag.js help article says GTM snippets "will soon be updated"3. Google's email, as quoted on the WordPress.org forums, named October 2, 2026; no official page confirms that date as of October 10, 202613. Plan as if the change is live.
Which setups are affected, and which are not?
| Setup | How to spot it | Google's position |
|---|---|---|
| 1. Unsupported gtm.js install | gtm.js loads with a G-, AW- or DC- ID (DC- means Floodlight16) | Unsupported; users of these containers got an email3 |
| 2. Stray config command | A gtag('config') line next to the GTM snippet, but no gtag/js?id= script | Google's example of a wrong setup; use gtag.js or configure the tag in GTM3 |
| 3. Wildcard trigger | A Custom Event trigger with regex matching and the name .* |
Fires on all events, including automatic ones4 |
If none of the three applies, Google's pages ask nothing of you, and you need no fix or outside help. A site that uses only Google's gtag.js snippet is supported too3.
What can go wrong in GA4 and Google Ads data after the change?
Lost settings. With the GTM snippet and a gtag('config') line but no gtag.js, GTM stops recognizing the command3, so each of its settings falls back to the default5 unless the Google tag in GTM sets it. Right column: our reading, not Google's.
| Setting on the page | Default | Possible effect |
|---|---|---|
| send_page_view: false | true | Extra page_view events in GA4 |
| server_container_url | not set | GA4 hits skip your server-side GTM container |
| user_id | not set | GA4 stops linking a logged-in shopper's sessions |
| allow_google_signals: false | true | Advertising features no longer switched off (privacy) |
Duplicates. A .* trigger already matched GTM's own events4, and each config command adds one more. So a catch-all tag can send GA4, Meta or a server container an extra gtag.config event, and a purchase tag on such a trigger can fire twice. Google Ads and GA4 drop a repeat with the same transaction ID1415; a tag without one counts the order twice. How many gtag.config events your pages produce depends on how many config commands they have: check it in Preview (next section).
How do I check my site in five minutes?
Only step 4 needs access to Google Tag Manager.
- Open a product page, view the source (Ctrl+U, or Cmd+Option+U on a Mac) and search for gtm.js. Google's standard snippet ends with the ID, as in 'dataLayer','GTM-XXXXXX'3. GTM- is fine; G-, AW- or DC- is an unsupported install.
- Search the same source for gtag( and gtag/js?id=. A config line without the gtag/js script is a stray config command.
- Apps can add code after the page loads, so also run the console check below; it prints each script's address and ID.
- In GTM, click Preview, connect to the store and look in the event list for gtag.config, the name Google gives these events in the dataLayer1. A tag under Tags Fired there means a trigger matches it, usually a wildcard.
// Paste into the browser console (F12 → Console) on any store page.
// 1) Which Google scripts loaded, and with which ID?
console.log('Google scripts:', performance.getEntriesByType('resource')
.map(r => r.name)
.filter(u => /gtm\.js|gtag\/js/.test(u)));
// 2) Which gtag('config') commands did the page send?
console.log('config commands:', (window.dataLayer || [])
.filter(e => e && e[0] === 'config')
.map(e => e[1]));How do I fix a gtm.js install that uses a G-, AW- or DC- ID?
Google gives two fixes3:
- Only Google tags (GA4, Google Ads, Floodlight): remove the gtm.js snippet and its gtag('config') lines, and paste Google's gtag.js snippet with the same ID right after the opening
<head>tag on every page. Carry over any parameters from the old config line (our advice). - GTM also runs other tags (Meta Pixel, consent banner, Custom HTML): keep the GTM snippet, put your GTM-XXXXXX ID in place of the G-, AW- or DC- ID, and set up the Google tag inside GTM.
The second case is urgent: since July 9, 2026, a container loaded with a G- or AW- ID runs only tags and variables provided by Google16, so a Meta Pixel in it may already not run.
// Google's gtag.js snippet from the help article; replace TAG_ID.
// Part 1, an async script tag:
// https://www.googletagmanager.com/gtag/js?id=TAG_ID
// Part 2, an inline script right after it:
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');After a switch to gtag.js, Tag Assistant should list your tag ID under Google tags found with a green or blue icon, and the DevTools Network tab should show requests to googletagmanager.com/gtag/js, not /gtm.js3.
How do I move gtag('config') settings into Google Tag Manager on WordPress, Shopify and custom code?
For sites that keep GTM, Google's route is to configure the Google tag inside GTM3:
- Copy the full gtag('config') line from the page source.
- In GTM, open the Google tag with the same Tag ID, or create one. Google's guide fires it on Initialization - All Initialization Events7.
- Add each parameter under Configuration settings, or in a Google tag: Configuration settings variable to reuse it across tags5.
- For values that change per shopper, such as user_id, push them to the dataLayer and read them with a Data Layer Variable. Google says user_id must not itself be personally identifiable information (PII)5.
- Delete the config line from the page, test in Preview and publish.
// Before: the GTM snippet, no gtag.js
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('config', 'G-XXXXXXX', { 'send_page_view': false, 'user_id': 'CUSTOMER_ID' });
// After: settings live in GTM; the page only shares the value.
// Run this above the GTM container snippet.
window.dataLayer = window.dataLayer || [];
dataLayer.push({ 'user_id': 'CUSTOMER_ID' }); // your platform fills in the IDWhere do I find the gtag('config') line on each platform?
| Platform | Where to look | Watch out |
|---|---|---|
| WordPress and WooCommerce | Analytics or "header and footer" code plugins; the theme's header file (often header.php) in Appearance → Theme File Editor | Theme updates erase edits there, and the editor keeps no backup8 |
| Shopify | Online Store → … next to the theme → Edit code, then search all theme files for gtag( | Duplicate the theme first; a theme update can remove code edits9 |
| Custom code | The shared layout or header template | Remove the line from every template |
How do I stop wildcard Custom Event triggers from firing on gtag.config?
A Custom Event trigger in Google Tag Manager fires a tag when a named event reaches the dataLayer; with "use regex matching", the name can be a pattern, a regular expression (regex). Google warns that .* matches all events, including those GTM and the Google tag send automatically, and recommends a narrower pattern4. Since October 8, 2026, that includes gtag.config1.
- Name the events. Replace
.*with the events the tag needs, for example^(add_to_cart|begin_checkout|purchase)$. - If the trigger must stay broad (say, it forwards every event to a server container), set it to fire on Some Custom Events where Event does not equal gtag.config. Before you publish the container, open Preview and confirm that the tag no longer fires on gtag.config and still fires on your other events.
- Test in Preview. On a gtag.config event, Tags Fired should be empty.
Can I keep the old behavior with the gtm init trigger?
Possibly, as a bridge. Google's announcement of August 20, 2026 recommends setting initialization with the gtm init trigger, which "can also configure the tag to wait for the config command"10. It does not say whether that option undoes the October 8 change.
Every web container has an Initialization - All Pages trigger that fires before all others except Consent Initialization11; Google does not say whether that is the "gtm init" trigger or where the wait option sits. Until Google documents it, treat this option as unconfirmed and fix the setup itself.
Google's help article still requires sites that pair a GTM snippet with gtag('config') to update their code3, so the wait option only buys time.
What does this mean for ad budgets and bidding?
Smart Bidding, the Google Ads strategies such as Target ROAS that bid for conversions or conversion value in every auction, requires conversion tracking12 and bids on what your tags report: a duplicate without a transaction ID counts as a sale.
An illustration, not data: 200 orders a month worth $20,000 on $5,000 of spend. If a purchase tag fires twice per order with no transaction ID, Google Ads reports $40,000, a return of 4 looks like 8, and Target ROAS buys traffic that really returns half of what it reports.
Lost settings cut the other way: if server_container_url is lost, a Meta Conversions API tag in your server container that relies on GA4 hits can see fewer sales.
Compare GA4 revenue with store revenue in the calculator, GA4 tab. An unsupported gtm.js install and a stray config command show in the page code, so a free outside check needs no passwords. More: GA4 e-commerce, Google Ads conversions.
FAQ
What is the gtag.config event?
It is how Google Tag Manager now shows a gtag('config') command in the dataLayer1. Inside GTM it fires a tag only when a trigger matches it, so the risk sits in wildcard Custom Event triggers.
Google emailed me about an unsupported implementation. What now?
Google says users of containers with the unsupported implementation, a G-, AW- or DC- ID loaded through gtm.js, got an email3. The ID is the last value of the gtm.js snippet in your page source. For Google tags only, switch to gtag.js; if Google Tag Manager runs other tags too, load it with your GTM- ID.
Do I need to do anything if I only use Google Tag Manager?
Usually not. If GTM loads with its GTM- ID, the Google tag lives inside the container, and the page has no gtag('config') lines or .* triggers, Google's pages ask nothing of you34. To confirm, check in Preview that no tag fires on gtag.config.
Does this affect server-side Google Tag Manager?
The October 8, 2026 release note covers web container snippets (gtm.js) and does not mention server containers1. But an extra GA4 event fired on gtag.config can still reach a server container and travel on to Meta Conversions API. More in server-side tracking.
Sources
- [1]Google Tag Manager Help, Release notes for Google Tag Manager (October 8, 2026) ↩
- [2]Google for Developers, Google tag API reference (April 17, 2026) ↩
- [3]Google Tag Manager Help, Set up your Google tag installation correctly for gtag.js (October 10, 2026) ↩
- [4]Google Tag Manager Help, Custom event trigger (October 10, 2026) ↩
- [5]Google Tag Manager Help, Reuse configuration settings in Google Tag Manager (October 10, 2026) ↩
- [6]Google Tag Manager Help, Manage tagging behavior using the container ID (October 10, 2026) ↩
- [7]Google Tag Manager Help, Set up Google Analytics in Tag Manager (October 10, 2026) ↩
- [8]WordPress.org Documentation, Appearance Theme File Editor Screen (January 11, 2023) ↩
- [9]Shopify Help Center, Editing theme code (October 10, 2026) ↩
- [10]Google Tag Manager Help (announcement), Updates to Google tag and Google Tag Manager (August 20, 2026) ↩
- [11]Google Tag Manager Help, Page view triggers (October 10, 2026) ↩
- [12]Google Ads Help, About Smart Bidding (October 10, 2026) ↩
- [13]WordPress.org Support Forums (user report, not official), New Version for Google Change? (site owner quoting Google's email) (August 20, 2026) ↩
- [14]Google Ads Help, Use a transaction ID to minimize duplicate conversions (October 10, 2026) ↩
- [15]Google Analytics Help, Minimize duplicate key events with transaction IDs (October 10, 2026) ↩
- [16]Search Ads 360 Help, Technical details for Google tag and event snippet (October 10, 2026) ↩
