For dummies · Analytics & Ads tracking setup

Google Tag ManagerStep by step, no jargon

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.com Tools · GTM + GA4 + Google Ads Time · ~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.

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."
PART 1

Create your GTM container

1.1

Sign up and create a container

5 minutes
  1. Go to tagmanager.google.com and sign in with your Google account.
  2. Click Create Account.
  3. Account Name: type Constructonik.
  4. Country: United States.
  5. Container name: type constructonik.com.
  6. Target platform: choose Web.
  7. Click Create, then accept the Terms of Service.

What you should see

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.

PART 2

Create your GA4 property

2.1

Create the GA4 property

5 minutes
  1. Go to analytics.google.com.
  2. Click Admin (gear icon, bottom left).
  3. Under the Account column, click Create Account if you don't have one — name it Constructonik.
  4. Under the Property column, click Create Property.
  5. Property name: constructonik.com. Set your time zone (Eastern Time — US) and currency (USD).
  6. 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).
  7. Click Create.
2.2

Create the Web data stream and get your Measurement ID

5 minutes · this is the ID Part 6 asked for
  1. Still in Admin, under the Property column, click Data Streams.
  2. Click Add streamWeb.
  3. Website URL: https://constructonik.com
  4. Stream name: Constructonik Website
  5. 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.

PART 3

Add the GA4 tag inside GTM

3.1

Create the Google Tag

5 minutes
  1. Back in tagmanager.google.com, open your constructonik.com container.
  2. Click Tags in the left menu.
  3. Click New (top right).
  4. Click the pencil icon next to "Untitled Tag" and rename it: GA4 - Google Tag - All Pages
  5. Click the Tag Configuration box.
  6. Choose Google Tag from the list.
  7. Paste your Measurement ID (G-XXXXXXXXXX) from Step 2.2 into the field.
  8. Click the Triggering box below it.
  9. Choose Initialization - All Pages.
  10. 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';

function usePageViewTracking() {
  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

5 minutes
  1. In GTM, click Triggers in the left menu.
  2. Click New.
  3. Name it: Virtual Pageview - Route Change
  4. Click Trigger Configuration → choose Custom Event.
  5. Event name: type exactly virtual_page_view (must match the code above precisely).
  6. Leave it set to fire on All Custom Events.
  7. Click Save.
4.4

Make a second GA4 tag that fires on that trigger

5 minutes

Your first GA4 tag (Part 3) fires once, on the very first load. This one fires every time someone navigates afterwards.

  1. Click TagsNew.
  2. Name it: GA4 - Pageview - Route Change
  3. Tag Configuration → choose Google Analytics: GA4 Event.
  4. Configuration Tag: select the GA4 - Google Tag - All Pages tag you made in Part 3, from the dropdown.
  5. Event Name: type page_view
  6. Under Event Parameters, add two rows:
    • page_path{{Page Path}} (create this variable if prompted, using a Data Layer Variable named exactly page_path)
    • page_title{{Page Title}} (same idea, Data Layer Variable named page_title)
  7. Triggering: choose the Virtual Pageview - Route Change trigger you just built.
  8. Click Save.

What "done" looks like

Two GA4-related tags now exist: one fires on the very first load, one fires on every route change afterwards. Together they cover the whole visit.

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.

  1. In GTM, click TagsNew.
  2. Name it: Google Ads - Conversion Linker - All Pages
  3. Tag Configuration → choose Conversion Linker.
  4. Triggering: choose All Pages.
  5. 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:

ActionHow it typically fires
Contact form submissionTrigger on arriving at your "thank you" page, or on a form's success event
Phone number clickTrigger on clicking any tel: link (common on mobile)
"Request pricing" / model enquiryTrigger on that specific form's success event
Brochure / spec sheet downloadTrigger 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
  1. In GTM, click Preview (top right).
  2. Type https://constructonik.com and click Connect.
  3. 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
  1. 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.
  2. Now click through to a couple of different sections of the site — a model page, then Contact — without refreshing the browser.
  3. 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.
  4. 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.

7.3

Confirm data is reaching Analytics

2 minutes
  1. Open analytics.google.com in another tab.
  2. Go to ReportsRealtime.
  3. 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
  1. Close the Preview tab and return to GTM.
  2. Click Submit (top right).
  3. Click Publish and Create Version.
  4. Version name: Initial GA4 & Google Ads Tracking Setup
  5. 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:

  1. 01 Confirm the exact form(s) and button(s) on the live site — names, IDs, thank-you page URLs.
  2. 02 Build one Google Ads conversion action per goal (form submit, phone click, PDF download).
  3. 03 Add one GTM tag + trigger per conversion action, using the same Preview-then-Publish process above.
  4. 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.