You open Google Analytics. Traffic is up. Organic search is bringing visitors. People are spending time on your service pages. Great. Then somebody asks a very simple question: “How many actual enquiries did the website generate?” And suddenly the dashboard gets a little less impressive. You can see sessions. You can see users. You can see landing pages. But can you tell which visitors filled in the contact form? Which office they contacted? Which service they were interested in? Who clicked a phone number instead of submitting a form? For a lot of service businesses, the answer is still no. I recently worked on exactly this type of problem for a multi-location professional services website. The business did not need another pretty analytics dashboard. It needed to know where its leads were actually coming from. That is where proper Google Tag Manager conversion tracking makes a huge difference.
Traffic is useful. Leads pay the bills.
One of the biggest mistakes I see in website reporting is treating traffic growth as the end result. Traffic matters. Rankings matter. Visibility matters. But they only become commercially interesting when they help generate something meaningful. For a service business, that might be:
- a contact form submission
- a consultation booking
- a phone call
- an email enquiry
- a WhatsApp conversation
- a quote request
If those actions are not being measured properly, your marketing report is missing the most important part of the story. You might know that 2,000 people visited the site. You still do not know whether they produced 2 enquiries or 50.
“But GA4 is already installed.”
This is another common situation. Google Analytics 4 is installed. Google Tag Manager is installed. Maybe Search Console is connected too. So everyone assumes lead tracking must already be working. Not necessarily. GA4 is event-based. It only knows about the meaningful actions you successfully send to it. Google recommends the generate_lead event when someone submits a form or request for information. But having GA4 installed does not automatically mean your important website actions are being measured in the way your business needs. That is why I prefer to start conversion-tracking projects with an audit rather than immediately creating more tags.
Step one: find out what is already being tracked
Before adding anything, I want to know what is already happening. That usually means reviewing:
- GA4 installation
- Google Tag Manager containers
- existing event tags
- form triggers
- old conversion tags
- duplicate page views
- click tracking
- WordPress plugins
- booking systems
- contact forms
- phone links
- email links
- WhatsApp buttons
- consent configuration
Why bother? Because adding new tracking on top of broken or duplicated tracking can make the data even worse. Imagine one person submits a form and GA4 records two leads. Now your conversion rate looks better. Your SEO looks better. Your campaign looks better. Unfortunately, none of it is real. Good analytics starts with trustworthy data, not more data.
Not every click is a lead
This sounds obvious, but it causes a surprising amount of bad re For this type of setup, I like to keep event names simple and meaningful. Used when a genuine lead is successfully submitted. For example: Used when someone clicks a clickable phone number. Used for Used when someone starts the WhatsApp contact journey. Used for important calls to action that show intent but do not complete a lead. This gives you much cleaner reporting than throwing everything into one generic “conversion” bucket.The event structure we built
generate_lead
phone_click
email_click
mailto: links.whatsapp_click
cta_click
Confirmed leads
A successful contact form submission. A completed booking enquiry.
Contact intent
A phone-number click. An email-address click. A WhatsApp click.
Funnel activity
A visitor clicking “Book Now” or “Get in Touch”. That distinction matters. Otherwise a business might report 80 “leads” when it really had:
- 15 successful forms
- 5 bookings
- 30 phone clicks
- 20 email clicks
- 10 CTA clicks
Those are all useful actions. They are not all the same thing.
Successful form tracking is where things get interesting
Form tracking sounds simple. Someone clicks Submit. Fire an event. Done. Except that is often the wrong way to do it. A person can click Submit and still:
- leave a required field empty
- enter invalid information
- hit a validation error
- experience a failed AJAX request
- fail to complete the submission
If your lead event fires when the button is clicked, you can end up recording leads that never existed. Google Tag Manager supports form triggers, but Google also documents custom-event triggers for situations where the form’s default submission behaviour has been altered. That matters because modern WordPress forms commonly use JavaScript or AJAX. In our case, the reliable approach was to listen for the form system’s successful completion event and then push a clean event into the data layer. Conceptually, it looked like this:
Visitor submits form
↓
Form validates successfully
↓
Form confirms successful submission
↓
Success event reaches the data layer
↓
Google Tag Manager fires
↓
GA4 receives generate_lead
That one difference—tracking success instead of button clicks—can completely change the quality of your lead data.
And yes, we deliberately tested a failed form
This is one of my favourite QA checks. We submitted an incomplete form on purpose. Required fields were left empty. What should happen? Nothing. No lead. No generate_lead. No fake conversion. That test passed. It might sound like a small detail, but that is exactly the kind of detail that separates useful analytics from a dashboard you cannot trust.
One form can represent different types of leads
Another challenge comes when the same form system appears in multiple places. For example:
- Contact page
- Booking page
- Location page
The technology may be the same. The business meaning is not. A booking enquiry should not necessarily be reported exactly like a general contact request. So instead of creating random event names for every page, we can keep the main event consistent:
generate_lead
Then add context:
lead_type = contact_form
or:
lead_type = booking
Now GA4 can report all leads together when management wants the big number, while still allowing deeper analysis when we need it.
Multi-location businesses need another layer
Now imagine your company has several offices. A website lead without location attribution is only half useful. Management may want to know:
- Which office generates the most enquiries?
- Which office gets more phone clicks?
- Which location performs best from Organic Search?
- Which office pages convert?
- Which location needs more SEO work?
That means your tracking needs an office value. For example:
office = location_a
office = location_b
office = international
But there is an important rule here: Never invent attribution just to make a report look complete. If you cannot reliably identify the office, use something like:
unassigned
Incorrect data is worse than incomplete data.
Shared contact details can create a nasty attribution problem
Here is a real-world example of why tracking needs business logic, not just tags. Imagine two offices use the same email address. Your email lookup says:
contact@example.com = office_a
Now someone clicks that email from Office B’s section. GA4 says Office A generated the contact. Technically, your tracking fired perfectly. Commercially, your report is wrong. This is why we added guard logic to prevent a shared address from being falsely attributed to another office. When attribution was uncertain, it became:
office = unassigned
rather than pretending we knew. That small decision protects every office-level report built later.
Phone tracking has its own problems
Phone numbers are another important conversion path for service businesses, especially on mobile. Google Tag Manager can listen for link clicks, including clickable links such as tel: links. But phone links are not always formatted consistently. You might find:
tel:02071234567
on one page and:
tel:0207 123 4567
somewhere else. You may even encounter encoded characters. If you send those raw values straight into analytics, the same phone number can appear as several different values. So we normalised the numbers before reporting them. The aim is simple: one real phone number = one reporting value We also kept phone clicks separate from confirmed leads. Someone clicking a number shows strong intent. It does not prove the call connected. Again: useful data, correctly labelled.
Email and WhatsApp clicks deserve the same treatment
A mailto: click can show that someone intends to contact the business. A WhatsApp click can show the same thing. Both are valuable. Neither automatically proves an enquiry happened. Our reporting model therefore keeps these interactions visible without pretending they are successful form leads. That gives management a much more useful picture: Primary Leads
- Contact forms
- Booking enquiries
Contact Intent
- Phone clicks
- Email clicks
- WhatsApp clicks
Funnel Engagement
- CTA clicks
Now your numbers actually mean something.
Service attribution turns analytics into an SEO tool
This is where the setup becomes particularly useful for SEO. Imagine someone enters the site through a payroll page and then submits an enquiry. You want to know that payroll content generated business activity. The same applies to:
- tax services
- bookkeeping
- company formation
- compliance
- advisory services
- other commercial pages
So we pass a standardised service value with relevant events. Instead of inconsistent labels such as: “Payroll” “payroll services” “Payroll-Service” we use one value:
payroll
That consistency makes GA4 reporting far easier.
Landing page and conversion page are not always the same
This is another reporting mistake worth avoiding. A visitor might:
- Search Google
- Land on a service page
- Read the page
- Visit the About page
- Open Contact
- Submit the form
The contact page is where the conversion happened. But the service page may be what earned the visit. Both matter. This is why a mature SEO report should look beyond: “Which page contained the form?” and also ask: “Which landing page started the journey that produced the lead?” That changes how you evaluate SEO content.
QA is not optional
Google explicitly recommends testing tags in Tag Manager’s Preview mode before publishing, and GA4 provides Realtime and DebugView for validating events and parameters. Our QA process covered things like:
- successful form
- failed form
- booking enquiry
- phone link
- email link
- office attribution
- service attribution
- duplicate events
- phone normalisation
- GA4 DebugView
We even found tracking behaviour during QA that needed investigation before the configuration was allowed anywhere near production. That is exactly why Preview exists. Do not build ten tags and immediately press Publish.
What can the business understand after this setup?
Once clean data starts collecting, reporting becomes much more useful. Instead of saying:
Organic traffic increased by 18%.
you can eventually say things like:
Organic Search generated 24 confirmed enquiries this month.
Or:
Service A receives less traffic than Service B but converts visitors at a higher rate.
Or:
Location A gets most of its enquiries through phone clicks, while Location B generates more completed forms.
Or:
This landing page receives strong organic traffic but almost no contact activity.
That last one is particularly useful. Because now SEO and conversion optimisation can work together.
The report I actually want to see
For a service business, I would rather see this:
| Landing Page | Organic Sessions | Form Leads | Bookings | Phone Clicks | Email Clicks |
|---|---|---|---|---|---|
| Service A | 520 | 12 | 4 | 18 | 6 |
| Service B | 410 | 3 | 1 | 5 | 2 |
| Service C | 180 | 9 | 2 | 7 | 4 |
than fifty slides about rankings. Why? Because this immediately creates questions worth answering. Why does Service C convert so well? Can we increase its organic visibility? Why is Service B attracting traffic without enquiries? Does its content match search intent? Is the CTA weak? Is the service offer unclear? That is where analytics stops being reporting and starts becoming decision-making.
Google Tag Manager conversion tracking is not just a technical task
It is easy to think this work is about: tags, triggers, variables, events, and data layers. Technically, it is. But the real job is translating how a business receives enquiries into something analytics can understand. You have to decide: What counts as a lead? What only shows intent? Which office owns it? Which service generated it? What happens when attribution is uncertain? What should happen when a form fails? How do we prevent duplicates? Those are business questions first. The GTM configuration comes afterwards.
Is your website measuring enquiries properly?
Here is a quick check. Open your analytics and see whether you can confidently answer these questions:
- How many confirmed website enquiries did we receive last month?
- Which ones came from Organic Search?
- Which services generated them?
- Which landing pages generated them?
- Which office received them?
- How many visitors chose phone instead of a form?
- Are booking enquiries separated from general contacts?
- Are failed forms being counted as leads?
- Can you prove one interaction only creates one conversion?
If several answers are “I’m not sure”, your website probably has a measurement gap. And that gap matters more than another vanity metric.
Final thought
I am a big believer in SEO reporting. But I do not want SEO reporting to stop at: rankings → clicks → sessions The useful journey is: Search → Landing Page → Service → Contact Intent → Lead When that chain is measurable, you can finally see which parts of your website are contributing to real business opportunities. That is when GA4 and Google Tag Manager become more than analytics tools. They become part of how you make better marketing decisions.
