
Cuando WordPress actualiza plugins o el núcleo, pone el sitio unos segundos en modo de mantenimiento y muestra: «No disponible por mantenimiento programado. Vuelve a comprobarlo en un minuto.» Puedes usar ese mismo sistema, u otro más flexible, cuando lo necesites.
Antes de nada: el código 503
Un sitio en mantenimiento debe responder con el código HTTP 503 (Servicio no disponible), idealmente con la cabecera Retry-After. Así Google entiende que es temporal y no saca tus páginas de los resultados. Si tu página de mantenimiento responde con un 200 normal, Google puede pensar que todo tu sitio ahora es esa página.
Las tres formas de esta guía responden con 503.
Forma 1: el archivo .maintenance (la de WordPress)
Crea en la raíz del sitio (junto a wp-config.php) un archivo llamado .maintenance con este contenido:
<?php $upgrading = time(); ?>
WordPress mostrará el mensaje de mantenimiento a todo el mundo, incluido tú. Para salir, borra el archivo.
WordPress considera «atascado» un mantenimiento de más de 10 minutos y lo ignora: el sitio vuelve a mostrarse. Para cierres más largos, usa $upgrading = time() + 3600; (una hora más) o, mejor, la forma 3.
Con WP-CLI es aún más simple:
wp maintenance-mode activate
wp maintenance-mode status
wp maintenance-mode deactivate
Forma 2: personalizar la página de mantenimiento
El mensaje por defecto es feo y está en inglés en algunos casos. Si creas el archivo wp-content/maintenance.php, WordPress lo usa en su lugar. Un ejemplo:
<?php
http_response_code( 503 );
header( 'Retry-After: 600' );
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!doctype html>
<html lang="es">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Volvemos en unos minutos</title></head>
<body style="font-family:system-ui,sans-serif;text-align:center;padding:10vh 16px">
<h1>Estamos haciendo mejoras</h1>
<p>El sitio vuelve en unos minutos. Gracias por la paciencia.</p>
</body>
</html>
Este archivo se usa también durante las actualizaciones normales, así que tus visitantes verán siempre tu mensaje.
Forma 3: un mu-plugin que deja pasar a tu equipo
Las formas 1 y 2 bloquean a todos, incluido quien está trabajando en el sitio. Este mu-plugin muestra la página de mantenimiento solo a quien no tenga sesión iniciada con permisos, y deja abiertas la pantalla de acceso y la API para que puedas trabajar. Guárdalo como wp-content/mu-plugins/cwp-mantenimiento.php:
<?php
/**
* Plugin Name: Modo mantenimiento (Curso WordPress)
* Description: Cambia CWP_MANTENIMIENTO a true para cerrar el sitio.
*/
const CWP_MANTENIMIENTO = false;
add_action( 'template_redirect', function () {
if ( ! CWP_MANTENIMIENTO || current_user_can( 'edit_posts' ) ) {
return;
}
header( 'Retry-After: 3600' );
wp_die(
'<h1>Estamos haciendo mejoras</h1><p>El sitio vuelve pronto. Gracias por la paciencia.</p>',
'En mantenimiento',
array( 'response' => 503 )
);
}, 1 );
Para activarlo, cambia false por true. Para desactivarlo, vuelve a false (o borra el archivo).
Como actúa en template_redirect, no afecta al escritorio, a wp-login.php ni a la API REST: tú y tu equipo pueden seguir trabajando con normalidad.
Si tienes caché de página, vacíala después de activar y después de desactivar. Si no, unos visitantes verán el sitio cerrado y otros abierto, según lo que haya guardado la caché.
¿Y en una tienda?
Cerrar una tienda es perder ventas. Antes de activar el mantenimiento, pregúntate si el cambio se puede hacer en un sitio de pruebas y luego pasarlo al real en minutos. Si de verdad hay que cerrar, hazlo en el horario de menos ventas y avisa antes en redes sociales o con una barra en el sitio.
¿Cada cuánto pones tu sitio en mantenimiento? Cuéntanos en el foro qué cambios te obligan a cerrarlo.





