Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineWooCommerce

Carrello abbandonato WooCommerce: recuperare il 30% delle vendite perse

28 Ott 2026 — 09:30 9 min di lettura
Carrello abbandonato WooCommerce: recuperare il 30% delle vendite perse

Il 70% dei carrelli WooCommerce viene abbandonato. È la più grande perdita di fatturato silenziosa dell'e-commerce. Come tracciare i carrelli abbandonati, inviare email di recupero automatiche, e perché il tempismo delle email fa la differenza tra recuperare un ordine e perderlo per sempre.

Il dato è noto ma sempre doloroso: il 70% dei carrelli nei negozi online viene abbandonato. Sette clienti su dieci aggiungono prodotti al carrello, iniziano il checkout, e poi se ne vanno. Non completano l'ordine. Non pagano. Il carrello resta lì, come una stanza con la luce accesa e nessuno dentro. Per un negozio che fattura 100.000 € al mese, il carrello abbandonato rappresenta 30.000 € di vendite che sono lì, a un passo dalla conversione, e che se ne vanno.

La buona notizia è che il carrello abbandonato è recuperabile. Non tutto, ma una parte significativa — il 10-15% dei carrelli abbandonati può essere recuperato con le email giuste, al momento giusto. Non è magia: è metodologia. Tracciare i carrelli, inviare email di recupero automatiche, e rispettare il cliente che ha deciso di non completare. Il recupero del carrello abbandonato è una delle leve di fatturato più concrete e misurabili dell'e-commerce.

Tracciare i carrelli abbandonati: il primo passo

WooCommerce non traccia i carrelli abbandonati di default — traccia solo gli ordini completati. Per tracciare i carrelli abbandonati, devi registrare i carrelli che contengono prodotti ma non sono stati completati. Il modo più semplice è usare una sessione custom che salva i dati del carrello quando l'utente inserisce l'email nel checkout:

wp-config.php
<?php
// Tracciamento carrelli abbandonati via session/transient

// Salva i dati del carrello quando l'utente inserisce l'email nel checkout
add_action( 'woocommerce_after_checkout_billing_form', function() {
    if ( ! WC()->cart || WC()->cart->is_empty() ) return;

    $cart_data = array(
        'cart_contents' => WC()->cart->get_cart_contents(),
        'total'         => WC()->cart->get_cart_contents_total(),
        'items_count'   => WC()->cart->get_cart_contents_count(),
        'timestamp'     => current_time( 'timestamp' ),
    );

    // Salva in sessione (per utenti non loggati)
    WC()->session->set( 'abandoned_cart', $cart_data );
} );

// Quando l'utente inserisce l'email nel campo billing, salvala
add_action( 'woocommerce_checkout_update_order_review', function( $post_data ) {
    parse_str( $post_data, $data );
    $email = $data['billing_email'] ?? '';
    if ( is_email( $email ) ) {
        WC()->session->set( 'abandoned_cart_email', sanitize_email( $email ) );
    }
} );

// Salva il carrello abbandonato in un custom post type o tabella custom
// quando l'utente lascia il sito senza completare l'ordine
add_action( 'woocommerce_cart_updated', function() {
    $email = WC()->session->get( 'abandoned_cart_email' );
    if ( ! $email || ! WC()->cart || WC()->cart->is_empty() ) return;

    $cart_data = array(
        'email'       => $email,
        'contents'    => WC()->cart->get_cart_contents(),
        'total'       => WC()->cart->get_cart_contents_total(),
        'created_at'   => current_time( 'mysql' ),
        'status'      => 'abandoned',
    );

    // Salva in un custom post type 'abandoned_cart'
    // o in una tabella custom per performance migliori
    $existing = get_posts( array(
        'post_type'   => 'abandoned_cart',
        'meta_key'    => '_cart_email',
        'meta_value'  => $email,
        'post_status' => 'any',
        'numberposts' => 1,
    ) );

    if ( $existing ) {
        update_post_meta( $existing[0]->ID, '_cart_data', $cart_data );
    } else {
        $post_id = wp_insert_post( array(
            'post_type'   => 'abandoned_cart',
            'post_status'  => 'private',
            'post_title'   => 'Carrello abbandonato — ' . $email,
        ) );
        update_post_meta( $post_id, '_cart_email', $email );
        update_post_meta( $post_id, '_cart_data', $cart_data );
    }
} );
Nota: Per volumi alti, usa una tabella custom invece di un custom post type — le query su wp_posts con meta sono lente su grandi volumi. Esiste anche il plugin 'CartBounty' o 'Abandoned Cart Lite for WooCommerce' che gestisce il tracciamento senza codice custom.

Le email di recupero: tempismo e sequenza

Una volta tracciato il carrello abbandonato, il recupero avviene via email. La sequenza che funziona meglio è di tre email, con tempistiche precise. La prima email va inviata 1 ora dopo l'abbandono — è il momento in cui il cliente ha ancora il carrello in mente e l'intenzione di acquisto è fresca. La seconda a 24 ore — per chi non ha visto la prima o aveva bisogno di tempo. La terza a 72 ore — ultima chance, spesso con un piccolo incentivo.

wp-config.php
<?php
// Sequenza email di recupero carrello abbandonato
// Programmata con wp-cron (o cron di sistema per affidabilità)

add_action( 'wp', function() {
    if ( ! wp_next_scheduled( 'wp_planet_abandoned_cart_recovery' ) ) {
        wp_schedule_event( time(), 'hourly', 'wp_planet_abandoned_cart_recovery' );
    }
} );

add_action( 'wp_planet_abandoned_cart_recovery', function() {
    global $wpdb;

    // Trova i carrelli abbandonati da 1 ora (prima email)
    $one_hour_ago = gmdate( 'Y-m-d H:i:s', time() - 3600 );
    $carts = get_posts( array(
        'post_type'      => 'abandoned_cart',
        'post_status'    => 'private',
        'meta_key'       => '_cart_status',
        'meta_value'     => 'abandoned',
        'date_query'     => array(
            array( 'column' => 'post_date', 'before' => $one_hour_ago ),
        ),
        'posts_per_page' => 50,
    ) );

    foreach ( $carts as $cart_post ) {
        $cart_data = get_post_meta( $cart_post->ID, '_cart_data', true );
        $email     = $cart_data['email'] ?? '';
        $sent_1    = get_post_meta( $cart_post->ID, '_email_1_sent', true );

        if ( ! $email || $sent_1 ) continue;

        // Invia la prima email di recupero
        $subject = 'Hai dimenticato qualcosa nel carrello?';
        $message = "Ciao,\n\n";
        $message .= "Abbiamo notato che hai lasciato alcuni articoli nel carrello.\n";
        $message .= "Sono ancora lì che ti aspettano!\n\n";
        $message .= "Totale: " . wc_price( $cart_data['total'] ) . "\n\n";
        $message .= "Completa l'ordine: https://example.com/carrello\n";

        wp_mail( $email, $subject, $message );
        update_post_meta( $cart_post->ID, '_email_1_sent', current_time( 'mysql' ) );
        update_post_meta( $cart_post->ID, '_cart_status', 'email_1_sent' );
    }
} );
Nota: Per affidabilità, sostituisci wp-cron con un cron di sistema (vedi il nostro articolo su wp-cron). Le email di recupero devono rispettare il GDPR: includi un link di disiscrizione e non inviare a chi non ha dato consenso al marketing. Le email transazionali (recupero carrello) sono generalmente permesse senza consenso esplicito, ma verifica la normativa applicabile.

Il contenuto delle email: cosa funziona davvero

Il contenuto delle email di recupero è importante quanto il tempismo. La prima email deve essere semplice: un promemoria, il contenuto del carrello, e un link diretto al checkout. Niente sconto — il cliente non ha abbandonato per prezzo, ha abbandonato per distrazione. La seconda email può aggiungere una prova sociale (recensioni dei prodotti nel carrello). La terza email, se il cliente non ha risposto alle prime due, può includere un piccolo incentivo: spedizione gratuita o uno sconto del 5-10%.

L'errore più comune è inviare lo sconto nella prima email. Questo addestra i clienti ad abbandonare il carrello sapendo che riceveranno uno sconto — un circolo vizioso che erode i margini. Lo sconto è l'ultima risorsa, non la prima. Il recupero del carrello abbandonato è prima di tutto un servizio al cliente: gli ricordi che aveva intenzione di comprare e gli rendi facile completare. Il 70% degli abbandoni non è rifiuto — è distrazione. E la distrazione si cura con un promemoria al momento giusto.

Assistenza WooCommerce

Checkout, pagamenti e prestazioni del tuo e-commerce sotto controllo.

Verifica tecnica del tuo store WooCommerce: aggiornamenti controllati, sicurezza e ottimizzazione delle prestazioni.

Assistenza WooCommerce
Condividi