You run three service pages and one contact form. Last month forty named fills landed in the inbox. Google Analytics shows sessions on each service page. The form entries show name, email, and message. Nothing ties a named person to the first page they opened.
A Fluent Forms support thread asked the same thing with a tracker shortcode. The asker opened the homepage, moved to /contacts/, submitted, and expected the stored landing page to stay the homepage. The value they saw was /contacts/ instead. That mix-up is common. The form page is not the landing page.
This post separates those ideas, explains why most form plugins only keep the form page, and shows what free LeadSource 1.0.8 stores on each fill so you can read the entry URL next to the name.
Landing page, conversion page, and traffic source
Three labels get mashed together. Keep them apart.
Landing page is the first URL on your site where the visit’s source was captured for that session. If someone clicks a Google Ad that opens /services/repairs, that URL is the landing page even after they click through /about and /contact.
Conversion page is the URL where the form actually submitted. If the form lives on /contact/, that is the conversion page no matter which service page started the visit.
Traffic source is the channel or campaign that sent them. That is what utm_source, utm_medium, utm_campaign, and click IDs describe. Source answers where they came from. Landing page answers where on your site they arrived.
You want all three on the named fill when you decide which page and which campaign deserve more spend.
Why WordPress forms miss the first URL
Contact Form 7, WPForms, Gravity Forms, and the other common builders collect what the visitor typed. Many also store the URL of the page that held the form. That is useful. It is still the conversion page.
The first URL only lived in the browser when the visitor arrived. After they click an internal link, the address bar no longer shows those query tags. A hidden field set to “page URL” or “embed URL” on the form page records /contact/, not /services/repairs. The Fluent Forms thread above is that exact failure mode. The asker thought the shortcode meant first page. The value that survived was the form page.
A cookie or a plugin that stamps the first capture into a session store is the usual bridge. Without that, Analytics stays aggregate and the form entry stays blind to the entry URL.
What free LeadSource 1.0.8 stores on each fill
The free LeadSource plugin hooks the form plugins you already use. 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. No shortcode. No hidden UTM fields to maintain.
On a successful submit it writes a row in its own WordPress table. That row can hold the traffic source label, the five UTM keys, the click ID when one was present, the referrer, the landing page URL, and the page URL where the form submitted. Notification mail can show landing page and page URL beside the source fields. Summary emails can list top landing page paths for the period.
Capture runs in the visitor’s browser. A small vanilla script reads the URL on page load and stores the data in a first-party session cookie. When the URL has UTM parameters or a recognised click ID, the script writes those values and sets landing_page to the current page. When there is an external referrer and no tags, it can still set landing_page from that arrival. While the visitor browses inside your site with no new tags, the existing cookie stays. Closing the browser ends the session. That same-session rule is covered in Same Session Attribution vs 90 Day UTM Cookies.
Click IDs in the readme today are gclid, fbclid, msclkid, li_fat_id, and ttclid. The listing does not name gbraid or wbraid.
The form plugin’s own entries screen is unchanged. LeadSource keeps the attribution row in its dashboard. Open an entry there to see landing page next to campaign and click ID. The overview of channel capture is in How to Track Lead Sources in WordPress Forms. The click-to-dashboard flow is in How It Works.
How to test the landing page on a real fill
Do not paste tags only onto the form URL. That skips the whole point.
- Open a private window.
- Hit a service page with a test tag, for example /services/repairs?utm_source=test&utm_medium=manual&utm_campaign=landing-check.
- Click through the site the way a visitor would until you reach the form page.
- Submit the form with a name you will recognise.
- Open the LeadSource dashboard row for that fill. Confirm landing page still shows the service URL (or the tagged arrival URL), while page URL shows the form page.
- If notification mail is on, confirm the same landing page line appears there.
If landing page matches the form page, you likely landed straight on the form URL with the tags, or the session cookie never set on the first page. Check that the script is not delayed by a performance plugin, and that a consent banner is not blocking it before the first paint.
What this does not do
LeadSource records the landing page on the fill for the current session. It does not keep a 90 day cookie. It does not stamp first touch and last touch as two separate values. It does not push the row into a CRM by itself. Mapping UTM and gclid onto a CRM contact is a separate job covered in How Do I Get WordPress Form UTM and GCLID Data onto a CRM Contact.
It does not upload conversions into Google Ads. A stored gclid is a match key for a later Ads import. It is not an Ads button.
It does not export CSV from free 1.0.8. Use the dashboard and notification mail for the landing page field.
Cross-origin embeds (Typeform, Calendly, a form in another site’s iframe) sit outside the native WordPress form hooks. LeadSource stamps the hooked WordPress form plugins listed above. It does not see a submit that never hits those hooks.
LeadSource Pro is $99 a year if you need full lead-journey page paths, per-source notification routing, or scheduled client reports. Free 1.0.8 already stores landing page on each entry. Reach for Pro only when the job is journey depth or client reporting, not the basic entry URL.
Short checklist
- Decide which service URLs you care about as entry points.
- Confirm your form is one of the nine native hooks in free 1.0.8.
- Install LeadSource from wordpress.org, finish the setup wizard, and leave the session cookie on.
- Run the private-window test from a tagged service page, then browse to the form and submit.
- Read the LeadSource row. Landing page should be the entry URL. Page URL should be the form page. Traffic source should match the tag or click ID.
- Sort or search recent entries by source, then scan landing page values when you cut or keep a page.
Named fills without an entry URL leave you guessing which page paid for itself. Free LeadSource keeps that URL on the same row as the name for the length of the session.

Leave a Reply