2026-07-23
Tracciare l'invio di un form senza thank you page in GTM: 3 metodi che funzionano
Hai un form che dopo l'invio mostra un messaggio "Grazie, ti contatteremo presto" senza cambiare URL, e in GTM non hai nessun trigger di Page View su cui appoggiarti. Hai provato a tracciare il click sul pulsante "Invia", ma quello conta anche i tentativi falliti per campi obbligatori vuoti o email non valide, quindi i tuoi dati di conversione sono gonfiati e inaffidabili.
Perché succede
Le cause più comuni, in ordine di frequenza:
- Il form usa submit via AJAX (jQuery, Fetch, plugin come Contact Form 7, Gravity Forms, HubSpot embed, Elementor Forms): il browser non ricarica la pagina, quindi niente Page View, niente URL con /grazie da intercettare.
- Il messaggio di conferma è un elemento nascosto che viene mostrato via JavaScript, non una nuova pagina: perfetto per un trigger di visibilità, ma solo se sai selezionarlo con precisione.
- Il plugin del form emette già un evento personalizzato (es.
wpcf7mailsentdi Contact Form 7,gform_confirmation_loadeddi Gravity Forms) ma nessuno lo sta ascoltando in GTM. - Il trigger "Form Submission" built-in di GTM non basta perché intercetta il submit del form HTML, non il risultato della chiamata AJAX: se la validazione blocca l'invio, il trigger scatta comunque.
Fix, passo per passo
- Identifica come risponde il form dopo l'invio corretto. Apri gli strumenti sviluppatore (F12) → tab Network, invia il form con dati validi e guarda se parte una chiamata XHR/Fetch con risposta 200. Poi guarda il DOM: appare un nuovo elemento con una classe tipo
.form-successo.wpcf7-mail-sent-ok? - Scegli il pattern in base a cosa hai trovato:
- Se compare un elemento di conferma visibile → usa Element Visibility.
- Se il tuo sviluppatore può aggiungere una riga di codice al callback di successo → usa dataLayer push su successo AJAX (il più affidabile).
- Se il form è generato da un plugin noto (CF7, Gravity Forms, Elementor) → usa listener sull'evento nativo del plugin.
- Crea il trigger in GTM seguendo il template della sezione sotto, associandolo a un tag GA4 Event con nome evento
form_submit_success(o il nome che usi già per coerenza con le altre conversioni). - Aggiungi una variabile dataLayer per il nome del form (
form_idoform_name) così puoi distinguere più form sulla stessa pagina senza creare trigger duplicati. - Testa in modalità Anteprima di GTM prima di pubblicare: invia il form con dati corretti e verifica che l'evento scatti una sola volta, non a ogni tentativo fallito.
- Pubblica il container e monitora per 24-48 ore che il volume di conversioni sia coerente con il numero reale di lead ricevuti (controlla la casella email o il CRM).
Template pronto da copiare
PATTERN 1 - ELEMENT VISIBILITY (trigger nativo GTM)
Trigger type: Element Visibility
Selection method: CSS selector
Element selector: .form-success (sostituisci con la classe reale del tuo messaggio di conferma)
Quando attivare: Once per element
Minimum percent visible: 50
Attiva su: Some Visibility Events → aggiungi condizione se serve limitare a una pagina
PATTERN 2 - DATALAYER PUSH SU SUCCESSO AJAX (il più affidabile, richiede dev)
// Codice da inserire nel callback di successo della chiamata AJAX del form
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'form_submit_success',
'form_id': 'contatto_homepage',
'form_name': 'Richiesta preventivo'
});
--- Trigger GTM ---
Trigger type: Custom Event
Event name: form_submit_success
--- Tag GTM (GA4 Event) ---
Event Name: generate_lead
Event Parameters:
form_id = {{DLV - form_id}}
form_name = {{DLV - form_name}}
PATTERN 3 - LISTENER SU EVENTO DEL PLUGIN
// Contact Form 7 (jQuery custom event, nessun dataLayer nativo)
document.addEventListener('wpcf7mailsent', function(event) {
window.dataLayer.push({
'event': 'form_submit_success',
'form_id': event.detail.contactFormId
});
}, false);
// Gravity Forms
jQuery(document).on('gform_confirmation_loaded', function(event, formId) {
window.dataLayer.push({
'event': 'form_submit_success',
'form_id': formId
});
});
// Elementor Forms
jQuery(document).on('submit_success', function(event, response) {
window.dataLayer.push({
'event': 'form_submit_success',
'form_id': response.data.form_id || 'elementor_form'
});
});
Trigger GTM identico al Pattern 2: Custom Event → form_submit_success
Come verificare che funzioni
Apri l'Anteprima di GTM, invia il form con dati validi e controlla che l'evento form_submit_success compaia una sola volta nel pannello Summary, con i parametri form_id e form_name valorizzati correttamente. Poi ripeti il test lasciando un campo obbligatorio vuoto: l'evento NON deve scattare. Se usi GA4, controlla in DebugView che l'evento arrivi con gli stessi parametri, quindi confronta per una settimana il numero di eventi con i lead effettivamente ricevuti via email o CRM: uno scostamento superiore al 5-10% indica che il trigger sta ancora intercettando tentativi falliti o duplicati.
Una volta che l'evento arriva pulito in GA4, il passo successivo è capire cosa farci: con Next Action Analyst puoi esportare questi dati di conversione insieme al resto delle metriche di campagna e ottenere subito la lista delle azioni prioritarie da fare, invece di passare ore a incrociare fogli di calcolo.
Next Action Analyst trasforma l'export delle tue campagne in una lista di modifiche da fare domani, in ordine di priorità — con i numeri che le giustificano.