What to Track Beyond UTMs: GCLID, FBCLID, Referrer, Landing Page, and Organic Source

Most marketers stop too early.
They add utm_source, utm_medium, and utm_campaign to a few campaign links, pipe those values into a form, and call the setup “attribution.”
I understand why. UTMs are familiar. They are easy to explain. They fit neatly into spreadsheets, dashboards, CRMs, and campaign naming conventions.
But UTMs are not the whole story.
They are the label you choose to put on a link. That is useful, but it is not the same thing as capturing the actual journey.
The problem shows up the moment the lead does something normal.
They click a Google ad with a gclid. They come back from Facebook with an fbclid. They first find you through an organic search where there are no manual UTMs. They visit a blog post first, convert on a demo page later, and arrive in your CRM with only a vague source field attached.
If all you track is the standard UTM set, you will miss a lot of the evidence.
That is why I like tracking beyond UTMs.
Not because I want more fields for the sake of more fields. I do not.
I want enough context to answer better questions when a real lead shows up.
Where did this person first come from? What ad platform generated the click? What page introduced them? What page converted them? Was this really direct traffic, or did we lose the campaign label somewhere? Was it organic search, organic social, paid traffic, referral, or something else?
Those questions are where attribution becomes useful.
UTMs are necessary, but they are not enough
The standard UTM fields still matter.
For most WordPress lead generation sites, I still want these in the form and CRM:
| Field | What it tells me |
|---|---|
utm_source | The platform, publisher, or traffic source you tagged |
utm_medium | The channel type, such as cpc, paid_social, email, or referral |
utm_campaign | The campaign name |
utm_term | The paid keyword or audience term, when useful |
utm_content | The ad, creative, CTA, variation, or placement detail |
That is the baseline.
If you are not capturing those, start there.
But there are two limitations with UTMs that I see over and over again.
First, UTMs only exist when someone remembered to add them to the URL.
Second, UTMs are only as good as the naming discipline behind them.
If the team tags one campaign as paid-social, another as paidsocial, another as facebook-paid, and another as meta, the data becomes noisy before it even reaches the CRM.
That is not a WordPress problem. That is a process problem.
The bigger issue is that some of the most important attribution signals are not manual UTMs at all. They are click IDs, referrers, landing pages, organic source fields, and traffic classification fields.
That is the layer I care about in this post.
The extra fields I actually want
If I were setting up a serious WordPress form today, I would not stop at five UTM fields.
I would send a stronger attribution record into the CRM.
Here is the practical version:
| Field group | Fields I would capture |
|---|---|
| Standard UTMs | utm_source, utm_medium, utm_campaign, utm_term, utm_content |
| Click IDs | gclid, fbclid, msclkid, and when relevant gbraid, wbraid, _fbc, _fbp |
| First-touch context | first_utm_source, first_utm_medium, first_utm_campaign, first_utm_term, first_utm_content |
| Referrer data | handl_original_ref, handl_ref, handl_ref_domain |
| Page context | handl_landing_page, handl_landing_page_base, handl_url, handl_url_base |
| Organic source | organic_source, organic_source_str |
| Traffic classification | traffic_source, first_traffic_source |
| Optional technical context | gaclientid, user_agent, handlID |
That may look like a lot at first glance.
In practice, it is just a better memory system.
UTMs tell me what the campaign link claimed.
Click IDs tell me which ad platform click I may need to reconcile later.
Referrer and page fields tell me what actually happened on the site.
Organic and traffic source fields help when no one tagged the link at all.
That is the point. I do not want one fragile source field trying to explain the whole lead journey by itself.
GCLID: the Google Ads field I do not want to lose
If you run Google Ads, gclid belongs in your forms.
GCLID stands for Google Click Identifier. In plain English, it is the click ID Google uses to connect an ad click back to Google Ads data.
The HandL GCLID Reporter docs explain why this matters: once GCLID is collected, it can be associated with campaign, ad group, creative, location, keyword, placement, device, ad network, and other Google Ads details.
That is a much richer trail than utm_source=google.
This does not mean UTMs are useless for Google Ads. I still like clean Google Ads UTMs. They make reporting easier, especially across tools that do not understand Google click IDs.
But if I have to choose between a lead record with only:
utm_source=google
and a lead record with:
utm_source=google
utm_medium=cpc
utm_campaign=brand-search
gclid=...
I want the second one every time.
The UTM values are human-readable.
The GCLID is the platform-level receipt.
That distinction matters when the lead becomes revenue and someone wants to know which campaign, ad group, or keyword actually helped create the opportunity.
In HandL UTM Grabber’s native shortcode documentation, gclid is included in the last-touch parameter list as the Google Ads click ID. The newer documentation also notes that GCLID is tracked by default, while wbraid and gbraid can be added as custom parameters when needed.
My practical recommendation:
If Google Ads is part of your acquisition mix, capture gclid by default. If your account or campaign setup relies on wbraid or gbraid, add those too.
Do not wait until after a revenue question appears to discover that the click ID never made it into the lead record.
FBCLID: useful, but I think about it differently
fbclid is Facebook’s click identifier.
It is not the same kind of reporting key as GCLID in every workflow, but I still like capturing it when Meta traffic is part of the picture.
The reason is simple: paid social attribution is messy.
People click, browse, leave, come back, switch devices, open Instagram, open Facebook, search the brand later, and eventually submit a form from a completely different session.
If you only capture manual UTMs, you are trusting that every Meta link was tagged correctly and that nothing happened later to blur the path.
The native shortcode docs include fbclid as the Facebook Ads click ID. There is also a custom-parameter doc for tracking fbclid, _fbc, and _fbp like other parameters when that is what your setup needs.
That is the kind of setup detail I do not want buried in someone’s memory.
If Facebook or Instagram ads are meaningful for the business, I want those fields available. They may not answer every attribution question by themselves, but they give me extra signal when I am trying to connect a lead back to paid social activity.
My practical recommendation:
Capture fbclid for Meta click context. If your implementation also needs _fbc and _fbp, add those as custom parameters and make sure the form or CRM handoff actually stores them.
And yes, still use UTMs.
I would rather have both a clean utm_campaign and the click-level identifier than one without the other.
MSCLKID and other paid click IDs
The same logic applies to Microsoft Ads.
The msclkid field is the Microsoft Ads click ID. HandL includes it in the native shortcode list alongside gclid and fbclid.
I see teams forget this because Google and Meta dominate the conversation. But if Microsoft Ads is driving valuable search traffic, the click ID deserves the same treatment.
My rule is straightforward:
If a paid platform can attach a click ID to the URL, and that click ID can help with attribution, reporting, offline conversion matching, or debugging, capture it.
You do not have to stare at it every day.
You just want it available when the revenue conversation gets serious.
Referrer: the field that saves you when UTMs are missing
Referrer data is one of the most underrated attribution fields.
It is not perfect. Browsers, privacy settings, redirects, apps, and cross-domain behavior can all affect referrer data.
But when UTMs are missing, referrer can be the difference between “unknown” and “this probably came from a specific source.”
The key is understanding that there are two useful referrer ideas:
| Field | What it tells me |
|---|---|
handl_original_ref | The original referrer, first touch |
handl_ref | The last-touch referrer |
handl_ref_domain | The last-touch referrer domain only |
The difference matters.
Imagine this path:
google.com -> /blog/best-crm-for-contractors -> /demo -> form submission
In that case, I want to know two things:
The original referrer was Google.
The last step before conversion may have been an internal page.
Those are different pieces of evidence. If I collapse them into one generic referrer field, I lose useful context.
The native shortcode docs list both the original referral field and the last-touch referral fields. The separate HandL parameter explanation gives a simple example: if someone comes from Google to page 1 and converts on page 2, the original referrer and landing page preserve the start of the journey, while handl_ref and handl_url describe the later conversion context.
That is exactly how I think about it.
handl_original_ref tells me where the story started.
handl_ref tells me what happened near the conversion.
Both are useful.
Landing page: the page that did the introduction
I care a lot about landing page.
Sometimes more than source.
That may sound odd, but hear me out.
If a lead record says:
utm_source=google
that is useful.
If it also says:
handl_landing_page=/blog/compare-crm-integrations
now I know which page introduced the visitor.
That changes the conversation.
Maybe a blog post is doing better acquisition work than the homepage. Maybe a comparison page is quietly producing high-intent leads. Maybe an old tutorial is attracting the exact buyer the sales team wants. Maybe the paid campaign is not the only reason the lead converted.
The landing page gives the source context a place to stand.
I usually want these fields:
| Field | What it tells me |
|---|---|
handl_landing_page | The first page the visitor landed on |
handl_landing_page_base | The base domain of the first landing page |
handl_url | The last-touch URL, often the conversion page |
handl_url_base | The base URL for the last-touch URL |
The distinction between first landing page and conversion page is important.
If someone first lands on a blog post and later converts on a pricing page, both pages matter.
The blog post may deserve credit for acquisition.
The pricing page may deserve attention for conversion.
If your CRM only records the final form page, you may under-credit the content that created the first serious visit.
If your CRM only records the first landing page, you may miss which page actually converted the lead.
Again, the answer is not to pick one.
Capture both.
Organic source: the answer when there are no campaign tags
Organic traffic is where many UTM-only setups start to look weak.
If someone clicks a Google search result, there may be no UTMs at all.
That does not mean the lead should become invisible.
HandL UTM Grabber has organic tracking fields for this:
| Field | What it tells me |
|---|---|
organic_source | The organic source href, such as a Google URL |
organic_source_str | The classified organic source, such as Google, Bing, Instagram, or LinkedIn |
The organic traffic docs describe these two fields directly, and the related organic tracking values page explains how sources are classified from referrer domains.
That source list is now broader than the old search-engine-only mental model. The docs include search engines, social platforms, and newer AI referral patterns such as OpenAI, Perplexity, Claude, Gemini, and Copilot.
That is worth paying attention to.
Organic discovery is no longer just “Google or nothing.”
People now arrive from search, social, community links, AI answer engines, newsletters, partner sites, and plenty of sources that do not always carry neat campaign tags.
If you only capture UTMs, those visits often land in a vague bucket.
If you capture organic source and referrer fields, you at least have a better fallback.
My practical recommendation:
Capture organic_source and organic_source_str on lead forms, especially if content, SEO, social, or AI referral traffic matters to your acquisition strategy.
And keep expectations realistic.
You are not going to get organic search keywords from Google the way people wish they could. In support conversations, I have had to say this many times: Google does not hand over organic keyword data in the same way paid search can pass keyword context.
But knowing that the lead came from Google organic, Bing organic, LinkedIn organic, or a referral source is still much better than calling it all direct or unknown.
Traffic source: the high-level classification field
The field I think more teams should use is traffic_source.
It gives a high-level classification such as:
- Paid
- Organic
- Social
- Direct
- Referral
- Other
The traffic source documentation says the traffic_source cookie was introduced to capture whether traffic is paid, organic, direct, referral, social, or another category. It is a last-touch attribute, and first_traffic_source is the first-touch version.
I like this field because it gives operators a usable summary.
A CRM record with traffic_source=Paid and utm_source=Google is easier to segment than a CRM record with a dozen raw fields and no clear channel label.
That does not mean I would only capture traffic_source.
I would treat it as the channel classification layer on top of the more detailed evidence.
For example:
| Field | Value |
|---|---|
traffic_source | Paid |
utm_source | |
utm_medium | cpc |
gclid | Present |
handl_url | /book-a-demo |
That is a much clearer lead record than:
source = Google
The first one tells me this was paid Google traffic with a click ID and a conversion page.
The second one forces me to guess.
HandL also has an Auto-Populate Source/Medium feature that can set utm_source and utm_medium based on detected traffic source and organic source string when manual UTMs are not present. I like that idea because it helps reduce blank source fields for organic and referral traffic.
But I would still store the underlying fields too.
Do not just store the cleaned-up answer.
Store the evidence behind the answer.
A practical example
Here is a common path:
Day 1:
A visitor clicks a Google ad and lands on:
example.com/contractor-crm?utm_source=google&utm_medium=cpc&utm_campaign=crm_search&gclid=abc123
They read the page and leave.
Day 4:
They return from a LinkedIn post with no UTMs, read a blog post, and leave again.
Day 9:
They search the brand name, land on the homepage, visit the pricing page, and submit a demo form.
If you only capture the visible URL at the moment of form submission, you may get almost nothing useful.
If you only capture standard UTMs, you may get the latest tagged campaign but miss important surrounding context.
The stronger lead record would include:
| Question | Field that helps answer it |
|---|---|
| What first introduced the person? | first_utm_source, first_utm_medium, first_utm_campaign |
| Was there a Google Ads click? | gclid |
| What was the first landing page? | handl_landing_page |
| What source brought them back later? | handl_ref, organic_source_str, traffic_source |
| What page did they convert on? | handl_url |
| Was this paid, organic, social, direct, or referral? | traffic_source, first_traffic_source |
That record does not make attribution perfect.
It makes the lead harder to misunderstand.
That is the real goal.
The fields I would send to the CRM
If I were starting from scratch, I would use a two-tier setup.
Tier one is the practical minimum.
| Field | Why I want it |
|---|---|
utm_source | Latest tagged source |
utm_medium | Latest tagged medium |
utm_campaign | Latest tagged campaign |
utm_term | Keyword, term, or audience detail |
utm_content | Creative, CTA, or variation detail |
gclid | Google Ads click ID |
fbclid | Facebook/Meta click ID |
msclkid | Microsoft Ads click ID |
handl_original_ref | Original referrer |
handl_landing_page | First landing page |
handl_ref | Last-touch referrer |
handl_url | Last-touch URL or conversion page |
organic_source_str | Organic/referral source label |
traffic_source | Last-touch channel classification |
Tier two is what I would add for stronger analysis.
| Field | Why I want it |
|---|---|
first_utm_source | Original tagged source |
first_utm_medium | Original tagged medium |
first_utm_campaign | Original tagged campaign |
first_utm_term | Original term |
first_utm_content | Original creative/content value |
first_traffic_source | First-touch channel classification |
handl_landing_page_base | First landing page domain |
handl_ref_domain | Last-touch referrer domain |
handl_url_base | Conversion URL base |
organic_source | Full organic source href |
gaclientid | Google Analytics client ID, when useful |
_fbc, _fbp | Meta browser/click context, when useful |
gbraid, wbraid | Google Ads identifiers, when needed |
handlID | HandL-generated unique ID |
That is more fields than many teams need to look at every day.
That is fine.
The CRM can show the most important fields to sales and keep the deeper fields available for reporting, debugging, exports, or offline conversion workflows.
The mistake is not having the data when you finally need it.
Where people usually break this setup
The most common failure is not that the data cannot be captured.
It is that the form never sends it anywhere.
The visitor arrives with UTMs, click IDs, referrer, landing page, and organic source context.
The browser stores the values.
Then the form submits only name, email, phone, and message.
At that point, the attribution exists somewhere in the browser but never reaches the lead record.
That is a broken handoff.
This is why I care so much about hidden fields and form integrations. Whether you use Contact Form 7, Gravity Forms, WPForms, Formidable, WooCommerce, a booking tool, or a CRM embed, the conversion form has to receive the attribution data before the lead leaves WordPress.
Another common mistake is using friendly labels as field names.
Do not name the hidden field:
Google Click ID
if the integration expects:
gclid
Use clean technical field names in the form. Make them pretty later in the CRM.
The third mistake is capturing last touch only and assuming that explains acquisition.
It does not.
If someone first arrived from a Meta campaign and converted later from branded Google search, last touch alone can make the original acquisition channel disappear.
That is why I like pairing standard fields with first-touch fields, original referrer, and landing page.
You do not need to solve the attribution model before you collect the data.
You just need to stop throwing away the data.
How I would test it
I do not trust attribution setups until I test them through the whole path.
Here is the test I would run:
- Open a clean incognito window.
- Visit a tagged URL with UTMs and a fake click ID.
- Confirm the hidden fields populate on the form.
- Submit a test lead.
- Check the form entry, CRM, email notification, Google Sheet, or webhook destination.
- Confirm the standard UTMs, click IDs, referrer, landing page, URL, organic source, and traffic source fields arrived.
- Return through a second source and test whether last-touch fields update while first-touch fields stay intact.
- Test one untagged organic or referral visit so you can see what happens when there are no UTMs.
That last test is important.
A lot of teams only test the perfect campaign URL.
Real traffic is not perfect.
Some links are untagged. Some referrals are messy. Some visits arrive from organic search. Some paid clicks carry click IDs but weak UTMs. Some people come back days later from a different source.
Your setup should handle that reality.
My practical recommendation
My recommendation is simple:
Track UTMs, but do not stop at UTMs.
For a serious WordPress lead generation site, I want:
- standard UTMs for campaign labels
- click IDs for paid platform evidence
- first-touch fields for origin
- referrer fields for missing or messy tags
- landing page and conversion page fields for page-level context
- organic source fields for SEO, social, referral, and AI discovery patterns
- traffic source fields for high-level channel classification
That sounds like more work than “just add UTM tags.”
It is.
But it is also the difference between thin attribution and useful attribution.
Thin attribution says:
“This lead came from Google.”
Useful attribution says:
“This lead first landed on our comparison post, originally came from Google organic, returned later through paid search, converted on the demo page, and carried a Google Ads click ID we can reconcile later.”
That second version gives a founder, CMO, or operator something they can act on.
It helps with campaign decisions.
It helps with sales context.
It helps with landing page analysis.
It helps with debugging.
And it helps prevent the lazy conclusion that every untagged or messy lead is just “direct.”
The bottom line
UTMs are still worth using.
I am not arguing against them.
I am arguing against treating them as the whole attribution system.
If you care about real lead tracking, the form should capture more than the campaign label. It should capture the evidence around the visit: click IDs, original referrer, landing page, conversion page, organic source, and traffic classification.
That is how you give your CRM a better memory.
And in attribution, better memory is usually where better decisions start.




Wrap your code in
<code class="{language}"></code>tags to embed!