Tag managers change _how_ tags load, not the consent model. Choose the loading
path before installing: the [configurator](https://demo.lightning-consent.io/)
can help, and [Choose your setup](/install/choose-setup/) gives the short
decision guide.

## Google Tag Manager

Use the [Google bridge](/integrations/bridges/#google-gtag--gtm) as the default
path: set `bridges.google.tagId: "GTM-…"` and let the CMP load the container so
the consent default is guaranteed before GTM boots. **Gate individual tags
inside GTM** via each tag's Consent Settings — never gate the container itself.
Confirm tags fire in **GTM Preview** after wiring it up.

```js
lightning("init", {
  bridges: { google: { tagId: "GTM-XXXXXXX" } },
});
```

Do not also paste a second GTM loader. If your platform must own the GTM
snippet, keep the inline Consent Mode default before it and omit `tagId`; see
[Google Consent Mode v2](/configure/consent-mode/).

## gtag.js / GA4 (no GTM)

Use `bridges.google.tagId: "G-…"` and the CMP loads gtag.js with correct
ordering. If you already hand-place gtag.js, omit `tagId`; Consent Mode signals
still flow via [`googleConsentMode`](/configure/consent-mode/).

## Cloudflare Zaraz

Relay CMP decisions into `zaraz.consent` so Zaraz-managed tools honour the same
choices.

:::note[More detail coming]
Full recipes are being migrated from `docs/INSTALL.md` § _“Tag-manager &
tag-router recipes.”_
:::