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

Abbonamenti ricorrenti WooCommerce: subscription, trial e fallimenti dei rinnovi

07 Nov 2026 — 09:30 9 min di lettura
Abbonamenti ricorrenti WooCommerce: subscription, trial e fallimenti dei rinnovi

Gli abbonamenti WooCommerce sono la parte più redditizia e più delicata di un e-commerce. I trial, i rinnovi falliti, le carte scadute e i dunning management possono perdere clienti silenziosamente ogni mese.

Gli abbonamenti sono il modello commerciale che ogni e-commerce vorrebbe avere. Entrate ricorrenti, LTV alto, clienti che restano. Sul piano tecnico però sono anche la parte più delicata, perché un abbonamento non è una singola transazione andata a buon fine — è una sequenza di transazioni che deve ripetersi ogni mese, per anni, senza interruzioni. E ogni mese qualcuno di quei pagamenti fallisce, e se non lo gestisci bene, il cliente se ne va senza che tu nemmeno te ne accorga.

Il primo problema è che le carte scadono. Una carta valida a gennaio non è valida a dicembre, e non perché il cliente abbia deciso di non pagare — perché la banca ha emesso una nuova carta, o quella è semplicemente scaduta. Il gateway di pagamento prova a caricare, il pagamento fallisce, e senza un sistema di dunning (il processo di retry e recupero) l'abbonamento si interrompe e il cliente perde l'accesso. La maggior parte degli store non ha idea di quanti abbonati perde ogni mese per carte scadute non gestite.

WooCommerce Subscriptions: la base e i suoi limiti

Il plugin di riferimento è WooCommerce Subscriptions (ufficiale). Gestisce cicli di fatturazione, trial, fee di iscrizione, e rinnovi automatici. Funziona, ma di default si limita a provare a caricare la carta al rinnovo e a segnare l'abbonamento come 'on-hold' se il pagamento fallisce. Quello che non fa è gestire il dunning automatico — i retry multipli, gli alert via email al cliente per invitarlo ad aggiornare la carta, e la logica di 'non disattivare subito'.

wp-config.php
// Configurazione base di WooCommerce Subscriptions per ridurre il churn

// 1. Non sospendere subito l'abbonamento al primo fallimento
add_filter( 'woocommerce_subscriptions_failed_payment_retry_max_attempts', function() {
    return 4; // 4 tentativi prima di sospendere
} );

// 2. Intervallo tra i retry (3 giorni tra un tentativo e il successivo)
add_filter( 'woocommerce_subscriptions_failed_payment_retry_interval', function() {
    return 3 * DAY_IN_SECONDS;
} );

// 3. Mantieni l'accesso attivo durante i retry (non sospendere subito)
add_filter( 'woocommerce_subscriptions_failed_payment_retry_suspend_subscription_on_max_attempts', function() {
    return false; // sospendi solo dopo tutti i retry, non al primo
} );
Nota: Il parametro chiave è il terzo: di default WooCommerce Subscriptions sospende l'abbonamento al primo fallimento. Con false mantiene l'accesso attivo per tutta la durata dei retry, riducendo drasticamente il churn dei clienti che avrebbero pagato se solo il sistema avesse provato di nuovo tre giorni dopo.

Dunning: il sistema di recupero che WooCommerce non ha di default

Il dunning è il processo che gestisce i pagamenti falliti: retry automatici a intervalli crescenti, email al cliente per invitarlo ad aggiornare la carta, e logica di 'grazia period' prima della disattivazione. WooCommerce Subscriptions di base non lo fa, serve un'estensione dedicata (WooCommerce Subscriptions Retry o Stripe Billing con dunning integrato). Il punto chiave è che un buon dunning recupera tra il 30% e il 70% degli abbonamenti che altrimenti verrebbero persi.

Per configurarlo senza un plugin aggiuntivo, puoi usare gli hook di WooCommerce Subscriptions per inviare email personalizzate ai clienti dopo ogni fallimento:

wp-config.php
// Email di dunning personalizzata dopo un pagamento fallito
add_action( 'woocommerce_subscription_failed_payment', function( $subscription ) {
    $user_email = $subscription->get_billing_email();
    $retry_count = $subscription->get_failed_payments_count();

    // Solo al primo e al terzo tentativo (non spammare)
    if ( in_array( $retry_count, array( 1, 3 ) ) ) {
        $subject = $retry_count === 1
            ? 'Problema con il pagamento del tuo abbonamento'
            : 'Ultimo avviso: il tuo abbonamento sta per essere sospeso';

        $message = "Ciao,\n\n";
        $message .= "Abbiamo provato a caricare la carta per il rinnovo del tuo abbonamento ma il pagamento non è andato a buon fine.\n";
        $message .= "La causa più comune è una carta scaduta o sostituita.\n\n";
        $message .= "Accedi al tuo account e aggiorna il metodo di pagamento:\n";
        $message .= home_url( '/mio-account/' ) . "\n\n";
        $message .= "Se non risolviamo entro 7 giorni, l'abbonamento verrà sospeso.\n";

        wp_mail( $user_email, $subject, $message );
    }
}, 10, 1 );
Nota: Questo è uno scheletro. In produzione conviene usare un'estensione di dunning dedicata (Stripe Billing o WooCommerce Subscriptions Retry) perché gestisce anche gli scenari edge: carte declined temporaneamente, dispute, chargeback. Il dunning fatto a mano va bene per un numero limitato di abbonamenti, non per migliaia.

Trial e fee di iscrizione: configurarli per non perdere clienti al primo mese

I trial sono lo strumento più efficace per convertire un visitatore in abbonato, ma sono anche il punto dove si perde più gente se mal configurati. Un trial senza richiesta di carta (opt-in trial) ha conversioni più alte in ingresso ma più basse al rinnovo, perché molti si iscrivono senza intenzione di pagare. Un trial con carta richiesta in ingresso ha conversioni più basse ma retention più alta. La scelta dipende dal modello commerciale, ma tecnicamente entrambi richiedono attenzione a una cosa: la transizione trial → pagamento attivo deve essere fluida e prevedibile.

wp-config.php
// Configura un trial di 14 giorni con pagamento attivo solo dopo il trial
// (nella configurazione del prodotto subscription in WooCommerce)

// Trial length: 14 giorni
// Trial price: 0 € (gratis durante il trial)
// Dopo il trial: il primo pagamento viene caricato automaticamente

// Hook per avvisare 3 giorni prima della fine del trial
add_action( 'woocommerce_subscription_pre_trial_end', function( $subscription ) {
    // Solo se il trial finisce tra meno di 3 giorni
    $end = $subscription->get_time( 'trial_end' );
    if ( $end > time() && $end < time() + 3 * DAY_IN_SECONDS ) {
        $user_email = $subscription->get_billing_email();
        wp_mail(
            $user_email,
            'Il tuo trial sta per finire',
            "Il tuo periodo di prova finisce tra 3 giorni. " .
            "Dal prossimo ciclo il pagamento sarà attivo. " .
            "Se vuoi disdire, accedi al tuo account prima della fine del trial."
        );
    }
}, 10, 1 );
Nota: Il pre-trial-end hook avvisa il cliente prima del primo addebito, riducendo i chargeback e le dispute di chi 'non sapeva' che il trial sarebbe diventato a pagamento. La trasparenza sulla transizione trial → pagamento è ciò che distingue un abbonamento ben gestito da uno che genera recensioni negative.

Il monitoraggio del churn: cosa guardare ogni mese

Il dunning configurato male si vede solo nei numeri. Il metric chiave è il MRR churn (Monthly Recurring Revenue lost) confrontato con il MRR gained. Se ogni mese perdi il 5% degli abbonamenti per carte scadute non gestite, stai perdendo il 60% del tuo valore di abbonamento in un anno — senza che nessuno se ne accorga. Le metriche da guardare ogni mese:

Terminale
# Query per estrarre le metriche di churn da WooCommerce Subscriptions
# (da WP-CLI o via SQL diretto sul database)

# Abbonamenti attivi
wp db query "SELECT COUNT(*) FROM wp_postmeta WHERE meta_key = '_subscription_status' AND meta_value = 'active'"

# Abbonamenti sospesi negli ultimi 30 giorni (churn recente)
wp db query "SELECT COUNT(*) FROM wp_postmeta WHERE meta_key = '_subscription_status' AND meta_value = 'on-hold'"

# Abbonamenti cancellati negli ultimi 30 giorni
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_subscription' AND post_status = 'wc-cancelled' AND post_modified > DATE_SUB(NOW(), INTERVAL 30 DAY)"

# Pagamenti falliti negli ultimi 30 giorni (potenziali recuperi persi)
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-failed' AND post_date > DATE_SUB(NOW(), INTERVAL 30 DAY)"
Nota: Se il numero di abbonamenti on-hold cresce ogni mese mentre gli active calano, il dunning non sta lavorando. Un dunning ben configurato mantiene il rapporto active/on-hold stabile — gli abbonamenti che falliscono vengono recuperati o disattivati in modo pulito, non si accumulano in limbo.

Gli abbonamenti sono il modello commerciale più redditizio che un e-commerce possa costruire, e sono anche quello dove la cura tecnica fa la differenza più grande. Un dunning ben configurato recupera clienti che altrimenti se ne andrebbero silenziosamente. Un trial mal gestito perde fiducia prima ancora di perdere fatturato. Un monitoraggio del churn trasforma 'perdiamo abbonati ogni mese' in 'sappiamo dove e perché'. La differenza tra un e-commerce di abbonamenti che cresce e uno che ristagna, spesso, è tutta in questa parte invisibile.

Assistenza WooCommerce

Abbonamenti, rinnovi e dunning del tuo e-commerce sotto controllo.

Verifica tecnica del tuo store WooCommerce con abbonamenti: configurazione subscription, dunning, recupero dei rinnovi falliti e monitoraggio del churn.

Assistenza WooCommerce
Condividi