Most marketing websites have tracking. Very few have tracking anyone trusts.
The symptoms are familiar. The lead count in the analytics tool does not match the CRM. Nobody knows which form fires which event. Half the conversions are labeled "click" and the other half are labeled "click_2".
None of that is a tool problem. It is a setup problem. Here is the setup that works.
Start with two tools, not ten
You need Google Analytics 4 (GA4) and Google Tag Manager (GTM). That is the foundation.
GA4 is the measurement layer. It records what visitors do. GTM is the deployment layer. It controls which tracking code loads, when it loads, and what data it sends.
The separation matters. When every pixel and script is hard-coded into your site, every tracking change becomes a developer ticket. When everything runs through GTM, changes ship in minutes and every tag lives in one place with a version history.
The base setup:
- One GTM container on every page of the site, in the head, no exceptions.
- One GA4 property, with the GA4 configuration tag deployed through GTM.
- Ad platform pixels (Google, Meta, TikTok) deployed through GTM as well, never pasted into page templates.
- A written record of what lives in the container and why.
If your tracking code is scattered across page templates, plugins, and a theme file someone edited in 2022, consolidating into GTM is the first job.
Track outcomes, not activity
GA4 records plenty out of the box. Page views, scrolls, outbound clicks. Almost none of it tells you whether the site is doing its job.
The conversion events that matter are the ones that mirror business outcomes. For most service businesses that list is short:
- Form submission, fired on successful submit, not on button click. A click event fires even when validation fails and the form never sends. Fire on the confirmation state, the thank-you page, or the success response from the form handler.
- Phone call, from click-to-call links on mobile and from call tracking numbers (more on that below).
- Booking completed, if you use a scheduler like Calendly or a booking page. Most schedulers can pass a completion event back to the parent page or redirect to a page you control.
- Email link click, as a secondary signal. Lower intent than a form, still worth counting.
Then mark those events as key events in GA4 and import them as conversions into your ad platforms. This is the step most setups skip, and it is the step that matters most. When Google Ads optimizes toward a page view because nobody wired up the real conversion, you pay for traffic instead of leads.
One test worth running today: submit your own form, then check whether the event shows up once, with the right name, in GA4. You will be surprised how often the answer is zero times or three times.
Handle consent before it handles you
Consent is not optional anymore. Privacy laws in Europe and a growing list of US states require you to ask before setting analytics and advertising cookies for visitors those laws cover.
The practical setup:
- A consent management platform (CMP) that shows the banner and records choices. Plenty of solid options exist at every price point.
- Google Consent Mode wired between the CMP and GTM, so your tags respect the visitor's choice automatically. Consent Mode tells Google tags whether they have permission to use cookies, and adjusts what they collect accordingly.
- Tags configured to wait for consent state instead of firing on page load.
Two failure modes to avoid. The first is the banner that blocks nothing, where tags fire before anyone clicks. That is compliance theater and regulators have noticed. The second is the over-blocked setup, where a misconfigured CMP silently kills all tracking for every visitor and the traffic report flatlines while nobody connects the two.
Test both paths. Accept the banner and confirm tags fire. Decline it and confirm they do not.
Give phone calls a paper trail
For a lot of businesses the best leads never touch a form. They call. If you do not track calls, your reporting undercounts your best channel and your ad platforms optimize toward the wrong one.
Two layers of call tracking:
- Click-to-call events. Every phone number on the site should be a tel: link, and tapping it should fire an event. This is free and takes minutes in GTM.
- Dynamic number insertion. A call tracking service swaps the displayed number per visitor session, so calls can be tied back to the source, campaign, and even the keyword that drove the visit. This is how a phone call becomes attributable data instead of a mystery.
One caution: keep your Google Business Profile number consistent. Use a tracking number as the primary and your real number as the secondary so your name, address, and phone listings stay aligned across the web.
Test the setup like it will break, because it will
Untested tracking is a rumor. The verification pass:
- GTM Preview mode. Walk through every conversion path and watch which tags fire on which triggers.
- GA4 DebugView. Confirm events arrive with the names and parameters you expect.
- Submit real test leads. Fill the form, click the number, book the meeting. Then find each one in GA4, in the ad platform, and in your CRM. The count should match at every stop.
- Test the consent paths. Accept and decline, in a private browser window each time.
- Recheck after every site change. Redesigns, new form plugins, and template updates are where tracking goes to die. A form plugin update that changes the success behavior can silently kill your conversion event for weeks.
Put a quarterly recheck on the calendar. Tracking decays. Someone edits a page, a plugin updates, a tag stops firing, and nobody notices until the monthly report looks strange.
Naming is the discipline that keeps it readable
Six months from now, someone will open your GTM container and try to understand it. Naming decides whether that takes ten minutes or two days.
Pick a convention and hold it:
- Tags: platform, then purpose.
GA4 - Event - form_submit.Meta - Pixel - Base Code. - Triggers: condition, then location.
Click - Phone Number - All Pages.Form Success - Contact Page. - Events: lowercase with underscores, matching GA4's own style.
form_submit,phone_click,booking_complete. NeverForm Submitin one place andform-submittedin another, because GA4 treats those as different events and your reporting splits in half. - Variables: prefixed by type, so
dlv - form_idreads as a data layer variable at a glance.
Write the convention down on one page. Every tag that enters the container follows it or gets renamed. This sounds fussy. It is the difference between a system a new hire can read and a junk drawer only one person understands, and that person eventually leaves.
The tracking layer is where results become visible
A site can look great and still be invisible to its own owner. Until conversion events mirror real business outcomes, every marketing decision downstream runs on guesses. This is the operational layer we keep pointing at across marketing systems and paid media: fix the layer underneath and the results compound.
If you suspect your setup has gaps, the fastest way to know is to have someone walk the whole path with fresh eyes. Our website audit covers exactly this, and the Performance Audit goes wider, tracing your tracking, reporting, and ad accounts end to end and handing you a dollar-weighted plan you keep either way.