UTM Tracking for WordPress Forms - Capture Source, Medium & Campaign

Know exactly which ad, email, or social post drove every form submission. SheetLinkWP captures UTM parameters, GCLID, fbclid, and msclkid automatically - no hidden fields needed.

Why UTM Tracking Matters for Forms

UTM parameters are the standard way to tag marketing URLs. When a visitor clicks a link like yoursite.com/?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale, those three parameters tell you the traffic source, the channel, and the specific campaign. Without capturing them at form submission time, you lose the connection between "money spent" and "lead acquired."

The five standard UTM parameters are:

  • utm_source - where the traffic came from (google, facebook, newsletter)
  • utm_medium - the marketing channel (cpc, email, social, referral)
  • utm_campaign - the specific campaign name (spring_sale, product_launch)
  • utm_term - the paid search keyword (optional, mostly used with Google Ads)
  • utm_content - differentiates ad variations or links within the same campaign (optional)

When these five fields appear alongside every form submission in your Google Sheet, you can answer questions like: "Which campaign generated the most leads this month?", "What is the cost-per-lead for our Google Ads vs Facebook Ads?", and "Which email subject line drove the most demo requests?"

How SheetLinkWP Captures UTM Data

SheetLinkWP intercepts UTM parameters at the WordPress level, not the form level. Here is what happens:

  1. Visitor arrives on any page with UTM parameters in the URL.
  2. SheetLinkWP stores the UTM values in a first-party cookie (httpOnly, SameSite=Lax).
  3. Visitor browses your site - maybe reads a blog post, visits the pricing page, then navigates to the contact page.
  4. Visitor submits a form on any page. SheetLinkWP reads the UTM cookie and appends all parameters to the webhook payload.
  5. Google Sheet receives the submission with utm_source, utm_medium, utm_campaign, utm_term, utm_content, plus any click IDs - all in dedicated columns.

This works with all 7 supported form plugins without any per-form configuration.

Why Hidden Fields Are a Bad Approach

The traditional way to capture UTM data is to add hidden fields to every form and use JavaScript to populate them from the URL. This approach has several problems:

  • You must modify every form - add 5+ hidden fields to every form on every page. If you have 20 forms across your site, that is 100+ hidden fields to maintain.
  • JavaScript dependency - if the JS fails to execute (ad blockers, script errors, race conditions), the hidden fields stay empty and you lose attribution data.
  • No cross-page persistence - if the visitor lands on page A (with UTM params) but submits a form on page B, the URL parameters are gone.
  • Form plugin compatibility - hidden field implementations differ between form plugins.

SheetLinkWP eliminates all of this. UTM capture is a single toggle in the plugin settings. No form modifications. No JavaScript. No per-plugin workarounds.

Cookie Persistence Across Pages

The cookie that stores UTM data is a first-party cookie set on your own domain. Key details:

  • Duration: 30 days by default, configurable from 1 to 365 days in SheetLinkWP settings.
  • First-touch vs last-touch: By default, SheetLinkWP uses last-touch attribution. You can switch to first-touch mode to preserve the original acquisition source.
  • Cookie scope: The cookie is set on the root domain, so it works across subdomains.
  • Privacy: The cookie contains only UTM parameter strings and click IDs. No personal data, no tracking pixels, no third-party scripts.

GCLID, fbclid, and msclkid Tracking

Beyond UTM parameters, ad platforms append their own click identifiers to URLs:

  • GCLID (Google Click ID) - added by Google Ads when auto-tagging is enabled. Links your form submissions back to the exact Google Ads click, enabling offline conversion tracking.
  • fbclid (Facebook Click ID) - added by Meta when users click ads on Facebook or Instagram. Useful for CAPI (Conversions API) integration.
  • msclkid (Microsoft Click ID) - added by Microsoft Advertising (Bing Ads).

SheetLinkWP captures all three automatically when click ID tracking is enabled. You can then feed these IDs back to the ad platforms for offline conversion tracking.

Building an Attribution Dashboard in Sheets

Once UTM data is flowing into your Google Sheet alongside form submissions, you can build powerful attribution reports using native Sheets features:

Leads by source - Use COUNTIF formulas on the utm_source column to count leads from each source. Create a pie chart for a visual breakdown.

Campaign performance table - Set up a pivot table with utm_campaign as rows and lead count as values. Sort descending to find your top performers.

Weekly lead volume by channel - Use COUNTIFS with date and utm_medium filters. Plot as a stacked bar chart to see channel trends over time.

Frequently Asked Questions

Do I need to add hidden fields to my forms for UTM tracking?

No. SheetLinkWP captures UTM parameters server-side from the visitor's session, not from hidden form fields. You do not need to modify any of your forms. This works with all 7 supported form plugins without any form-level configuration.

What happens if a visitor arrives via UTM link but submits a form on a different page?

SheetLinkWP stores UTM parameters in a first-party cookie when the visitor first lands. If they browse to another page and submit a form there, the original UTM data is still attached. Cookie duration is configurable (default 30 days).

Does SheetLinkWP capture GCLID, fbclid, and msclkid automatically?

Yes. When click ID tracking is enabled, SheetLinkWP detects gclid (Google Ads), fbclid (Facebook/Meta Ads), and msclkid (Microsoft Ads) from the URL parameters and includes them in the webhook payload alongside UTM data.

Is the visitor's IP address also captured?

Yes. SheetLinkWP can optionally include the visitor's IP address in the submission payload. This is useful for geo-targeting analysis but can be disabled for GDPR compliance.

Can I use UTM data for conditional routing?

Yes. UTM fields are available as routing conditions. For example, you can route submissions where utm_source equals 'google_ads' to a paid-leads sheet and organic submissions to a different sheet.

Stop guessing which campaigns drive leads

UTM tracking is built into the free SheetLinkWP plugin. Enable it with one toggle. No hidden fields, no Zapier fees.