Οδηγός βήμα-προς-βήμα για custom form tracking στο checkout μέσω GTM. Εντοπίζουμε ακριβώς ποια πεδία και validation errors ρίχνουν το conversion rate.
Με form tracking στο GTM βλέπεις σε ποιο ακριβώς πεδίο του checkout σταματούν οι χρήστες και ποια validation errors τους διώχνουν πριν την αγορά. Σε αυτόν τον οδηγό στήνουμε βήμα βήμα field-level tracking με Google Tag Manager και GA4 και δείχνουμε πώς διαβάζεις τα δεδομένα για να απλοποιήσεις τη φόρμα. Το standard e-commerce funnel στο GA4 σου δείχνει συνήθως μια απότομη πτώση ανάμεσα στο begin_checkout και το purchase. Αυτό που δεν σου λέει ποτέ από μόνο του είναι αν ο χρήστης έφυγε επειδή κόλλησε στον ταχυδρομικό κώδικα, αν έβγαλε σφάλμα το πεδίο του τηλεφώνου ή αν απλά κουράστηκε από τα περιττά inputs. Γι' αυτό το custom form tracking είναι από τα πρώτα πράγματα που υλοποιούμε σε κάθε checkout, ώστε οι υποθέσεις να γίνουν μετρήσιμα δεδομένα.
TL;DR:
- Το native form tracking του GA4 αποτυγχάνει στα περισσότερα custom checkouts και single-page applications.
- Στήνουμε custom event listeners στο GTM για να καταγράφουμε
form_field_focus,form_field_blurκαι κυρίωςform_field_error. - Σύμφωνα με τις έρευνες usability του Baymard Institute, τα περισσότερα checkouts ζητούν περισσότερα πεδία από όσα χρειάζονται, αυξάνοντας το cognitive load.
Γιατί το standard GA4 form abandonment tracking αποτυγχάνει στο checkout
Το αυτόματο Enhanced Measurement του GA4 περιλαμβάνει Form interactions, αλλά σε πραγματικά e-commerce setups σχεδόν πάντα δημιουργεί προβλήματα. Είτε καταγράφει άσχετα inputs (όπως search bars ή newsletter popups), είτε δεν στέλνει καθόλου events επειδή τα σύγχρονα checkouts βασίζονται σε JavaScript frameworks (React, Vue) χωρίς κλασικό HTML submit.
Για να κάνουμε πραγματικό checkout optimization, χρειαζόμαστε granular δεδομένα σε επίπεδο πεδίου. Θέλουμε να γνωρίζουμε:
- Ποιο ήταν το τελευταίο πεδίο με το οποίο αλληλεπίδρασε ο χρήστης πριν εγκαταλείψει (field abandonment).
- Ποια πεδία προκαλούν validation errors (π.χ. μη αποδεκτό format τηλεφώνου ή κάρτας).
- Πόσο χρόνο ξοδεύει ο χρήστης συμπληρώνοντας συγκεκριμένα blocks της φόρμας.
Αν μετράς μόνο το τελικό drop-off rate του checkout, ξέρεις απλώς ότι χάνεις χρήματα. Αν μετράς field-level errors, ξέρεις ακριβώς ποια γραμμή κώδικα πρέπει να διορθώσεις.
Βήμα 1: Πώς στήνεται custom JavaScript listener στο GTM
Για να παρακολουθήσουμε την αλληλεπίδραση χωρίς να φορτώνουμε περιττά plugins, χρησιμοποιούμε έναν ελαφρύ Custom HTML Tag στο Google Tag Manager που ακούει τα events focusout (blur) και εντοπίζει τυχόν validation errors.
Δημιουργούμε ένα Tag τύπου Custom HTML στο GTM με trigger στο Page View του checkout:
<script>
(function() {
var checkoutForm = document.querySelector('form.checkout, form#order-form'); // Προσάρμοσε τον selector
if (!checkoutForm) return;
// Καταγραφή αποχώρησης από πεδίο (blur)
checkoutForm.addEventListener('focusout', function(e) {
var target = e.target;
if (['INPUT', 'SELECT', 'TEXTAREA'].indexOf(target.tagName) !== -1) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'custom_form_interaction',
'form_id': checkoutForm.id || 'checkout',
'field_name': target.name || target.id || 'unnamed_field',
'field_type': target.type || target.tagName.toLowerCase()
});
}
}, true);
// Καταγραφή validation errors (παράδειγμα με MutationObserver για dynamic error classes)
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
var target = mutation.target;
if (target.classList.contains('error') || target.classList.contains('is-invalid')) {
window.dataLayer.push({
'event': 'custom_form_error',
'form_id': checkoutForm.id || 'checkout',
'field_name': target.name || target.id,
'error_message': target.getAttribute('data-error') || 'validation_error'
});
}
}
});
});
observer.observe(checkoutForm, { attributes: true, subtree: true, attributeFilter: ['class'] });
})();
</script>
Αυτή η προσέγγιση εξασφαλίζει ότι το dataLayer ενημερώνεται σε πραγματικό χρόνο χωρίς να επιβαρύνει το rendering της σελίδας, σύμφωνα με τις βέλτιστες πρακτικές για web performance και DOM manipulation.


Βήμα 2: Πώς στέλνεις τα events στο GA4 με custom dimensions
Μόλις τα events αρχίσουν να μπαίνουν στο dataLayer, τα στέλνουμε στο GA4:
- Data Layer Variables: Φτιάχνουμε μεταβλητές στο GTM για τα
field_name,field_type,error_messageκαιform_id. - Custom Event Triggers: Δημιουργούμε δύο triggers τύπου Custom Event για τα
custom_form_interactionκαιcustom_form_error. - GA4 Event Tag: Στήνουμε ένα GA4 Event Tag που πυροδοτείται από αυτά τα triggers, στέλνοντας τις παραμέτρους στο GA4.
Για σωστό reporting, καταχωρούμε τα field_name και error_message ως Event-scoped Custom Dimensions μέσα από το interface του GA4 (Admin > Custom definitions). Αν χρειάζεσαι βοήθεια στον καθαρισμό της αρχιτεκτονικής των tags σου, δες πώς δουλεύουμε το tracking setup με Google Tag Manager.
Βήμα 3: Πώς βρίσκεις τα σημεία τριβής με Funnel Exploration
Με τα δεδομένα στο GA4, δημιουργούμε ένα Funnel Exploration report. Βάζουμε ως διαδοχικά βήματα τα interaction events ανά πεδίο (π.χ. email → shipping_address → payment_method) και εφαρμόζουμε breakdown με βάση το field_name στα error events.
Έτσι εντοπίζουμε γρήγορα μοτίβα: για παράδειγμα, αν μεγάλο μέρος των χρηστών που βλέπουν error στο πεδίο «Τηλέφωνο» εγκαταλείπει τη σελίδα, το πρόβλημα δεν είναι το pricing αλλά το αυστηρό validation regex του πεδίου.
Για την εικόνα ολόκληρου του funnel, συνδυάζουμε αυτά τα ευρήματα με funnel analysis για το cart abandonment και με τις διορθώσεις για τα cognitive biases στο checkout.


Πώς μειώνεις την εγκατάλειψη του checkout με βάση την UX έρευνα
Η καταγραφή των λαθών είναι το μισό κομμάτι, η επίλυση είναι το άλλο μισό. Σύμφωνα με εκτεταμένες έρευνες του Baymard Institute πάνω στο checkout usability:
- Αφαίρεση περιττών πεδίων: Πολλά checkouts ζητούν πεδία που δεν χρειάζονται για την ολοκλήρωση της παραγγελίας. Κάθε επιπλέον input αυξάνει το interaction cost.
- Address Autocomplete: Η χρήση του Google Places API μειώνει τα τυπογραφικά λάθη και επιταχύνει τη διαδικασία.
- Inline Validation: Ενημερώνουμε τον χρήστη για το σφάλμα τη στιγμή που φεύγει από το πεδίο, όχι αφού πατήσει το τελικό κουμπί πληρωμής.
- Νόμος του Hick (Hick's Law): Όσο περισσότερες επιλογές και πεδία δίνουμε ταυτόχρονα, τόσο αυξάνεται ο χρόνος απόφασης και το cognitive load. Ομαδοποιούμε τα πεδία σε ξεκάθαρα, λογικά βήματα.
Συχνές ερωτήσεις
Πώς βλέπω το GA4 form abandonment ανά πεδίο;
Στο GA4 πηγαίνεις στο Explore και φτιάχνεις ένα Funnel Exploration με βάση τα custom events που στείλαμε από το GTM (custom_form_interaction). Ορίζεις κάθε πεδίο ως ξεχωριστό step ή χρησιμοποιείς το field_name ως breakdown dimension.
Επιβαρύνει το custom listener script την ταχύτητα της σελίδας;
Όχι αν υλοποιηθεί σωστά με native JavaScript event delegation και MutationObserver. Το script ακούει τα events σε επίπεδο form container και δεν μπλοκάρει το main execution thread του browser.
Χρειάζεται να καταγράφω τι πληκτρολογεί ο χρήστης στο πεδίο;
Όχι και απαγορεύεται ρητά από τους κανονισμούς GDPR και τα policies της Google περί PII (Personally Identifiable Information). Καταγράφουμε αποκλειστικά το όνομα/αναγνωριστικό του πεδίου (π.χ. billing_phone) και τον τύπο του validation error, ποτέ την τιμή (value) που πληκτρολόγησε ο πελάτης.
Σταματάμε να μαντεύουμε γιατί φεύγουν οι χρήστες στο τελευταίο βήμα της αγοράς. Στήσε το field-level tracking, εντόπισε ποιο input δημιουργεί validation errors και απλοποίησε τη φόρμα αφαιρώντας ό,τι δεν είναι απολύτως απαραίτητο. Αν θέλεις να εντοπίσουμε μαζί τα σημεία τριβής στο δικό σου checkout, δες πώς δουλεύουμε τη βελτιστοποίηση conversion rate με CRO.

Γράφτηκε από τον Δημήτρη Ανδρεαδάκη