vendredi 25 septembre 2026

À propos

Contact

Tips

Un mode maintenance propre sans extension, avec le bon code HTTP

Un mode maintenance mal fait renvoie un code 200 sur une page vide : Google indexe le message d'attente. Voici comment répondre 503 correctement.

Par Clément Hadrot • 24 juin 2020 • 4 min de lecture • Aucun commentaire
Un mode maintenance propre sans extension, avec le bon code HTTP

Sur un projet de refonte pour un client e-commerce, j’ai un jour hérité d’un mode maintenance activé « à la main » par le développeur précédent : un fichier index.php à la racine affichant un message d’attente. Techniquement, la page s’affichait bien. Le problème, c’est que le serveur renvoyait un code 200 comme pour n’importe quelle page normale, et que Google avait fini par indexer ce message d’attente à la place des fiches produit.

Un vrai mode maintenance ne se contente pas de masquer le contenu : il doit répondre avec le code HTTP 503 (Service Unavailable), accompagné d’un en-tête Retry-After qui indique aux robots dans combien de temps revenir. Voici comment le faire correctement, sans extension, tout en gardant un accès normal pour les administrateurs.

Le fichier .maintenance natif de WordPress

WordPress dispose déjà d’un mécanisme intégré : lorsqu’un fichier .maintenance existe à la racine de l’installation, le cœur affiche automatiquement une page « Maintenance en cours » avec un code 503. C’est ce fichier que WordPress crée lui-même, brièvement, pendant une mise à jour automatique.

<?php
$upgrading = time();

Ce fichier minimal, déposé à la racine sous le nom .maintenance, suffit à déclencher l’écran natif. Il faut simplement penser à le supprimer une fois la maintenance terminée, sans quoi le site reste bloqué indéfiniment — un oubli classique après une intervention en urgence.

Personnaliser le message avec maintenance.php

L’écran par défaut est sommaire. En déposant un fichier wp-content/maintenance.php, on reprend totalement la main sur le rendu, tout en conservant le code 503 géré automatiquement par WordPress.

L'essentiel à retenir : Le code 503 empêche le référencement de la page d'attente ; Retry-After indique aux robots quand revenir ; Les administrateurs gardent un accès normal
<?php
header( 'Retry-After: 3600' );
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Maintenance en cours</title>
</head>
<body>
    <h1>Nous revenons très vite</h1>
    <p>Le site est en maintenance programmée jusqu'à 18h00.</p>
</body>
</html>

L’en-tête Retry-After peut recevoir soit un nombre de secondes (3600 pour une heure), soit une date HTTP complète. C’est cet en-tête, combiné au code 503, qui indique clairement aux robots d’indexation qu’il s’agit d’une interruption temporaire et non d’une disparition du contenu.

Garder un accès normal pour les administrateurs

Le fichier maintenance.php natif de WordPress s’applique à tout le monde, y compris aux administrateurs connectés, ce qui complique les vérifications de dernière minute. Une alternative consiste à gérer soi-même la maintenance via le hook template_redirect, avec une exception pour les utilisateurs autorisés.

function agence_mode_maintenance() {
    if ( current_user_can( 'manage_options' ) ) {
        return;
    }
    header( 'HTTP/1.1 503 Service Unavailable' );
    header( 'Retry-After: 3600' );
    include get_stylesheet_directory() . '/maintenance-front.php';
    exit;
}
add_action( 'template_redirect', 'agence_mode_maintenance' );

Cette approche a un inconvénient : elle s’exécute après le chargement complet de WordPress, donc plus tard que le fichier .maintenance natif, qui intervient avant même le chargement des extensions. Pour une maintenance très courte liée à une mise à jour, le fichier natif reste préférable ; pour une maintenance planifiée avec accès administrateur, le hook template_redirect est plus pratique.

Vérifier que le code HTTP est correct

Une fois la page en place, il est indispensable de vérifier concrètement le code retourné, plutôt que de se fier à l’apparence visuelle de la page.

  • Avec curl -I https://exemple.fr : la première ligne doit afficher HTTP/1.1 503.
  • Vérifier la présence de l’en-tête Retry-After dans la même réponse.
  • Contrôler dans les outils de développement du navigateur, onglet réseau, qu’aucune redirection intermédiaire ne renvoie un code 200 ou 302 avant le 503.

Une maintenance qui répond 200 pendant plus de quelques heures peut faire chuter des positions patiemment construites : les moteurs de recherche finissent par traiter la page d’attente comme le nouveau contenu de référence.

Notre verdict

Le fichier .maintenance reste la solution la plus fiable pour une coupure courte, puisqu’il agit avant même le chargement de WordPress. Pour une maintenance planifiée avec accès conservé aux administrateurs, un hook sur template_redirect personnalisé prend le relais. Dans tous les cas, le code 503 et l’en-tête Retry-After ne sont pas des détails techniques secondaires : ce sont eux qui protègent le référencement pendant l’interruption.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi