Forms are conversion endpoints. When the contact form, newsletter signup, demo request, or waitlist form fires no event on submit, you lose the ability to compare form conversion rates across pages, detect forms that suddenly stop converting, separate submission intent from successful delivery, and attribute leads back to their acquisition channel. A form with a silent submit handler is a leak in the measurement pipeline between visitor and customer.
High because untracked form submissions sever the final link between marketing traffic and qualified leads.
Track both the submission attempt and its outcome so you can spot forms with high error rates:
analytics.track('form_submitted', { form_type: 'contact' })
const result = await submitContactForm(data)
analytics.track(result.success ? 'form_completed' : 'form_error', { form_type: 'contact', error: result.error })
Apply this pattern in every onSubmit handler across components/ContactForm.tsx, components/Footer.tsx, and any lead-capture component.
ID: marketing-analytics.event-conversion-tracking.form-submission-events
Severity: high
What to look for: Identify form components in the project (contact forms, signup forms, newsletter subscribe forms, demo request forms, waitlist forms). Check whether form onSubmit handlers or server actions include analytics event calls. Note: track the submission event separately from the success event — both matter (submission tells you intent, success tells you conversion).
Pass criteria: Count every form component in the project. At least 1 primary form (signup, contact, or lead capture) has analytics event calls in its submit handler. Both submission and success/error outcomes tracked is ideal but not required to pass. Report even on pass: "Found N forms, M have submit tracking."
Fail criteria: Form components exist but no analytics events are fired on form submission. Or forms exist only as static HTML with no submit tracking. A form that only tracks page-level events (page view on the form page) does not count as form submission tracking.
Skip (N/A) when: No analytics is present (script-present failed). Skip if the project has no forms at all.
Detail on fail: "Contact form in components/ContactForm.tsx fires no analytics event on submission. Newsletter signup in components/Footer.tsx fires no analytics event. Form conversions are invisible to analytics."
Remediation: Add event tracking to form submit handlers:
async function handleSubmit(data: FormData) {
analytics.track('form_submitted', { form_type: 'contact' })
const result = await submitContactForm(data)
if (result.success) {
analytics.track('form_completed', { form_type: 'contact' })
} else {
analytics.track('form_error', { form_type: 'contact', error: result.error })
}
}
Track both the submission attempt and the outcome. This lets you identify forms with high submission-to-error rates.