Skip to content
TraceLead

Squarespace UTM tracking when the form block reads only the URL

Squarespace lets you add the TraceLead tag, but the form block's hidden fields read only the page address. This page sets out what that means for UTM tracking on Squarespace and the route that gets the first campaign, click id and landing page into a lead: a form in a Code block.

No card needed. No lead caps on any plan.

  • Squarespace: Documented pattern, not covered by an automated test
  • How we test
What your Code block form receives Sample data

Added by TraceLead's hidden fields. The name and email stay in your form.

Channel
Paid search
Source / medium
google / cpc
Campaign
brand-uk
Click ID
gclid
Arrived from

The Squarespace form hidden field reads only the URL

A form block hidden field is filled from a parameter in the page address, named with an SQF_ prefix, and from nothing else. Your ads and newsletters use utm_ tags, the visitor rarely enquires on the page they landed on, and visits from search or social carry no parameters at all.

TraceLead keeps the first touch from an earlier page, but cannot hand it to the form block. We say so rather than ship a workaround we cannot test on every release. The Squarespace entry in our ledger is a guide.

  • Form block hidden fields take their value from the page address only, not from a script.
  • The TraceLead tag goes in Code injection, so your dashboard counts sessions by channel after consent.
  • A plain HTML form in a Code block renders on your page, so the snippet fills its hidden inputs as on any site.
  • An embedded form (Typeform, Jotform, Google Forms, HubSpot) in a Code block takes the values in the URL that loads it.

How to set up UTM tracking on Squarespace

A documented setup in four steps. Check it with a test entry on your own site before you rely on it.

The Wix and Squarespace guide
  1. Add the tag in Code injection

    In Settings → Advanced → Code injection → Header, paste the TraceLead script tag and your consent call. Code injection is not on every Squarespace plan; check that yours includes it. Add the published domain to your site's allowed domains in TraceLead.

  2. Add a Code block where the form goes

    On your contact page, replace the form block with a Code block. What you put in it renders on your page, inside the reach of the snippet.

  3. Paste a form with hidden tl_ inputs

    Your own HTML form that posts to your CRM or form backend, with a hidden input per value:

    <form action="https://your-form-backend.example/submit" method="post">
      <!-- your visible fields -->
      <input type="hidden" name="tl_channel">
      <input type="hidden" name="tl_source">
      <input type="hidden" name="tl_utm_campaign">
      <input type="hidden" name="tl_gclid">
    </form>

    Or mount a Typeform or Jotform form with the short script in the embedded forms guide, or embed a HubSpot form.

  4. Send a test entry

    Open a page other than the contact page with ?utm_source=test&utm_medium=cpc, accept cookies, click through to the form and send it. The entry should carry test as its source.

Squarespace lead source in each enquiry

Each hidden input arrives as a plain value beside the visitor's answers, wherever your form posts. Pick the ones you want; leave out the rest.

For an embedded builder, name its hidden fields without the prefix (channel, source), as the embedded forms guide shows.

Hidden input name Holds
tl_channel The channel the first visit came from
tl_source Where it came from
tl_medium How it came
tl_utm_campaign The campaign name from your UTM tags
tl_gclid Google Ads click id, for offline conversion import
tl_referrer_host The site that sent the visit
tl_landing_page The first page seen, sensitive parameters removed
tl_first_touch_at When the first visit happened

Attribution without personal data. No names, emails, form values, IP addresses or user agents. Ever.

No privacy workarounds. Nothing before consent, no fingerprinting, no ad-blocker bypass, no cross-site identity.

Made in the UK. GBP pricing, UK consent rules in mind, and a person who answers email.

Questions, answered

Anything else? Email us and a person replies.

How does a Squarespace form hidden field get its value?

Only from the page address: Squarespace reads a URL parameter named after the field with an SQF_ prefix. A script cannot set it, so a first touch recorded on an earlier visit never reaches it.

Can TraceLead fill the Squarespace form block?

No. TraceLead would have to write into the hidden field from page code, and the form block does not take values that way. Use a plain HTML form or an embedded form in a Code block instead.

Where do I paste the TraceLead tag on Squarespace?

Settings → Advanced → Code injection → Header. Paste the tag and your consent call there. Code injection is not on every Squarespace plan; check that yours includes it.

How do I track the lead source on Squarespace?

Put a form TraceLead can reach in a Code block: your own HTML form with hidden tl_ inputs that posts to your CRM or form backend, or a Typeform, Jotform, Google Forms or HubSpot form mounted as the embedded forms guide shows. Both render on your page, so the first touch from any earlier visit is there when the visitor enquires.

What does the tag do without a fillable form?

After consent it counts sessions by channel and campaign on your TraceLead dashboard, so you still see where traffic comes from. Leads with their source need one of the form routes.

Does TraceLead store what visitors type into the form?

No. TraceLead never reads form answers and never stores names, emails or IP addresses. The form posts to wherever it posted before, and nothing is stored before consent.

Get the source into your Squarespace enquiries.

Add the tag in Code injection, then put a form TraceLead can reach in a Code block.

No card needed. Cancel any time.

The whole install v1.4.0
Squarespace → Settings → Advanced → Code injection → Header
  TraceLead tag + consent call

Code block on the contact page:
<input type="hidden" name="tl_channel">
<input type="hidden" name="tl_source">
<input type="hidden" name="tl_utm_campaign">
<input type="hidden" name="tl_gclid">