Linux 软件免费装
Banner图

Choice Universal Form Tracker for Google Tag Manager

开发者 jaffray
更新时间 2026年10月19日 11:06
PHP版本: 7.4 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

google tag manager conversion tracking utm form tracking datalayer

下载

3.29.4 3.30.0 3.30.1

详情介绍:

Five form plugins, one event shape. Each form plugin fires its submissions differently, so a site running more than one ends up with a different tag, a different trigger, and a different set of field names for each. This plugin detects whichever form plugins are active and emits a single, consistent form_submit event for all of them, so one tag in Google Tag Manager covers the whole site. Campaign attribution rides along. UTM parameters and advertising click IDs are captured on the visitor's first landing and stored for 30 days, so a form submitted a week after the ad click still reports the campaign that produced it. Supported form plugins Detection is automatic. No configuration is needed beyond activating the plugin, and nothing is loaded for a form plugin that is not installed. These are third-party products, listed here to describe compatibility. This plugin is not affiliated with, endorsed by, or supported by their makers. What gets tracked Every event carries cuft_tracked: true, which gives you one reliable condition to build triggers on. Send it to GA4, Google Ads and Meta One trigger in Google Tag Manager covers every form on the site, and a form plugin added later needs no new tag:
  1. Add Data Layer Variables for cuft_tracked and for the fields you need, such as form_type, form_id, utm_campaign, gclid and lead_id.
  2. Create a Custom Event trigger for form_submit with the condition cuft_tracked equals true.
  3. Fire your GA4 event tag, Google Ads conversion tag or Meta Pixel Lead event on that trigger. For Google Ads enhanced conversions, map user_email into a User-Provided Data variable. user_phone holds the number as the visitor typed it, so convert it to E.164 form (such as +17805550173) before mapping it. For GA4, send lead_id and leave the contact details out.
Shared lead identity Each event can carry a lead_id: the SHA-256 hash of the visitor's email address, lowercased and trimmed, or of their phone number in E.164 form when no email was given. The same hash is computed server-side, so an analytics event and a downstream CRM record derived from the same person produce the same identifier. The form_submit event also carries the raw email address and phone number. Send lead_id instead of those fields wherever raw personal data must not go; Google Analytics, for one, forbids sending it email addresses or phone numbers. The normalisation matches what Google Enhanced Conversions and Meta CAPI expect, so the value doubles as a match key for offline conversion imports. Built to stay out of the way Who maintains this Choice OMG maintains this plugin. We are a digital marketing and web agency in Edmonton, Alberta, and we built it because our clients' sites run several form plugins at once and each one needed its own analytics plumbing. The plugin's overview page is Choice Universal Form Tracker for WordPress. If you would rather have GTM, GA4 and Google Ads conversion tracking set up for you, Choice OMG does that for clients.

安装:

  1. Install the plugin through the Plugins screen, or upload the choice-universal-form-tracker folder to /wp-content/plugins/.
  2. Activate it through the Plugins screen.
  3. Go to Settings > Universal Form Tracker.
  4. Enter your Google Tag Manager container ID, or leave it empty to use your own GTM installation.
  5. Confirm your form plugins appear under Framework Detection Status.
Nothing else is required. Tracking starts as soon as the plugin is active.

屏幕截图:

  • Framework detection for Avada, Elementor Pro, Contact Form 7, Ninja Forms and Gravity Forms, with the active tracking features.
  • Click Tracking: each advertising click ID with its campaign, lead events, qualification status and score.
  • Testing Dashboard: a simulated form submission in the Event Viewer, checked for required fields, with its full dataLayer payload.
  • Privacy settings: phone numbers that are never tracked, and how long click records are kept.

升级注意事项:

3.30.0 Click rows older than 365 days are now deleted daily; set Click Data Retention to 0 first to keep them. Stored IP hashes are cleared and new ones are keyed. Form events no longer carry ip_hash or click_platform. 3.29.4 Readme and listing changes only; no code change from 3.29.3. Upgrading from 3.28.x: the webhook now always requires the site's key, and a server-side GTM URL becomes a bare hostname. 3.29.3 Upgrading from 3.28.x: the webhook now always requires the site's key, and a server-side GTM URL becomes a bare hostname. Adds an optional Google tag gateway mode, off by default. 3.29.2 The webhook now always requires the site's key. Any integration calling it without key= must use the URL shown on the Click Tracking screen. 3.29.1 Fixes lead events missing from click records (concurrent writes, and every Contact Form 7 submission). No settings change. 3.29.0 The server-side GTM setting now takes a hostname only; a saved URL is converted automatically. A saved URL that included a path falls back to Google's endpoint until you test the connection again. 3.28.0 Requires WordPress 6.2 or later. Existing sites keep generate_lead firing and the webhook open; new installs start with generate_lead off and the webhook key required. The Test Form Builder is removed and its test pages are deleted. 3.26.1 Stops phantom form submissions on Avada/Fusion sites. If your Avada conversion counts have looked inflated, this is the fix. No settings change is needed. 3.26.0 Removes a third-party CDN request and makes lead_id reliable on fast submissions. No settings change is needed. 3.25.0 Adds a shared lead_id to lead events. No reconfiguration needed. 3.22.0 Changes what generate_lead means: it now fires on any submission with a valid email address, and the stricter email-plus-phone-plus-click-ID condition became qualify_lead. Update your GTM triggers before upgrading.

常见问题:

Do I need Google Tag Manager?

No. The plugin pushes its events to window.dataLayer whether or not it injects a container for you. If you already load GTM through a theme or another plugin, leave the container ID empty and the events will reach your existing container.

Can I use it alongside GTM4WP, GTM Kit or Site Kit?

Yes. When another plugin already loads your container, leave this plugin's container ID empty. Its events go into the same window.dataLayer, so your existing container receives them, provided that plugin keeps the default dataLayer name. Those plugins are separate products, and this one is not affiliated with their makers.

Is there a paid version?

No. There is no paid tier and no upgrade prompt. Two optional features can use services Choice OMG runs for its agency clients: phone validation, which needs a registration secret Choice OMG issues to those clients, and the click collector, which can point at a collector of your own instead. Both are off by default and are described under External services.

Which form plugins does it support?

Contact Form 7, Gravity Forms, Ninja Forms, Elementor Pro forms, and Avada / Fusion Builder forms. Detection is automatic; scripts for a form plugin that is not installed are never loaded.

What data does it collect, and where does it go?

Form submissions produce dataLayer events containing the email address and phone number entered, the form's identity, and the campaign parameters captured when the visitor arrived. Those events go to your own analytics setup. Nothing leaves your site unless you configure one of the services listed under External services.

How long is campaign attribution kept?

UTM parameters and click IDs are stored in the visitor's browser for 30 days from their first visit carrying them, so attribution survives a gap between the ad click and the form submission. First-touch attribution is kept for a year in a separate cookie. On the server, each tracked click is a row in the plugin's click tracking table: the click ID and its ad platform, the campaign parameters, a keyed hash of the visitor's IP address, the browser's user agent, the referring page, the landing page address, the Google Analytics client ID when the visitor has one, and the tracked events with their times. A click on a phone or email link by a visitor who did not arrive from an ad also creates a row, under a temporary ID. Rows older than the Click Data Retention setting (365 days by default) are deleted once a day. The IP address itself is never stored, and the hash is keyed with the authentication keys in wp-config.php, so a copy of the database alone cannot reverse it.

Is it GDPR compliant?

That depends on how you configure it. The plugin writes campaign parameters to the visitor's browser and puts submitted contact details into your dataLayer, so it processes personal data and belongs in your privacy policy and your consent flow. Review the External services section for anything that leaves your site.

Does it slow the site down?

The tracking scripts are plain JavaScript with no jQuery dependency, and each form plugin's handler loads only when that form plugin is present. Tracking errors are caught so a failure cannot block a form submission.

Can my CRM or email platform update a lead's status?

Yes. The Click Tracking screen shows a webhook URL that marks a tracked click as qualified, scores it, or records a lifecycle status such as qualify_lead. Every request must carry the site's secret webhook key, which the same screen displays and can regenerate. Requests without the right key are rejected with HTTP 403 and change nothing.

Can I change what is tracked?

Yes. Filters cover the computed lead_id (cuft_lead_id), the phone country code used to normalise it (cuft_lead_id_phone_country), the attribution payload (cuft_form_attribution_payload), and whether the plugin runs at all (cuft_enabled). Since 3.30.0, cuft_ignore_phone_numbers adds numbers that are never tracked, cuft_record_event decides whether an event reported by the browser is recorded on its click, and cuft_click_retention_days sets how long click rows are kept.

Can I keep one phone number or link out of tracking?

Yes. List the number under Settings > Ignored Phone Numbers, and clicks on any tel: link to it produce no phone_click in the dataLayer and nothing on the click record. Numbers match on their last 10 digits, so every formatting of the same number is covered. To exclude a single link of any kind, add the attribute data-cuft-ignore or the CSS class cuft-ignore to the link or to an element around it; in Elementor the class goes under Advanced > CSS Classes.

更新日志:

3.30.1 3.30.0 3.29.4 3.29.3 3.29.2 3.29.1 3.29.0 3.28.4 3.28.3 3.28.2 3.28.1 3.28.0 3.27.1 3.27.0 3.26.1 3.26.0 3.25.0 3.24.0 3.23.0 3.22.1 3.22.0 3.21.0 3.19.0 3.5.0 3.1.0 3.0.0