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'.
// 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
} );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:
// 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 );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.
// 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 );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:
# 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)"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.
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.
Articoli correlati

Caching e pagine dinamiche: perché il carrello WooCommerce non si può (e non si deve) cachare
Leggi
Gateway di pagamento WooCommerce: Stripe, PayPal e la sicurezza del checkout
Leggi
