A common set-up is a Zoho Form embedded on a website with hidden UTM fields, where the organisation fills in its own values for internal lead-source reporting. If the Advanced Tracking code is also installed on that site, the hidden values can be replaced when the form is submitted, even on a direct visit. This article explains what happens, why, and the options for avoiding it.
A form contains a hidden utm_medium field that has been left blank, or set to a custom value, deliberately. The Advanced UTM Tracking code is installed on the page. A visitor loads the page directly, with no UTM parameters in the address and no referring page, and submits the form. The entry arrives with utm_medium set to referral instead of the intended blank or custom value.
This is how the Advanced Tracking code is designed to work. When the page is opened directly and there is no utm_medium value to read, the code falls back to a default, so that every entry has a source recorded. The fallback labels the visit as a referral. Zoho's own description of the behaviour is in its guidance on auto-tracking with the document referrer.
If you want UTM values captured only when they are present in the page address, use the basic tracking code instead of the advanced one. With the basic code, a direct visit with no UTM parameters is not given a default value.
| Option | Effect | Source |
|---|---|---|
| Use the basic tracking code | UTM values are captured only if they are in the page address. Direct visits are not labelled as referrals. | Zoho's recommendation |
| Keep the advanced code and accept the defaults | You also get Google Ads, search engine, and referral detection, but direct visits show as a referral. | Zoho's documented behaviour |
| Use a differently named hidden field for your own labels | Fields that are not one of the five standard UTM names are not part of the automatic tracking, so your value is not replaced. | Our suggestion. Zoho did not answer this part, so test it before relying on it. |
If you use the standard utm_ names for genuine campaign attribution, keep them for that. For internal lead-source labelling, such as tagging every entry that comes through a particular form, add a separate hidden field with its own name, for example internal_lead_source, and map it to the matching Zoho CRM field. That keeps your label and the tracking data apart, and means neither can overwrite the other.
For how the advanced code decides what to record, see Zoho Forms Advanced Tracking: Capturing UTM, Google Ads and Referral Sources.