January 5, 2019
Why is there a gtm.formSubmit event on every page view?
Here’s a situation. You enable a Preview and Debug mode in GTM, refresh the page and when the page loads, you see gtm.formSubmit event on the left side of the Preview console. But the form on that page was not submitted! Or, maybe even worse, there is no form on that page at all!
Why is this happening? What is causing this? Spoiler alert: it’s Facebook Pixel.
In this quick blog post, I’ll explain what is happening and what you should do next (or shouldn’t?).
A quick context
This does not happen on all projects but some of you have definitely seen it. Right during the page loading process (before the appearance of the Window Loaded event), there is a gtm.formSubmit event.
Even if that page does not contain any form, you might still see this event. And there are two prerequisites for this to appear:
- You have Facebook Pixel implemented on a page
- You have at least one built-in GTM Form Submission trigger enabled on a page.
If both of these “requirements” are met, you’ll see false gtm.formSubmit events. I call them false because they not related to actual forms that are a part of your website.
Why does this happen?
That’s just the way how Facebook Pixel sends now the data over to Facebook’s servers, via a form submission. According to Simo Ahava’s comment in GTM Community on Facebook, Facebook uses a form submission for the pixel simply because it’s the most cross-browser-safe to send data to another domain. It basically creates a form with the data, then submits the form, and finally deletes the form.
So it doesn’t matter whether you have a form on a page, or you don’t. Facebook Pixel will do that anyway, as long as it is implemented on your page.
Form Submission trigger just displays those submissions in the Preview and Debug console because that’s its purpose, to display Form Submission Events.
You can distinguish a normal/usual form submission from the Facebook Pixel one by looking at the Data Layer.
FB Pixel’s form submission can be identified by two parameters:
- gtm.elementTarget (which can be used in GTM as a Form Target). Its value starts with fb and then is followed by some numbers.
- gtm.elementUrl (which can be used in GTM as a Form URL). Its value is https://www.facebook.com/tr/.
So what can you do about that false gtm.formSubmit event?
Honestly, not much. That’s just how the FB Pixel works now. You just need to keep in mind that your form submission triggers must be precise and not catch all the possible form submissions. Use more detailed conditions based on Form ID or other parameters/attributes related to your actual forms.
Simple as that.