Come mettere WordPress in manutenzione senza rovinare la SEO

Ciao! Ti sarà capitato: devi lavorare sul tuo sito, magari un restyling, una migrazione, un aggiornamento delicato, e non vuoi che i visitatori vedano il sito a metà, rotto o con errori mentre ci lavori.

In questo articolo ti spiego come mettere WordPress in manutenzione nel modo corretto, quali errori evitare per non danneggiare la SEO, e un plugin che ho sviluppato io stesso per gestire tutto questo senza pensieri.

Perché non basta “nascondere” il sito

Prima del come, il perché conta parecchio, perché è qui che si commettono più errori. Quando metti un sito in manutenzione, il modo in cui rispondi ai motori di ricerca fa una differenza enorme.

Se durante la manutenzione le pagine continuano a rispondere con un normale 200 OK (come se tutto fosse a posto) ma mostrano contenuto rotto o incompleto, Google può interpretarlo come un problema reale e penalizzare il sito. Se invece nascondi il sito restituendo un errore 404, stai dicendo ai motori di ricerca “questa pagina non esiste più”, e nella peggiore delle ipotesi rischi che le tue pagine vengano rimosse dall’indice.

La risposta corretta è un codice di stato 503 Service Unavailable, accompagnato da un header Retry-After che indica quando riprovare. Questo dice esplicitamente a Google: “il sito è temporaneamente non disponibile, torna a controllare più tardi”, senza intaccare il posizionamento delle pagine già indicizzate.

I metodi manuali (e i loro rischi)

Puoi ottenere questo comportamento anche senza plugin, ma vale la pena conoscere i limiti di ogni approccio prima di scegliere.

Modificare il file .htaccess: puoi forzare manualmente la risposta 503 a livello di server. Funziona, ma richiede di intervenire su un file delicato, ed è facile commettere un errore di sintassi che manda giù l’intero sito, non solo la parte che volevi nascondere.

Aggiungere codice in functions.php: la soluzione più diffusa nei tutorial che si trovano in giro. Anche qui, come ti ho già detto in altri articoli, modificare functions.php a mano comporta un rischio molto concreto: se te ne dimentichi lì dentro, il sito resta bloccato in manutenzione anche dopo che hai finito, e capita più spesso di quanto pensi.

Il .maintenance automatico di WordPress: quando aggiorni core, temi o plugin, WordPress stesso attiva per pochi secondi una modalità manutenzione temporanea creando un file .maintenance nella root. Utile da sapere, ma non è pensato per una manutenzione programmata che dura ore o giorni: se l’aggiornamento si interrompe a metà, il sito può restare bloccato in questo stato finché non elimini il file manualmente.

Un’insidia comune con qualsiasi metodo: se usi cache o CDN (Cloudflare e simili), ricordati di svuotarla sia quando attivi che quando disattivi la manutenzione. Altrimenti rischi che il 503 venga servito ancora per ore anche dopo che il sito è tornato online, o viceversa.

La mia soluzione: Maintenance Mode by Codifigata

Per gestire tutto questo senza dover ricordare manualmente header, cron e pulizia della cache, ho sviluppato Codifigata – Maintenance Mode, un plugin leggero pensato per fare una cosa sola e farla bene: mettere il sito in manutenzione con un unico interruttore, gestendo in automatico tutta la parte tecnica che altrimenti andrebbe presidiata a mano.

Un’annotazione onesta prima di andare avanti: questo plugin non è (ancora) nella directory ufficiale di WordPress.org. Lo staff di revisione mi ha risposto che esistono già troppi plugin che fanno la stessa cosa, e in un certo senso hanno ragione, il mercato dei plugin “modalità manutenzione” è affollatissimo.

La differenza, secondo me, sta nei dettagli tecnici che ti elenco qui sotto, che in molti dei plugin più diffusi mancano o vanno configurati a parte.

Le funzioni principali

  • Risposta 503 reale, con header Retry-After, così i motori di ricerca capiscono che si tratta di un’interruzione temporanea
  • Header X-Robots-Tag: noindex sulla pagina di manutenzione, per evitare che venga indicizzata quella al posto delle tue pagine reali
  • Personalizzazione completa: titolo, messaggio, colore di sfondo, testo e colore di accento, tramite un color picker nativo. Puoi anche lasciare titolo e messaggio vuoti per una pagina minimale, senza testo
  • Accesso sempre garantito agli amministratori, con la possibilità di aggiungere altri ruoli dalle impostazioni
  • Bypass per indirizzo IP, utile se vuoi che solo te e il tuo team possiate navigare normalmente durante i lavori
  • Attivazione programmata: imposti data e ora di inizio e fine, e il plugin attiva e disattiva la manutenzione da solo tramite WP-Cron
  • Link di anteprima segreto: un URL unico che permette a chiunque (un cliente, un collega) di navigare il sito normalmente senza fare login, anche con la manutenzione attiva. Puoi rigenerarlo in qualsiasi momento per invalidare istantaneamente il link precedente
  • Widget in bacheca per vedere lo stato attuale e attivare/disattivare la manutenzione con un clic, senza aprire la pagina delle impostazioni
  • REST API, WP-Cron, AJAX e pagina di login sempre esclusi, così il resto del sito continua a funzionare normalmente dietro le quinte

Come si installa e configura

  1. Carica la cartella del plugin in /wp-content/plugins/, oppure installalo dalla schermata Plugin di WordPress
  2. Attivalo dal menu Plugin
  3. Vai su Impostazioni → Maintenance Mode per personalizzare la pagina, i ruoli/IP autorizzati e, se vuoi, la pianificazione
  4. Spunta “Attiva subito la modalità manutenzione” oppure imposta una pianificazione, e salva

Il link di anteprima segreto, spiegato bene

Questa è la funzione a cui tengo di più, perché risolve un problema molto pratico: come fai vedere il sito a un cliente mentre è ufficialmente “offline” per tutti gli altri, senza dover creare un account e fargli fare login? Copi il link di anteprima dalla pagina delle impostazioni e glielo mandi: chiunque lo apra può navigare il sito normalmente finché non rigeneri il link. Utile anche solo per farti dare un’occhiata veloce da un collega senza dover condividere credenziali di accesso.

Un limite onesto sulla pianificazione automatica

Va detto con chiarezza: l’attivazione e disattivazione programmata si basa su WP-Cron, lo stesso sistema che WordPress usa per la maggior parte delle attività pianificate. WP-Cron viene innescato dal traffico reale sul sito, quindi su siti con pochissime visite l’orario effettivo di inizio o fine può slittare di qualche minuto rispetto a quello impostato, in attesa della visita successiva che lo attivi. Su un sito con traffico normale il ritardo è trascurabile.

Per chi lavora anche con codice

Il plugin espone alcuni filtri per chi vuole personalizzare il comportamento oltre le impostazioni disponibili:

// Usa l'IP reale del visitatore dietro Cloudflare
add_filter( 'cdfg_mm_visitor_ip', function( $ip ) {
    return isset( $_SERVER['HTTP_CF_CONNECTING_IP'] )
        ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_CF_CONNECTING_IP'] ) )
        : $ip;
} );

Sono disponibili anche filtri per personalizzare la decisione finale di bypass (cdfg_mm_bypass), il valore dell’header Retry-After (cdfg_mm_retry_after) e l’intero markup HTML della pagina di manutenzione (cdfg_mm_maintenance_page_html).

Domande frequenti

La modalità manutenzione danneggia la SEO?
No, se le finestre di manutenzione restano brevi. Il plugin invia un vero status 503 con header Retry-After, che dice ai motori di ricerca di riprovare più tardi invece di rimuovere le pagine dall’indice, cosa che rischieresti con una risposta normale 200.

Posso far vedere il sito a un cliente senza dargli un login?
Sì, copia il link di anteprima segreto dalla pagina delle impostazioni e condividilo. Chiunque lo apra naviga il sito normalmente finché non rigeneri il link.

Rischio di restare bloccato fuori dal mio stesso sito?
No, gli amministratori (chiunque abbia la capability manage_options) bypassano sempre la modalità manutenzione, indipendentemente dalle altre impostazioni.

Cosa succede ai dati del plugin se lo disinstallo?
Alla disinstallazione (non alla semplice disattivazione), il plugin rimuove le sue impostazioni ed eventuali eventi di attivazione/disattivazione programmata ancora in sospeso. Non crea tabelle nel database.

Per chiudere

Il mio consiglio, qualunque strumento tu scelga per mettere il sito in manutenzione, è uno solo: verifica sempre che la risposta sia un vero 503, non un 200 travestito da pagina di cortesia o peggio un 404. È la differenza tra un’interruzione temporanea invisibile a Google e un problema che ti trascini per settimane in SERP.

Se lavori spesso su siti WordPress in produzione e ti serve un modo semplice per gestire le finestre di manutenzione, scrivimi una mail e ti risponderò il prima possibile.

Commenti
Unisciti alla discussione e condividi la tua opinione
Scrivi un commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *