Skip to content
Siteon

Guide

How do I receive inquiries from an ad landing page with their source (UTM, gclid)?

Add the Siteon script tag to the landing page and mark its form with data-sitekit-form. The script remembers utm_* parameters, gclid and fbclid from a visitor's first and latest visit, plus the landing page and referrer, and saves them with every inquiry automatically, with no hidden fields. Each successful submission is also announced, with its submission ID, to Google Tag Manager's dataLayer and as a sitekit:submit event on document, so you can count it as a GA4 key event or a Google Ads conversion (deduplicated by transaction ID). This is included on every plan, from $4/month per site on your live domain.

Updated:

What gets recorded

ValueContents
utm_source / utm_medium / utm_campaign / utm_term / utm_contentUTM parameters in the URL
gclid / fbclidGoogle Ads and Meta ads click IDs
landing / referrer / atLanding page, referrer and time

Steps

1. Add the script tag (and your GTM container, if you use one)

<script src="https://cdn.siteon.dev/sitekit.js" data-site="hanaya" data-gtm="GTM-XXXXXXX" defer></script>

data-gtm is optional. On Siteon hosting or the Cloudflare Pages relay you can enter the GTM ID in the dashboard (Settings → Advanced) instead (don't set both).

2. Mark the form

<form data-sitekit-form="contact">
  <label>Name <input name="name" required></label>
  <label>Email <input type="email" name="email" required></label>
  <input type="text" name="_hp" tabindex="-1" autocomplete="off"
         style="position:absolute;left:-9999px" aria-hidden="true">
  <button type="submit">Request a quote</button>
</form>

Declare the form in schema.json and apply it with siteon schema push (see the contact form guide).

3. Pick up submissions in GTM

Only when a submission succeeds (once, after it has been saved), the script pushes this to dataLayer. Field values are never included.

{
  event: "sitekit_form_submit",
  form: "contact",
  sitekit_form: "contact",
  sitekit_site: "hanaya",
  sitekit_submission_id: "…"   // submission ID, for deduplicating conversions
}

In GTM, create:

  1. A trigger: type "Custom Event", event name sitekit_form_submit
  2. Variables: type "Data Layer Variable", for form (named Form Key) and sitekit_submission_id (named Submission ID)

You can rename the event in the dashboard (Settings → Notifications → each form); if you do, update the trigger too.

4. Set up the conversions

GA4: Create a "GA4 Event" tag with event name generate_lead and parameter form_key = {{Form Key}}, firing on the trigger from step 3. In GA4's admin under "Events", mark generate_lead as a key event.

Google Ads: Create a conversion action in Google Ads (category such as "Submit lead form") and put its conversion ID and label in a GTM "Google Ads Conversion Tracking" tag. Set the transaction ID to {{Submission ID}} so the same submission is never counted twice. Add a "Conversion Linker" tag (all pages) to the container if there isn't one.

Without GTM: Listen for the sitekit:submit event on document and pass it to tags you write yourself.

<script>
  document.addEventListener("sitekit:submit", (e) => {
    const d = e.detail;
    gtag("event", "generate_lead", { form_key: d.sitekit_form, transaction_id: d.sitekit_submission_id ?? undefined });
    fbq("track", "Lead", { content_name: d.sitekit_form }, { eventID: d.sitekit_submission_id ?? undefined });
  });
</script>

For the Meta pixel, passing the same submission ID as eventID removes duplicates.

5. Test with a tagged URL

Open the page with ?utm_source=test&utm_medium=cpc&utm_campaign=launch and send the form in GTM's preview (Tag Assistant). You're done when the completion event appears, the Data Layer shows sitekit_submission_id, and the inquiry arrives in the dashboard with its source. Delete the test inquiry afterwards: it counts toward your limit.

6. (Optional) Pass leads to a CRM or offline conversions

On paid plans, a webhook sends each inquiry, with its field values and traffic source (including gclid), to Zapier, Make or your CRM. That gives you what you need to import leads that turned into deals back into Google Ads as offline conversions.

What it costs

FreeLiteStandardBusiness
Monthly$0$4$12$39
Form submissions50/mo500/mo1K/mo5K/mo
Page views (approx.)~10K/mo~30K/mo~300K/mo~2M/mo
WebhooksNot included5 per site · signed · auto-retry5 per site · signed · auto-retry5 per site · signed · auto-retry

Source recording, the conversion event, notifications and auto-replies are on every plan. Webhooks are on paid plans only. The Free plan works on development and preview domains and on its Siteon hosting subdomain (<name>.siteun.com, with a badge). To run an ad landing page on your own domain, use a paid plan.

Limits and what's coming

This page is also available as Markdown. For AI agents, pass llms-full.txt (full text).