Sai qual è il problema più comune che vedo nelle campagne Google Ads di cliniche, studi medici e professionisti della salute?
Non il budget troppo basso. Non il copy degli annunci sbagliato. Non il targeting.
Il problema è che non sanno cosa sta succedendo dopo il click.
Spendono soldi per portare utenti sul sito, gli utenti arrivano, e poi… silenzio. Nessun dato affidabile su quanti hanno chiamato, quanti hanno compilato un form, quanti erano solo curiosi. Si va avanti a sensazione, e a sensazione non si ottimizza niente.
Questo caso studio racconta esattamente com'è nato e come ho implementato un Piano di Misurazione completo per il sito web di una Clinica Odontoiatrica, con l'obiettivo di mettere Google Analytics 4 e Google Ads nelle condizioni di lavorare davvero non di fare scena.
Il punto di partenza: cosa mancava
Prima di mettere mano a qualsiasi configurazione, ho analizzato la situazione. Il sito aveva già Google Analytics e Tag Manager installati, ma erano configurati in modo generico, senza eventi personalizzati, senza conversioni tracciate correttamente su Google Ads. In pratica, le campagne giravano alla cieca.
Per una clinica odontoiatrica, i momenti di contatto reale con il potenziale paziente sono pochi e ben definiti:
- Compilare un form di contatto
- Cliccare sul numero di telefono
- Prenotare un appuntamento
Se non tracci queste azioni in modo preciso, non puoi ottimizzare niente. Puoi solo sperare.
La configurazione: Tag Manager → GA4
Il primo step è stato strutturare tutti i tracciamenti tramite Google Tag Manager, collegandoli a GA4. Ecco cosa ho tracciato nel dettaglio.
Invio del form in pagina e invio del form sul popup
Sul sito erano presenti due form di contatto: uno fisso nelle varie pagine, uno che compare su un popup. Ho scelto di tracciare i due form separatamente, in modo da poter rispondere a una domanda precisa: i pazienti che arrivano dalle campagne preferiscono compilare il form in pagina o quello del popup?
Non è un dettaglio estetico. Sapere da quale punto di contatto arriva la maggior parte delle richieste permette di ottimizzare il design e la UX del sito in modo molto più chirurgico.
Come ho implementato il tutto praticamente
Come prima cosa, ho creato un Tag di tipo Custom HTML per capire se il click apre un popup oppure no, questo è il codice:
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
popup_form_context: 'classe_css_pulsante'
});
</script>
Successivamente ho fatto una piccola modifica al listener dedicato ad Hubspot aggiungendo questo codice:
window.dataLayer = window.dataLayer || [];
// Funzione helper per leggere il contesto (evita duplicazione codice)
function getFormContext() {
var dlState = window.dataLayer
.slice()
.reverse()
.find(function(item) { return item.popup_form_context; });
return dlState ? dlState.popup_form_context : 'inline';
}
function resetFormContext() {
window.dataLayer.push({ popup_form_context: undefined });
}
Questa è una funzione legge il tipo di click, etichettato dal codice precedente e lo aggiunge alla submission. Fatto ciò ho usato i listener di Hubspot per tracciare la submission e identificare se il contatto è arrivato dal form all'interno del popup oppure se arriva da form che si trova in pagina.
Il secondo è il listener principale, che intercetta l'invio del form (gestito da HubSpot Forms V4), legge il contesto (form in pagina o popup), raccoglie i valori dei campi incluso l'indirizzo email e li invia al dataLayer con tutti i parametri necessari per GA4 e Google Ads:
<script>
window.dataLayer = window.dataLayer || [];
// Funzione helper per leggere il contesto (evita duplicazione codice)
function getFormContext() {
var dlState = window.dataLayer
.slice()
.reverse()
.find(function(item) { return item.popup_form_context; });
return dlState ? dlState.popup_form_context : 'inline';
}
function resetFormContext() {
window.dataLayer.push({ popup_form_context: undefined });
}
// Listener v3
window.addEventListener('message', function(event) {
if (event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormSubmitted') {
var context = getFormContext();
window.dataLayer.push({
event: 'form_submission',
form_id: event.data.id,
conversion_id: event.data.data.conversionId,
form_data: event.data.data.submissionValues,
form_context: context
});
resetFormContext();
}
});
// Listener v4
window.addEventListener("hs-form-event:on-submission:success", function(event) {
var context = getFormContext(); // ✅ Leggi PRIMA della Promise
var hsform = HubspotFormsV4.getFormFromEvent(event);
if (hsform) {
hsform.getFormFieldValues().then(function(fieldValues) {
var transformedData = fieldValues.reduce(function(obj, item) {
var key = item.name.split('/')[1];
if (key) {
obj[key] = item.value;
}
return obj;
}, {});
window.dataLayer.push({
event: "form_submission",
form_id: hsform.getFormId(),
conversion_id: hsform.getConversionId(),
form_data: transformedData,
form_context: context
});
resetFormContext(); // ✅ Reset DENTRO il .then(), dopo il push
});
}
});
</script>
È da questo oggetto form_data che estraggo l'email dell'utente, che poi viene passata sia a GA4 che a Google Ads (sempre con hashing SHA-256 prima dell'invio).
Questi codice gli ho sviluppati con Claude Code. Di seguito uno schema semplificato
1. Utente clicca "Prenota appuntamento"
↓
2. GTM intercetta il click (trigger CSS class)
↓
3. GTM esegue il tag → scrive nel dataLayer:
{ popup_form_context: 'classe_css_popup' }
↓
4. Si apre il popup con il form HubSpot
↓
5. Utente compila e invia il form
↓
6. Il listener si attiva → chiama getFormContext()
↓
7. getFormContext() trova 'classe_css_popup' nel dataLayer
↓
8. Push con form_context: 'classe_css_popup'
↓
9. Reset → popup_form_context: undefined
Click sul pulsante "Prenota un appuntamento"
Questo pulsante è quello che fa comparire il popup. Ho tracciato anche questo evento perché c'è una differenza importante tra chi clicca il pulsante e chi poi compila e invia il form. Se tanti cliccano ma pochi inviano, c'è un problema nel form o nel popup — e ora abbiamo i dati per vederlo.
Click sul numero di telefono
Per una clinica, la telefonata è spesso il primo contatto di fiducia. Ho tracciato il click sul numero di telefono cliccabile presente nel sito, in modo da avere una visione completa di tutte le azioni di contatto — non solo quelle digitali.
Percentuali di Scroll: 10%, 25%, 50%, 75%, 90%
Lo scroll tracking è uno di quei dati che molti ignorano ma che vale oro. Se il 70% degli utenti che arrivano da campagne abbandona la pagina al 25% dello scroll, vuol dire che quello che conta — offerta, riprova sociale, call to action — probabilmente sta troppo in basso. Questi dati aiutano a capire se il contenuto della pagina è strutturato nel modo giusto.
Tag di Hotjar
Ho lasciato attivo il tag di Hotjar, che registra le sessioni degli utenti e genera heatmap. Un complemento perfetto ai dati quantitativi di GA4: mentre GA4 ti dice quanti utenti si fermano a metà pagina, Hotjar ti mostra perché si fermano.
Eventi Chiave e Dimensione Personalizzata
Tutti questi eventi in GA4 li ho contrassegnati come "Eventi Chiave" (ex conversioni). Questo permette di filtrarli facilmente nei report e di tenerli separati dal "rumore" di tutti gli altri eventi che GA4 raccoglie in automatico.
Ho aggiunto anche una Dimensione Personalizzata per tracciare l'ID del form. Apparentemente un dettaglio tecnico, in realtà è quello che permette di capire, in futuro, se uno stesso utente ha interagito con più form o con lo stesso form più volte.
La configurazione: Tag Manager → Google Ads
Qui la logica cambia. E capire perché è fondamentale.
Tracciamento unificato dell'invio del form
Su GA4 ho tenuto separati i due form (quello in pagina e quello del popup). Su Google Ads, invece, li ho unificati in un'unica azione di conversione.
Perché questa differenza? Perché per Google Ads e per il suo algoritmo di ottimizzazione i due form rappresentano la stessa cosa: un utente che vuole contattare la clinica. Se li tenessi separati, avrei due azioni di conversione con pochi dati ciascuna, soprattutto all'inizio. Il machine learning di Google ha bisogno di un volume minimo di conversioni per imparare e ottimizzare. Meglio concentrare tutti i dati su un'unica segnale forte piuttosto che frammentarli su due segnali deboli.
Tracciamento del click sul numero di telefono
Questo vale sia da desktop (click sul numero testuale) che da mobile, dove compare un'icona telefono in basso a sinistra. In entrambi i casi, ho configurato il tracciamento come azione di conversione su Google Ads.
La ciliegina: le Conversioni Avanzate
Questa è la parte che fa la differenza rispetto a una configurazione standard.
Ho attivato le Conversioni Avanzate su Google Ads. Quando un utente compila il form di contatto, oltre alla normale conversione, Google Ads cattura l'indirizzo email inserito nel modulo e lo invia a Google in forma anonimizzata tramite hash SHA-256, quindi senza alcun problema di privacy né di GDPR.
A cosa serve? A qualcosa di molto potente: Google usa quell'informazione per identificare utenti con caratteristiche simili a chi ha già convertito. È il meccanismo alla base dei "Segmenti di pubblico simili" simile al lookalike audience di Meta, ma alimentato direttamente dai tuoi dati di conversione reale.
Risultato pratico: nel tempo, le campagne impareranno a trovare persone simili a chi ha già prenotato un appuntamento, non solo persone che cercano parole chiave vagamente correlate all'odontoiatria.
Lo stato attuale: tutto verificato, pronti al via
Ho verificato l'intera configurazione con il Debug Mode di Tag Manager, testando ogni singolo evento: click, scroll, invio form da pagina, invio form da popup, click sul telefono. Tutto funziona correttamente.
La fase successiva quella che produrrà i dati veri è il lancio delle campagne. Solo con traffico reale potremo vedere i tassi di conversione, capire da quali pagine arrivano più contatti e iniziare a ottimizzare il ROI in modo sistematico, non a intuito.
Conclusione
Un Piano di Misurazione non è un lusso da grandi aziende. È la fondamenta senza cui qualsiasi campagna pubblicitaria diventa una scommessa.
Per questa clinica odontoiatrica ho costruito un sistema che sa distinguere un paziente che chiama da uno che scrive, sa capire se il popup converte meglio del form in pagina, e sa dare a Google le informazioni giuste per trovare nuovi pazienti in modo sempre più preciso.
Questo non è fare marketing. È fare marketing misurabile. E c'è una differenza abissale.


