Where did this lead come from?
AHA’s website leads reached Zoho with no record of the page they came from. How every lead now carries its page, its first page and a best time to call, and how ad tags will survive a second visit.
The problem
No website lead in Zoho could be traced to the page it came from.
The solution
Every form now sends its page, the visit’s first page and a callback time; 90-day ad tags are going live.
A lead without a source is a phone number and a guess. In October I found that AHA’s two Zoho fields for the page a lead came from were blank on every website lead. No lead could be traced to a page.
It wasn’t the only gap I found that autumn:
- Ad tags didn’t survive a second visit. UTM tags and Google’s click ID lived in session storage, so an ad visitor who came back in a new tab arrived as a stranger. Almost every lead credited to the website had no tags and no click ID.
- The click ID went to the wrong field. Forms wrote it to a custom field. Zoho’s standard GCLID field, the one its Google Ads integration and offline conversion uploads read, was empty on every lead.
- Zoho had a “Preferred Time For Callback” field. No form sent it.
- Phone taps weren’t counted. The GA4 key event for calls had recorded nothing for 28 days, and the event that did fire wasn’t a key event.
Every lead records its page
Every visit now stores its first page. All seven forms add two fields to the end of the lead: the page the form was sent from, without the query string, and the first page of the visit. Both are cut to Zoho’s 255-character limit.
One field was left out on purpose. Zoho also has a URL-type field, but a bare path fails its URL validation, and that could make Zoho refuse the whole lead.
I had Claude Code test nine form placements against five kinds of visit: direct, tagged, an organic landing on a blog post, a tagged landing on another page, and a visit that began before the change. 45 of 45 sent one lead with both fields right. Against the previous build, every payload was identical apart from the two new fields. It went live on 24 October.
Tags that survive a second visit
The tag fix is built and tested, and going live now, so there are no results to report yet. The rule it implements:
// Which source a lead carries (simplified)
source = tagsFromThisVisit // first tagged page of the visit wins
?? savedTags({ maxAgeDays: 90 }) // restored on an untagged return
?? fromReferrer(); // e.g. "google / organic"
- One capture script, inlined everywhere, replaces six hand-kept copies.
- A newer tagged visit replaces saved tags. A tag saved 100 days ago is dropped.
- Every form sends the click ID to Zoho’s standard field as well as the custom one.
- Untagged visits get a source from the referrer: a search engine becomes organic, no referrer becomes direct, and social networks and other sites, AI assistants included, are recorded by name. Lead Source itself doesn’t change.
The tag tests passed 34 of 34 in each of Chrome, Firefox and Safari’s engine, and the referrer cases 36 of 36. One known limit: Safari on iPhone can clear saved tags after seven days without a visit.
The new Ads landing page, /top-home-automation-companies, sends the same page, tag and callback fields, and is going live the same way.
Ask when to call
The callback field became an optional dropdown on all seven forms, with four slots that match the experience centres’ hours: 11am to 1pm, 1pm to 4pm, 4pm to 7pm, or any time. Optional, because every required field costs leads.
After it shipped, a test lead read back from Zoho with “4pm to 7pm”. The sales team’s WhatsApp alert now shows the slot too, and the first real enquiry to use it asked for 11am to 1pm. Testing this also exposed two Ads forms that couldn’t submit at all, which is its own story.
Count the taps
Calls and WhatsApp chats are enquiries too. One listener now catches every call and WhatsApp link and pushes a contact_click event with the method, where on the page it sat (floating button, footer, form) and the page path. GA4’s key events are now generate_lead and contact_click, and the old tap events were unstarred, because each tap fired both and would have counted twice. Counts before and after 22 September aren’t comparable, and I logged it that way.
Rules
- A tracking field must never be able to lose the lead.
- Record the first page of the visit, not just the last.
- Write the click ID where the integration reads it.
- Optional beats required. Ask what helps the call, not the report.
- When you change what’s counted, date it.