Same Session Attribution vs 90 Day UTM Cookies

You clicked a tagged Google Ads URL, browsed a service page, and submitted a form the same day. The campaign is on the lead. You closed the laptop lid. The next visit has no campaign.

That second row is a new session. LeadSource 1.0.8 kept the tags for the open browser only. It did not keep a 90 day cookie.

What a 90 day UTM cookie is supposed to solve

WordPress UTM threads keep repeating 90 days. A Gravity Forms shop installs a tracker, sees a cookie duration, and assumes a later enquiry still belongs to last month’s ad. Other plugins and forum answers set 90 days so a branded search or a typed return still carries the paid click.

The claim is simple. Someone clicks an ad on Monday, thinks it over, and submits weeks later. A long cookie still prints that campaign on the form. Sales sees a paid lead. The ad account gets credit for a visit that happened in another session.

That is what a 90 day cookie is for. It is a lookback so a later enquiry still carries the ad. It is not what LeadSource 1.0.8 stores.

What same session means in LeadSource 1.0.8

Capture runs in the visitor browser. A small vanilla JavaScript file, with no jQuery, reads the URL on page load. Server-side cache does not strip that read. The plugin stores the source in a first-party cookie for the same browser session.

The wordpress.org FAQ on the conversion window states the data persists until the browser is closed. There is no 1 day, 7 day, 30 day, 60 day, 90 day, or 180 day setting.

Same session means this visit. The person is still in the browser that opened the tagged URL. They can click through three pages and submit. The ad is still there. The moment they quit the browser, that cookie ends.

The capture itself is not a server-side first-request save. Referrer is the only server-side fallback named. UTM parameters and click IDs come from the script. A consent banner or an ad blocker that stops the script can leave the source empty or Direct. The form still saves.

That flow is in How It Works.

Close the browser and the source is gone

If they click an ad, keep the tab open, read three pages, and submit, the ad is on the row.

If they close the browser, come back tomorrow by typing the URL, and submit, the row will show Direct (or whatever this visit actually was), not yesterday’s ad. A return with unpaid search will show Organic Search. The old campaign is not waiting in a 90 day cookie.

Closing the laptop lid may not quit the browser. Quit the app. A session cookie lasts until that process ends. Sleep with the browser still running can keep the same session overnight. That is still one open browser, not a 90 day window.

First touch and last touch are not settings in 1.0.8

First plus last touch needs two stored sources. One stamp for the first tagged visit. One stamp for the latest tagged visit. 1.0.8 stores the session source only. It does not keep a first-touch stamp and a last-touch stamp. There is no first-touch versus last-touch switch.

If they click a second tagged campaign before the browser closes, 1.0.8 still has one session source, not a first-touch row and a last-touch row. That is still this visit, not a lifetime score.

A 90 day first-touch cookie would still credit Monday’s ad when the person submits next month from a bookmark. This plugin will not. The submit belongs to the session that produced it.

What the free plugin stores during that session

The free LeadSource plugin writes to its own WordPress table. It does not fill hidden fields and it does not change the form plugin’s entries screen. You install it, run the wizard, and leave the form plugin enabled. You do not add hidden fields or shortcodes.

Native hooks in 1.0.8 are Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Formidable Forms, Fluent Forms, Elementor Pro Forms, Everest Forms, and Forminator. On submit, the session source is attached through that hook and stored in the LeadSource table.

When the visit had tags or a click ID, you get these values.

  • A traffic source label (Google Ads, Meta Ads, LinkedIn Ads, Microsoft Ads, TikTok Ads, Organic Search, Direct, or Referral)
  • utm_source, utm_medium, utm_campaign, utm_term, and utm_content
  • The click ID that arrived (gclid, fbclid, msclkid, li_fat_id, or ttclid)
  • Landing page (the first page of that session)
  • Referrer (the cookie first, then a server-side HTTP referrer fallback if the cookie had none)

gclid is the proof a Google Ads click happened. utm_campaign is the name sales can read. Keep both. The stored gclid is a match key. It is not an Ads import button.

Organic and direct visits still get a label. There is no UTM to invent. Direct means this visit arrived without a tag, a click ID, or an external referrer.

Email notifications and summary emails are free. Stored entries are unlimited.

Why a long window over-counts paid leads

A 90 day cookie can credit a later branded search or a direct return to last week’s ad. The person already knew the name. They typed it. The form still prints the old campaign. Paid reports look healthier than the visit that actually booked the enquiry.

The readme calls same session the more accurate setting because it avoids that over-count. That is honest for a named form row. It is not a claim that same session is always better for every advertiser. Some shops want the first ad that introduced the brand. This plugin does not store that. It stores the session that produced the form.

Counting Ads conversions against named form rows is a different argument, covered in Why Google Ads Conversions Don’t Match WordPress Form Leads. A long Ads window and a same-session form row will disagree. They should. One is a click model. One is the visit that submitted.

A live test you can run today

Do not test by pasting tags onto the form page and submitting there. That hides the window.

  1. Open a service URL with utm_source, utm_campaign, and a fake gclid (or a real Ads preview URL).
  2. Browse to a second page that holds the form. The address bar should no longer show the tags.
  3. Submit with a name and email you can find.
  4. Open the LeadSource dashboard. The row should show Google Ads (or the label for that click ID), the campaign, the gclid, and the first landing page, not the form page as the landing page.

Then quit the browser fully. Do not only close the tab. Open the site again with no tags. Submit a second time. The second row should not still show the test campaign. It should look like Direct, or like whatever this untagged visit actually was.

Staff fills and your own IP will look like Direct unless you came in on a tagged URL. That is expected on the free plugin.

If both rows still show the test campaign, the browser never quit or a different tracker is writing a long cookie.

What this plugin does not do

It does not keep a 90 day cookie. It does not offer a 1, 7, 30, 60, 90, or 180 day conversion window.

It does not score first plus last touch.

It does not capture gbraid or wbraid.

It does not hook Jetpack Forms, WS Form, or HubSpot Forms. If the enquiry form is one of those, this plugin will not stamp that submission. Forminator is a native hook in 1.0.8.

It does not fill form hidden fields. It does not upload conversions to Google Ads. It does not push a CRM contact. Getting those values onto a HubSpot or Salesforce contact is a separate job, in How Do I Get WordPress Form UTM and GCLID Data onto a CRM Contact.

It does not keep the source after the visitor closes the browser. A return visit tomorrow with no tags is a new session.

LeadSource 1.0.8 keeps the tagged visit for the open browser session and stamps it on the form row. That is the whole window. It does not keep a 90 day cookie, it does not score first plus last touch, and it does not upload the lead to Google Ads or a CRM. The dashboard row is the record. If those values must land on a HubSpot or Salesforce contact, that mapping is a separate job. Free stays fully functional. Pro is 99 dollars a year at leadsourcepro.net/pro for journeys, routing, saved and scheduled reports, comparisons, and white label client reports.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *