A complete walkthrough for wiring up Google Tag Manager, GA4 and Google Ads conversion tracking on constructonik.com — written so you can follow it with zero prior experience.
Site · constructonik.comTools · GTM + GA4 + Google AdsTime · ~60–90 min
Read this first
Constructonik.com is a React app that never fully reloads the page when you click between sections. Normal Google Analytics only counts a visit when the page reloads — so without Step 4 below, you will see one pageview per person no matter how many pages they browse. Do not skip Step 4.
BEFORE YOU START
What you'll need open
Have these ready in browser tabs before you begin — it saves a lot of back-and-forth.
A Google account with access to constructonik.com's website files (or someone who can paste code for you)
ads.google.com — Google Ads (only needed from Part 5 onward)
Google Tag Manager (GTM)
A single box you install on your site once. After that, you add and manage all your tracking (Analytics, Ads, etc.) from a web dashboard — no more editing website code every time you want to track something new.
GA4 (Google Analytics 4)
The tool that actually records and reports on visits, clicks and behaviour. GTM is the delivery van; GA4 is the warehouse that stores what arrives.
Conversion
Any action you care about — a form submission, a phone call click, a "thank you" page view. Google Ads needs to know when these happen so it can optimise your ad spend toward getting more of them.
Trigger
The rule that tells a tag when to fire. "All Pages" means "every time someone loads or navigates to a page."
A popup titled "Install Google Tag Manager" showing two grey code boxes. Keep this window open — you need both boxes in the next step.
1.2
Save your Container ID
1 minute
At the top right of the GTM screen, you'll now see a code that looks like GTM-XXXXXXX. Write this down — you'll need it if anyone else has to find your container later.
Under the Account column, click Create Account if you don't have one — name it Constructonik.
Under the Property column, click Create Property.
Property name:constructonik.com. Set your time zone (Eastern Time — US) and currency (USD).
Fill in the basic business details when asked (industry: Home & Garden or Construction, business size, and how you intend to use Analytics — tick Generate leads).
Click Create.
2.2
Create the Web data stream and get your Measurement ID
5 minutes · this is the ID Part 6 asked for
Still in Admin, under the Property column, click Data Streams.
Click Add stream → Web.
Website URL:https://constructonik.com
Stream name:Constructonik Website
Click Create stream.
What you should see
A screen showing your new stream with a Measurement ID that looks like G-XXXXXXXXXX. Copy this — you'll paste it into GTM in the next part.
Click the pencil icon next to "Untitled Tag" and rename it: GA4 - Google Tag - All Pages
Click the Tag Configuration box.
Choose Google Tag from the list.
Paste your Measurement ID (G-XXXXXXXXXX) from Step 2.2 into the field.
Click the Triggering box below it.
Choose Initialization - All Pages.
Click Save (top right).
Do not publish yet
You'll see a blue Submit button — ignore it for now. We test everything first, and Part 4 below is not optional for this particular site.
PART 4 · SITE-SPECIFIC
Fix pageview tracking for the React app
This part is not in a generic GTM tutorial because most sites don't need it. Constructonik.com does, because it's a Single Page Application (SPA) — the browser loads once, then React swaps content in and out without a real page reload. Skip this and GA4 will only ever see one pageview per visitor, however many pages they actually look at.
4.1
Understand the problem in one sentence
Regular websites: click a link → browser reloads → GA4 tag fires again automatically. This site: click a link → React quietly swaps the content → the browser never reloads → the GA4 tag never fires again.
4.2
Ask your developer to send a signal on every route change
Developer task · ~15 minutes of code
Whoever maintains the React code needs to add a small snippet that tells GTM "the page changed" every time the URL changes. Send them this:
src/App.jsx (or wherever routing lives)
import { useEffect } from'react';
import { useLocation } from'react-router-dom';
functionusePageViewTracking() {
const location = useLocation();
useEffect(() => {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'virtual_page_view',
page_path: location.pathname + location.search,
page_title: document.title
});
}, [location]);
}
// Call usePageViewTracking() once near the top of your root component
This pushes a message into GTM every single time the visible page changes — even though the browser itself hasn't reloaded.
If your developer already uses a router other than react-router-dom, the idea is identical: hook into whatever fires when the route changes, and push the same dataLayer event.
4.3
Create a trigger in GTM that listens for that signal
Status shows Connected, with the Constructonik GA4 property listed.
PART 6
Prepare Google Ads conversion tracking
6.1
Add the Conversion Linker tag
3 minutes
This is a small, "always-on" tag Google Ads needs in order to accurately match clicks to conversions later. Add it once, now, before you build any individual conversion actions.
In GTM, click Tags → New.
Name it: Google Ads - Conversion Linker - All Pages
Tag Configuration → choose Conversion Linker.
Triggering: choose All Pages.
Click Save.
6.2
What comes next, once this is live
Individual conversion actions get added on top of this foundation. For a home builder, the ones worth setting up first are:
Action
How it typically fires
Contact form submission
Trigger on arriving at your "thank you" page, or on a form's success event
Phone number click
Trigger on clicking any tel: link (common on mobile)
"Request pricing" / model enquiry
Trigger on that specific form's success event
Brochure / spec sheet download
Trigger on clicking a link ending in .pdf
Each of these needs its own small tag once you know which actions matter most — that's a short follow-up task once tracking is live and we can see real form/button names in GTM's Preview mode.
PART 7
Test everything before publishing
7.1
Turn on Preview mode
2 minutes
In GTM, click Preview (top right).
Type https://constructonik.com and click Connect.
A new tab opens with your site, plus a "Tag Assistant" panel connected to it.
7.2
Click around and watch what fires
10 minutes · the important part
On first load, confirm GA4 - Google Tag - All Pages and Google Ads - Conversion Linker - All Pages both show as Fired in the Tag Assistant panel.
Now click through to a couple of different sections of the site — a model page, then Contact — without refreshing the browser.
Each time, confirm GA4 - Pageview - Route Change fires in the panel. This is the check that proves Part 4 is working — if it doesn't fire here, GA4 will undercount every visit once this goes live.
Submit any test forms you have and confirm the events you expect show up.
If the route-change tag never fires
Either the developer's code from Step 4.2 isn't in place yet, or the event name doesn't match exactly (virtual_page_view, no typos, no capital letters). Check the browser console for errors before assuming GTM is at fault.
While still clicking around your Preview tab, confirm you see yourself as an active user, and that each page you visit shows up.
PART 8
Publish
8.1
Go live
2 minutes · only once Part 7 is fully green
Close the Preview tab and return to GTM.
Click Submit (top right).
Click Publish and Create Version.
Version name:Initial GA4 & Google Ads Tracking Setup
Click Publish.
You're live when
GTM is installed on the site, GA4 is receiving both first-load and route-change pageviews, Analytics and Ads are linked, and the Conversion Linker is running site-wide.
What happens after this
The foundation above gets tracking running correctly. The next session is about deciding and building the specific things you want Google Ads to count as a win:
01 Confirm the exact form(s) and button(s) on the live site — names, IDs, thank-you page URLs.
02 Build one Google Ads conversion action per goal (form submit, phone click, PDF download).
03 Add one GTM tag + trigger per conversion action, using the same Preview-then-Publish process above.
04 Let data collect for 1–2 weeks before judging performance — GA4 and Ads need a short runway to start reporting reliably.
One dependency worth naming: this whole setup assumes constructonik.com is reachable and rendering — see the site's SEO/AEO audit for the separate rendering-fix work in progress. Analytics will track whatever the site currently shows visitors, shell or otherwise; it doesn't fix or depend on the rendering issue, but the two projects are running in parallel and both matter for the same reason — knowing what's actually happening on the site.