Contratti di Manutenzione WordPress: Recurring Revenue per Freelance
Perché i Contratti di Manutenzione nel 2026
Il problema numero uno di chi lavora come freelance developer — lo conosci bene — è l’instabilità del reddito. Un mese fatturi 4.000€, il mese dopo 800€. I contratti di manutenzione WordPress sono la risposta più concreta e immediata a questo problema: trasformano ogni sito consegnato in una fonte di recurring revenue, ovvero entrate ricorrenti e prevedibili ogni mese.
Nel 2026, un sito WordPress senza manutenzione attiva è un sito a rischio. Le vulnerabilità si moltiplicano, i plugin si aggiornano in modo incompatibile, le performance degradano. I clienti lo sanno — spesso non sanno gestirlo, ma sanno che il problema esiste. La tua proposta di valore è semplice: io mi occupo di tutto, tu non ci pensi più.
Se sei già partito a strutturare le tue tariffe come freelance, il salto verso i contratti ricorrenti è naturale. Come abbiamo visto nell’articolo su come alzare le tariffe da freelance developer, il passaggio da tariffazione oraria a pacchetti ricorrenti non solo stabilizza il reddito, ma aumenta anche il valore percepito. Un cliente che paga 200€/mese per 12 mesi è un cliente che non devi riconquistare ogni volta.
In questo articolo vediamo come strutturare contratti di manutenzione WordPress professionali: i tier di prezzo, cosa includere, come automatizzare buona parte del lavoro, e come vendere questi pacchetti ai clienti esistenti e nuovi.
Struttura dei Tier: Basic, Standard, Premium
Il primo errore di chi inizia con i contratti di manutenzione è offrire un’unica soluzione. Il mercato ha bisogni diversi: un piccolo sito vetrina ha esigenze diverse da un e-commerce con 500 ordini al mese. Strutturare tre tier di pacchetto ti permette di coprire più segmenti e di usare il prezzo medio per guidare i clienti verso la soluzione più adatta.
Ecco una struttura testata e funzionante:
- Basic (79-99€/mese): Aggiornamento mensile di core, plugin e tema. Backup settimanale. Report mensile semplice. Ideale per siti vetrina o blog con poco traffico.
- Standard (149-199€/mese): Tutto del Basic + monitoraggio uptime 24/7, scansione malware mensile, ottimizzazione database, 1 ora di supporto tecnico inclusa. Per PMI e siti con attività commerciale.
- Premium (299-399€/mese): Tutto dello Standard + backup giornaliero, monitoraggio performance (Core Web Vitals), 3 ore di modifiche incluse, priorità nelle risposte (SLA 4h). Per e-commerce e siti critici.
Il tier Standard di solito è quello che converte di più: non è il più economico (che fa sembrare il servizio di scarso valore) né il più caro (che spaventa i clienti piccoli). Usa questa struttura come punto di partenza, poi adattala al tuo mercato.
Il Contratto: Clausole Essenziali da Includere
Un contratto di manutenzione senza le giuste clausole è un contratto che crea problemi. Ho già trattato nel dettaglio le clausole essenziali per un contratto freelance developer, ma per la manutenzione WordPress ci sono alcune specificità da considerare.
Le clausole irrinunciabili per un contratto di manutenzione:
- Scope of work preciso: Elenca esattamente cosa è incluso e cosa non lo è. “Aggiornamento plugin” non include la risoluzione di conflitti post-aggiornamento? Scrivilo.
- Responsabilità limitata: Sei responsabile per i danni causati dalla tua negligenza, non per ogni problema che capita sul sito.
- Accesso e credenziali: Il cliente deve fornire accesso admin WP, FTP/SSH e cPanel. Senza accesso non puoi lavorare.
- Pagamento anticipato: Sempre. Il 15 del mese per il mese successivo, oppure annuale con sconto del 10-15%.
- Disdetta con preavviso: 30 giorni di preavviso scritto. Evita cancellazioni improvvise.
- Escalation fuori scope: Se emerge un problema che richiede intervento extra (hack, migrazione, redesign), si quota separatamente.
Ecco un template base della clausola di scope da adattare:
## Servizi Inclusi nel Pacchetto Standard
Il presente contratto include i seguenti servizi mensili:
1. **Aggiornamento core WordPress** (rilasci stabili)
2. **Aggiornamento plugin attivi** (max 20 plugin)
3. **Aggiornamento tema attivo** (tema genitore e figlio)
4. **Backup settimanale** su storage esterno (ritenzione 4 settimane)
5. **Monitoraggio uptime** con notifica entro 15 minuti
6. **Scansione malware** mensile con report
7. **Ottimizzazione database** mensile (clean revisions, transients)
8. **Report mensile** con attività svolte e stato sito
## Servizi NON Inclusi
- Creazione o modifica di contenuti
- Sviluppo di nuove funzionalità
- Risoluzione di problemi causati da modifiche del cliente
- Migrazione hosting
- Ottimizzazione SEO
- Interventi su siti compromessi da hack precedenti alla firmaAutomatizzare la Manutenzione con WP-CLI e Script
Se gestisci 10+ siti in manutenzione e aggiorni tutto a mano, sei già in perdita di tempo. La chiave per rendere profittevoli i contratti di manutenzione è automatizzare il lavoro ripetitivo. WP-CLI è il tuo migliore alleato: ti permette di gestire WordPress da riga di comando, ideale per script batch su più siti.
Uno script bash per aggiornare tutti i siti sul tuo server con WP-CLI:
#!/bin/bash
# maintenance-batch.sh — Aggiornamento batch siti WordPress
# Uso: ./maintenance-batch.sh /etc/wp-sites.conf
SITES_FILE="$1"
LOG_DIR="/var/log/wp-maintenance"
DATE=$(date +%Y-%m-%d)
mkdir -p "$LOG_DIR"
while IFS=: read -r SITE_NAME WP_PATH; do
echo "=== Processing: $SITE_NAME ==="
LOG="$LOG_DIR/${SITE_NAME}-${DATE}.log"
# Backup database prima degli aggiornamenti
wp --path="$WP_PATH" db export "$LOG_DIR/${SITE_NAME}-${DATE}-pre-update.sql" --allow-root 2>>"$LOG"
# Aggiorna core
wp --path="$WP_PATH" core update --allow-root 2>>"$LOG"
wp --path="$WP_PATH" core update-db --allow-root 2>>"$LOG"
# Aggiorna plugin (escludi plugin con problemi noti)
wp --path="$WP_PATH" plugin update --all --exclude=problematic-plugin --allow-root 2>>"$LOG"
# Aggiorna temi
wp --path="$WP_PATH" theme update --all --allow-root 2>>"$LOG"
# Ottimizza database
wp --path="$WP_PATH" db optimize --allow-root 2>>"$LOG"
wp --path="$WP_PATH" cache flush --allow-root 2>>"$LOG"
# Rimuovi revisioni vecchie (mantieni ultime 3)
wp --path="$WP_PATH" post delete $(wp --path="$WP_PATH" post list --post_type=revision --format=ids --allow-root) --force --allow-root 2>>"$LOG"
echo "DONE: $SITE_NAME — log: $LOG"
done < "$SITES_FILE"
echo "=== Batch completato: $(date) ==="Il file wp-sites.conf ha formato nome-sito:/percorso/wordpress, una riga per sito. Puoi schedulare questo script con cron ogni domenica notte e generare automaticamente i log da allegare al report mensile del cliente.
Per chi vuole andare oltre, vale la pena integrare questo workflow con n8n o Make per inviare automaticamente il report al cliente. Ne abbiamo parlato nel dettaglio in come automatizzare la gestione email con n8n + Claude AI — lo stesso approccio funziona benissimo per i report di manutenzione mensili.
Il Report Mensile: Come Comunicare Valore al Cliente
Il report mensile non è un’opzione — è la parte più importante del contratto dal punto di vista della retention. Il cliente che non riceve comunicazioni finisce per dimenticare che sta pagando per qualcosa, e quando arriva il rinnovo annuale, cancella. Il report mensile è la prova tangibile che stai lavorando.
Un report efficace non deve essere lungo. Deve essere visivo, chiaro e rassicurante. Ecco la struttura in 5 punti:
- Stato generale: Verde/Giallo/Rosso. Un colore basta.
- Cosa ho fatto questo mese: Elenco puntato con 5-10 voci (aggiornamenti, backup, scansioni).
- Metriche chiave: Uptime del mese (es. 99.97%), velocità pagina (PageSpeed score), numero plugin aggiornati.
- Eventuali problemi riscontrati e risolti (se ci sono stati).
- Raccomandazioni per il mese successivo (upsell naturale: “il tuo hosting sta diventando lento, considera un upgrade”).
Puoi generare questi report automaticamente con uno script Python che legge i log e usa Claude API per scrivere il testo del report in modo naturale. Se vuoi esplorare questa direzione, il workflow di automazione con Claude API è il punto di partenza giusto.
import anthropic
import json
from datetime import datetime
def genera_report_manutenzione(
nome_sito: str,
uptime_percent: float,
plugin_aggiornati: int,
backup_eseguiti: int,
problemi: list[str],
pagespeed_score: int
) -> str:
client = anthropic.Anthropic()
dati_sito = {
"sito": nome_sito,
"mese": datetime.now().strftime("%B %Y"),
"uptime": uptime_percent,
"plugin_aggiornati": plugin_aggiornati,
"backup": backup_eseguiti,
"problemi": problemi,
"pagespeed": pagespeed_score
}
prompt = (
"Sei un consulente WordPress professionale. Genera un report mensile "
"di manutenzione breve, chiaro e rassicurante per il cliente. "
"Usa un tono professionale ma accessibile. "
"Massimo 200 parole. Includi una raccomandazione finale.
"
"Dati del mese:
"
+ json.dumps(dati_sito, ensure_ascii=False, indent=2)
)
message = client.messages.create(
model="claude-opus-4-5",
max_tokens=400,
messages=[{"role": "user", "content": prompt}]
)
return message.content[0].text
# Esempio di utilizzo
report = genera_report_manutenzione(
nome_sito="Pizzeria Da Mario",
uptime_percent=99.97,
plugin_aggiornati=8,
backup_eseguiti=4,
problemi=[],
pagespeed_score=87
)
print(report)Pricing e Psicologia della Vendita
Vendere contratti di manutenzione a clienti esistenti è molto più semplice che acquisire nuovi clienti. Il momento ideale per proporre il contratto è a fine progetto, quando il cliente è soddisfatto e il sito è appena andato live. In quel momento sei nella posizione di massima fiducia e puoi fare la proposta in modo naturale:
“Il sito è pronto. Per mantenerlo sicuro, aggiornato e veloce nel tempo, offro un servizio di manutenzione mensile. Ti mando i dettagli?”
Alcune leve psicologiche che funzionano nella vendita di contratti ricorrenti:
- Costo della non-azione: Mostra cosa può costare un sito hackerato o down per un giorno (perdita di vendite, riparazione d’emergenza).
- Sconto annuale: Offri 2 mesi gratuiti per chi paga annuale. Migliora il tuo cashflow e riduce il churn.
- Garanzia di risposta: “Rispondo entro 4 ore in giorni lavorativi” è una promessa che rassicura e differenzia.
- Periodo di prova: 3 mesi al prezzo scontato del 30% per abbassare la barriera di ingresso.
Sul fronte della gestione finanziaria, ricordati che i contratti ricorrenti cambiano anche il modo in cui gestisci la contabilità. Come spiegato in come usare l’AI per automatizzare le fatture, puoi configurare la fatturazione ricorrente automatica e ricevere pagamenti senza intervento manuale.
Strumenti per Gestire il Portfolio di Siti
Quando arrivi a gestire 15-20 siti in manutenzione, la gestione manuale diventa insostenibile. Esistono strumenti specifici per il management centralizzato di siti WordPress che ti fanno risparmiare ore ogni mese.
I tool più utilizzati dai freelance nel 2026:
- MainWP (self-hosted, gratuito): Dashboard centralizzata per aggiornare tutti i siti da un unico pannello. Open source, i dati restano tuoi.
- ManageWP (SaaS, freemium): Soluzione cloud con report automatici, backup e monitoraggio. Piano gratuito per siti illimitati, funzioni avanzate a pagamento.
- InfiniteWP: Simile a MainWP, buona alternativa self-hosted.
- WP Remote: Focalizzato su backup e aggiornamenti, interfaccia pulita.
La mia raccomandazione: inizia con MainWP self-hosted. Zero costi mensili, controllo totale sui dati, estensibile con plugin. Quando il portfolio cresce e vuoi delegare la gestione a un assistente o un junior, valuta un SaaS con collaborazione team.
Per la parte di monitoraggio uptime, UptimeRobot (piano gratuito) monitora fino a 50 siti con notifiche email/Telegram. Per il monitoraggio delle performance puoi usare un approccio automatizzato con le API di SEO tecnica per developer inclusa PageSpeed Insights API.
// pagespeed-check.js — controlla PageSpeed score per lista siti
const API_KEY = process.env.PAGESPEED_API_KEY;
async function checkPageSpeed(url) {
const endpoint = `https://www.googleapis.com/pagespeedonline/v5/runPagespeed`;
const params = new URLSearchParams({
url,
key: API_KEY,
strategy: 'mobile',
category: ['performance', 'accessibility', 'best-practices', 'seo']
});
const res = await fetch(`${endpoint}?${params}`);
const data = await res.json();
const scores = data.lighthouseResult.categories;
return {
url,
performance: Math.round(scores.performance.score * 100),
accessibility: Math.round(scores.accessibility.score * 100),
bestPractices: Math.round(scores['best-practices'].score * 100),
seo: Math.round(scores.seo.score * 100),
lcp: data.lighthouseResult.audits['largest-contentful-paint'].displayValue,
cls: data.lighthouseResult.audits['cumulative-layout-shift'].displayValue,
};
}
// Esegui per lista siti
const sites = [
'https://cliente1.it',
'https://cliente2.it',
'https://cliente3.it'
];
Promise.all(sites.map(checkPageSpeed))
.then(results => {
results.forEach(r => {
const status = r.performance >= 70 ? '✓' : '⚠';
console.log(`${status} ${r.url}: Perf=${r.performance} | LCP=${r.lcp} | CLS=${r.cls}`);
});
})
.catch(console.error);Scaling: Da Freelance Solitario a Micro-Agenzia
Con 20 contratti attivi a 150€/mese hai 3.000€ di recurring mensile. Con 40 contratti sei a 6.000€. A questo punto il tempo diventa il collo di bottiglia, non i clienti. La strada naturale è delegare la parte operativa della manutenzione — aggiornamenti, backup, scansioni — a un collaboratore junior o a una toolchain completamente automatizzata.
Il modello che funziona meglio: tu gestisci le relazioni con i clienti, vendi nuovi contratti e intervieni su problemi complessi. Un junior (o uno script + MainWP) esegue il lavoro settimanale di aggiornamento. Il margine lordo di un pacchetto da 150€ con 1 ora di lavoro mensile (automatizzato al 70%) è altissimo.
Se stai pensando di costruire qualcosa di più strutturato, il percorso da developer a imprenditore digitale spiega esattamente come strutturare questa transizione senza perdere il controllo qualitativo del servizio.
<?php
/**
* Plugin: Maintenance Reporter
* Genera automaticamente un log delle attività di manutenzione
* da includere nel report mensile al cliente.
*/
// Registra log dopo ogni aggiornamento automatico
add_action( 'upgrader_process_complete', 'ca_log_update_activity', 10, 2 );
function ca_log_update_activity( $upgrader, $hook_extra ) {
$log_entry = [
'timestamp' => current_time( 'mysql' ),
'type' => $hook_extra['type'] ?? 'unknown',
'action' => $hook_extra['action'] ?? 'unknown',
'packages' => [],
];
if ( isset( $hook_extra['plugins'] ) ) {
foreach ( $hook_extra['plugins'] as $plugin ) {
$data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
$log_entry['packages'][] = [
'name' => $data['Name'],
'version' => $data['Version'],
];
}
}
// Salva in options (max 100 entry, ruota automaticamente)
$logs = get_option( 'ca_maintenance_logs', [] );
array_unshift( $logs, $log_entry );
$logs = array_slice( $logs, 0, 100 );
update_option( 'ca_maintenance_logs', $logs );
}
// Endpoint REST per recuperare i log (autenticato)
add_action( 'rest_api_init', function() {
register_rest_route( 'ca-maintenance/v1', '/logs', [
'methods' => 'GET',
'callback' => 'ca_get_maintenance_logs',
'permission_callback' => function() {
return current_user_can( 'manage_options' );
},
] );
} );
function ca_get_maintenance_logs( WP_REST_Request $request ) {
$since = $request->get_param( 'since' ) ?? date( 'Y-m-01' );
$logs = get_option( 'ca_maintenance_logs', [] );
$filtered = array_filter( $logs, function( $entry ) use ( $since ) {
return $entry['timestamp'] >= $since;
} );
return rest_ensure_response( array_values( $filtered ) );
}FAQ e Domande Frequenti
Quanto devo far pagare un contratto di manutenzione WordPress?
Il range tipico in Italia nel 2026 va da 79€/mese per un pacchetto base a 399€/mese per un pacchetto premium con SLA e ore incluse. La chiave non è il prezzo in assoluto, ma il rapporto tra valore percepito e costo. Un e-commerce che genera 10.000€/mese non si tirerà indietro davanti a 300€/mese per sapere che il sito è sempre up e sicuro. Testa diversi price point con i tuoi clienti e osserva dove si trova il punto di resistenza.
Cosa succede se un aggiornamento rompe il sito del cliente?
È lo scenario che più spaventa i freelance alle prime armi con i contratti di manutenzione, e la risposta è nel processo: fai sempre un backup prima di aggiornare. Con backup pre-aggiornamento puoi ripristinare il sito in minuti. Nel contratto specifica che effettui il backup prima di ogni ciclo di aggiornamenti. Se usi MainWP o WP-CLI con lo script mostrato sopra, il backup è il primo step automatico. In 5 anni di contratti di manutenzione, il problema più comune non sono gli aggiornamenti rotti, ma i plugin abbandonati che il cliente aveva installato da solo.
Posso offrire contratti di manutenzione anche per siti costruiti da altri?
Assolutamente sì, ed è spesso una delle fonti di acquisizione più efficaci. Molti clienti hanno siti costruiti da agenzie o freelance che non offrono manutenzione, o che sono spariti. La fase di onboarding richiede un audit iniziale del sito (30-60 minuti), che puoi far pagare separatamente (50-100€) o includere come omaggio per chi firma un contratto annuale. L’audit ti permette di identificare problemi preesistenti e di escluderli dal perimetro di responsabilità del contratto.
Come gestisco i clienti che vogliono continue modifiche “piccole”?
Le “piccole modifiche” illimitate sono il modo più veloce per rendere non-profittevole un contratto di manutenzione. La soluzione è includere un monte ore fisso nel pacchetto (1h nel Basic, 2h nello Standard, 3h nel Premium) e fatturare le ore aggiuntive a tariffa standard. Comunicalo chiaramente in fase di firma e nel report mensile indica sempre le ore utilizzate. La maggior parte dei clienti non arriverà mai al limite, ma quelli che lo fanno pagheranno il giusto per il lavoro extra.
Conclusione
I contratti di manutenzione WordPress sono il modo più efficiente per stabilizzare il reddito da freelance. Non richiedono nuovi clienti, lavorano con chi ti conosce già, e il lavoro operativo può essere quasi completamente automatizzato con gli strumenti giusti. La parte difficile non è l’aspetto tecnico — quella la gestisci già — ma la strutturazione dell’offerta e la vendita.
Inizia con 3-5 clienti esistenti. Proponi un pacchetto Standard a prezzo di lancio per 3 mesi. Costruisci il processo, automatizza il lavoro ripetitivo, genera i report. Quando il sistema funziona, scala. Con 20 contratti attivi hai una base di recurring revenue che ti dà la libertà di scegliere i progetti one-off su cui lavorare, non di accettare tutto pur di pagare le bollette.
Il recurring revenue non è un obiettivo futuro — è una scelta che puoi fare questa settimana.
Suggerimenti e Risorse
🔧 Tool consigliato: MainWP Self-Hosted — gestisci tutti i siti WordPress da un’unica dashboard senza costi mensili. Abbinalo a WP-CLI per automatizzare aggiornamenti e backup con script bash schedulati via cron.
💡 Strategia: Proponi sempre il contratto di manutenzione a fine progetto, quando il cliente è al massimo della soddisfazione. Includi un “audit gratuito” come bonus per chi firma nei primi 7 giorni dalla consegna — aumenta significativamente il tasso di conversione.
🎯 Obiettivo pratico: Entro 3 mesi, converti almeno 5 clienti esistenti a un contratto mensile. Con 5 contratti Standard a 149€/mese hai 745€ di recurring garantiti. Reinvesti il tempo risparmiato (grazie all’automazione) per acquisire altri 5 contratti.

