For many small businesses the contact form is where the money starts. Someone asks for a quote, a callback or an appointment, and that message is worth more than a hundred page views. Yet it is also the action most often tracked badly: counted when the form fails, counted twice when it succeeds, or not counted at all after a plugin update.
If you want to track form submissions properly, the goal is simple to state. Record one event each time a form is sent successfully, never when it fails, and send that event to the tools that need it. This post compares the ways of doing that on a WordPress site, explains where double counting creeps in, and gives a test routine you can repeat.
What “a form submission” should mean in your reports
A visitor pressing the submit button is not the same as an enquiry. Between the two, plenty can go wrong: a required field left empty, an invalid phone number, a spam check, a server error. A tracking method that fires on the button press records all of those as leads.
So the definition you want is a submission the form accepted. Whether the email then reached your inbox is a separate question, worth checking on its own, but the tracking should at least wait for the form’s own success response.
Give the event one clear name and use it for every form, for example generate_lead, with a parameter telling you which form it was. One name keeps reports readable; the parameter keeps the detail.
Four ways to track form submissions, compared
| Method | How it works | Reliability | Watch out for |
|---|---|---|---|
| Thank-you page | The form redirects to a confirmation page; reaching that page is the event | Very good, if built carefully | Refreshes, direct visits, the page being indexed |
| Form plugin success event | The plugin announces success in the browser; Google Tag Manager listens for it | Very good | Breaks if the plugin changes or is replaced |
| Success message visibility | GTM fires when the “thank you” message appears on screen | Good | Depends on the message’s code staying the same |
| GA4 automatic form tracking | Enhanced measurement guesses when a form was submitted | Unreliable for most WordPress forms | Counts failures, misses AJAX forms, records search boxes |
GTM also has a built-in form submission trigger. It works with traditional forms that reload the page, but many WordPress form plugins send their data in the background without a reload, and the trigger often misses them or fires before validation.
Using a thank-you page
Most form plugins let you choose between showing a message and redirecting to a page after a successful submission. Choosing the redirect gives you a page view that only happens after success, which is easy to track in GA4 and in Google Ads.
It is the simplest method that holds up well. It does need a little care so the page itself is not counted by accident, which our post on tracking a thank-you page covers. The steps for creating the page and redirecting each form plugin are in setting up a thank-you page after a WordPress form.
Use a separate thank-you page per form if you want to tell them apart without extra parameters, for example one for quote requests and one for newsletter signups. Newsletter signups should not be counted as enquiries.
Using the form plugin’s own success event
When you would rather keep the in-page message, the next best signal comes from the form plugin itself. Several popular plugins announce a successful submission in the browser in a way Google Tag Manager can listen for.
- Contact Form 7 fires a browser event called wpcf7mailsent after a successful send. A small listener script in GTM can turn that into a data layer event that triggers your tags.
- Gravity Forms with background submission enabled fires an event when its confirmation loads, which can be used the same way.
- Other builders, including WPForms, Elementor forms and Fluent Forms, have their own success hooks or GTM integrations. Check the plugin’s documentation for the current method rather than relying on an old forum answer.
Some plugins and tracking add-ons push a ready-made data layer event for you. That saves writing a listener, but check what the event is called and whether it fires on success or on any submit attempt.
Using the success message as the trigger
If neither a redirect nor a plugin event is practical, GTM’s element visibility trigger can fire when the success message becomes visible. You tell it which element to watch, usually by its CSS class or ID, and it fires once that element shows on screen.
This works, but it is fragile. A plugin update that renames the message’s class, or a theme change that restyles it, breaks the trigger silently. Make a note to recheck it after updates.
How form tracking ends up counting twice
Double counting is the most common fault in contact form conversion tracking, and it makes weak marketing look strong. The usual causes:
- Two methods running at once. GA4’s automatic form event plus your own event both marked as key events.
- Two copies of the GA4 tag. One from a plugin, one through GTM, each sending the same event.
- Thank-you page refreshes. A visitor reloads the page or comes back to it from their browser history.
- Imported and tagged conversions in Google Ads. The same enquiry arrives from a GA4 import and from a Google Ads tag, both set as primary.
The fix in each case is one source per action. Pick the method you trust, switch off form interactions in GA4’s enhanced measurement if you are not using them, and make sure only one conversion action in Google Ads counts each enquiry.
A test routine for every form
Run this after setting up tracking and again after any change to the form, the plugin or the theme.
- Open Google Tag Manager’s preview mode and load the page with the form. Our post on testing tags in GTM preview mode walks through the screen.
- Submit the form with a required field empty. Confirm your enquiry tag does not fire.
- Submit it properly. Confirm the tag fires exactly once.
- Refresh the confirmation page or message. Confirm it does not fire again, or that the repeat is handled.
- Check GA4’s realtime or DebugView for the event with the right name and form parameter.
- Do it again on a phone, because forms can behave differently on mobile layouts.
- Confirm the email arrived. Tracking a form that never delivers creates leads that exist only in reports.
Afterwards, compare a week or two of recorded submissions against the messages you actually received. Spam that gets past the form’s filters will show up as events too, which is one more reason your own inbox is the final count. If you want a running log of real leads beside the analytics, a form-to-Google-Sheets lead tracker is a simple option. For how form tracking fits with calls, ads and reporting, see the small business marketing analytics guide.
Frequently asked questions
Can I track which page the form was submitted from?
Yes. GA4 records the page location with every event, so a form placed on several pages can be broken down by page in the events or key events reports. If you use a thank-you page, pass the original page as a parameter or rely on the landing page dimension to see where the visit started.
Will spam submissions show up as conversions?
Any submission the form accepts can fire the event, including spam that gets past its filters. Good spam protection on the form reduces this. Comparing recorded events with real messages each month shows how much spam is inflating the count.
Is it worth tracking people who start the form but do not finish?
It can be, as a secondary signal. A form that many people start and few complete may be too long or confusing on mobile. Keep that event out of your key events, though, because a started form is not an enquiry.
What changes if my form is embedded from another service?
Forms loaded from an outside service in a frame often cannot be seen by tags on your own page. The usual options are redirecting to a thank-you page on your site after submission, or using the service’s own integration with GA4 or Tag Manager if it offers one.
Forms are worth getting exactly right, because so many other numbers depend on them. If your enquiries do not match what GA4 or Google Ads reports, our conversion tracking service starts by finding out why. It sits alongside the other work described in digital marketing for small businesses.
Next in this series: Thank-You Page Tracking: Count Real Enquiries Only