How to Check if Google Analytics is Installed
A complete walkthrough — from a 30-second page source check to network-level request inspection — for verifying your GA4 tracking code is live, firing correctly, and not duplicating data.
There are five reliable ways to confirm GA4 is installed:
- Search the page source for your Measurement ID (G-XXXXXXXX)
- Inspect Network requests in Chrome DevTools for /g/collect calls
- Check the GA4 Realtime Report for live hits
- Use GA4 DebugView for granular event-level confirmation
- Record a session with Google Tag Assistant
Use all five in combination. Each catches different failure modes. No single method is sufficient on its own.
01 Why This Check Matters
Before you can trust any report, any conversion figure, or any attribution model, you need to confirm that your GA4 tracking code is actually installed — and that it is installed correctly. This sounds obvious, but analytics audits consistently reveal that a large proportion of websites contain at least one tracking configuration issue.
The most damaging scenario is not a missing tag. It is a duplicate tag — one that inflates every metric silently while dashboards continue to populate with numbers that look plausible. Teams make budget decisions on that data. The errors compound.
View Page Source
The fastest first check for sites using a direct gtag.js installation. It will not reveal tags deployed through Google Tag Manager, but it immediately surfaces hardcoded snippets and — critically — duplicate Measurement IDs.
How to do it
- Open the page source — In Chrome or Firefox, press Ctrl+U (Windows) or Cmd+U (Mac). The raw HTML of the page opens in a new tab.
- Search for your Measurement ID — Press Ctrl+F and search for ‘G-‘ (the prefix of every GA4 Measurement ID). You can also search for ‘gtag/js’ or ‘googletagmanager.com/gtm.js’.
- Interpret the result — One match is correct. Zero matches means either GTM is being used or GA4 is not installed. Two or more matches of the same ID is a duplicate — fix immediately.
What a correct direct installation looks like
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXXX'); </script>
When page source shows nothing
If you find no ‘G-‘ reference, it does not necessarily mean GA4 is absent. Google Tag Manager deploys tags through JavaScript at runtime — they do not appear in the static HTML source. Search instead for ‘GTM-‘ or ‘googletagmanager.com/gtm.js’. If GTM is present, move to the network-level methods below.
Chrome DevTools Network Tab
This is the most reliable method and the one professional analytics auditors use as standard. It works regardless of whether GA4 is installed directly or through GTM, and it reveals duplicate tracking that the page source check cannot.
Step-by-step
- Open DevTools — Press F12 or Cmd+Option+I. Click the Network tab.
- Filter by ‘collect’ — In the filter bar, type ‘collect’. This surfaces only GA4 data collection requests, filtering out all other network activity.
- Reload the page — Hard reload with Ctrl+Shift+R to clear cache and trigger a fresh page load.
- Inspect the request — Look for a request to
https://www.google-analytics.com/g/collect. Click it and examine the Payload tab to confirm your Measurement ID and the event type.
Reading the request payload
// GA4 data collection endpoint https://www.google-analytics.com/g/collect?v=2&tid=G-XXXXXXXXXX // Key parameters to verify: v=2 // GA4 protocol version (must be 2, not 1) tid=G-XXXXXXXXXX // Measurement ID — confirm this matches your property en=page_view // Event name — should be page_view on load dl=https://... // Document location (full URL) dt=Page+Title // Document title gcd=11l3l3... // Consent Mode state string
Reading the Consent Mode GCD parameter
While in the Network tab, check the gcd= parameter. This tells you whether Consent Mode is active and what state it is in:
| Letter | Meaning | What to do |
|---|---|---|
| p | Granted by default | Consent was pre-granted before user interaction |
| r | Denied by default | Correct — user has not yet consented |
| l | Granted after interaction | User clicked Accept — consent updated correctly |
| m | Denied after interaction | User declined — cookieless ping is firing |
| X | Not set | Problem — that consent type was never declared |
If gcd= is absent entirely, Consent Mode is not implemented on this site.
GA4 Realtime Report
The Realtime report in GA4 confirms that data is arriving at the property — not just that a request was sent from the browser. A network request can be sent but rejected if the Measurement ID is wrong, the property is disabled, or the data stream is misconfigured.
How to use it
- Open GA4 and navigate to Realtime — In Google Analytics, go to Reports > Realtime. This shows live activity in the last 30 minutes.
- Load a page on your site — Open your website in a separate tab or window. Navigate through a few pages to generate events.
- Confirm data arrives — Within 5–10 seconds, you should see your session appear. The Event Count panel should show page_view events incrementing.
GA4 DebugView
DebugView is a real-time event stream from a single device that shows every event, every parameter, and the exact sequence in which they fire. It is the most granular verification tool available and the one to use when checking custom events, parameter values, and ecommerce data.
How to enable it
- Via Google Tag Assistant: Install the Chrome extension and click ‘Connect’. This automatically enables debug mode for your browser session without any code changes.
- Via GTM Preview Mode: Launch GTM Preview Mode on your site. This activates debug mode automatically and sessions will appear in DebugView.
- Via URL Parameter: Append
?gtm_debug=xto your URL. Works if GTM is installed, even without the browser extension. - Via GA4 Admin: Navigate to Admin > DebugView. Once a debug session is active in the browser, events stream in live under your device.
What to look for in DebugView
A clean, correctly installed GA4 property on a standard page load shows exactly this event sequence: one page_view, followed by a user_engagement event as the user interacts. Every custom event you trigger — a button click, form submission, product view — should appear within 2–3 seconds.
Common problems visible in DebugView: duplicate page_view events firing on a single load, events missing expected parameters (appearing with (not set) values), and events firing on page load when they should only fire on interaction.
Google Tag Assistant
Google Tag Assistant records an entire user session and produces a tag-by-tag report of what fired, what did not, and what errors were detected. It is particularly useful for auditing checkout flows, multi-step forms, and ecommerce funnels.
- Install the Chrome extension — Search ‘Google Tag Assistant’ in the Chrome Web Store and install it.
- Start recording — Navigate to your website. Click the Tag Assistant icon and select Record. A new browser window opens connected to your site.
- Complete the user journey — Navigate through the pages and interactions you want to audit — add a product to cart, complete a form, move through the checkout.
- Review the report — End the recording and review which tags fired on each page. GA4 tags should fire once per page. Red or orange indicators signal errors.
Duplicate Tracking
Duplicate tracking is the single most common GA4 implementation error. It inflates page views, sessions, and events — making all downstream analysis unreliable — while producing no obvious error messages. The numbers still look reasonable, which is what makes it so dangerous.
The most common causes
| Cause | How it happens | Detection method |
|---|---|---|
| CMS plugin + GTM both active | A WordPress plugin injects GA4 directly while GTM also fires a GA4 tag | Page source shows both gtag/js?id= and gtm.js |
| Two GA4 Config Tags in GTM | Someone added a second Configuration Tag without removing the first | GTM Preview Mode shows two GA4 config tags firing |
| Enhanced Measurement + GTM page_view | Enhanced Measurement auto-fires page_view, and GTM also has a page_view tag | DebugView shows two page_view events per navigation |
| Legacy UA tag pushing to GA4 | Old Universal Analytics tag was converted but original GA4 tag remained | Two /g/collect requests in DevTools Network tab |
| Tag set to ‘Once per Event’ | Tag fires multiple times when its trigger event fires more than once | GTM Preview Mode shows same tag firing 2+ times |
What duplication does to your data
Quick Verification Checklist
Run through this checklist after any new GA4 installation, after a website redesign, after adding or changing a CMS plugin, or when you notice unexpected data anomalies.
Installation confirmed
- Page source contains one instance of the correct Measurement ID (or GTM container ID)
- Chrome DevTools Network tab shows exactly one /g/collect request per page load
- GA4 Realtime Report shows live sessions when browsing the site
- DebugView shows page_view firing once per page, not twice
- Tag Assistant records confirm GA4 tag fires on all key pages
No duplicates
- Only one GA4 Configuration Tag exists in the GTM container
- Enhanced Measurement page_view toggle is OFF if GTM has a custom page_view tag
- No CMS plugin is injecting GA4 alongside GTM
- Realtime Report does not show two page_view events per navigation
Data arriving correctly
- Measurement ID in network requests matches the property’s Measurement ID exactly
- page_location parameter contains the full URL with protocol (https://)
- page_title is populated and matches the page’s actual title tag
- Custom events fire on interaction, not on page load
- Consent Mode gcd= parameter is present and shows no X values
Settings confirmed
- Data retention is set to 14 months (not the 2-month default)
- Timezone and currency match your business settings
- Internal traffic filter is active
- Referral exclusions include your payment gateway domains
Part of the Complete GA4 Audit Guide · Implementation · Configuration · Data Validation · Consent Mode
