Guide de correction

Comment ajouter l'en-tête HSTS dans WordPress

8 février 2026 Mis à jour le 19 avr. 2026

L'en-tête HSTS (HTTP Strict Transport Security) indique aux navigateurs de ne se connecter à votre site WordPress qu'en HTTPS. Sans lui, vos visiteurs pourraient atterrir accidentellement sur une version HTTP non sécurisée de votre page, les exposant à des attaques de type man-in-the-middle. Une fois l'en-tête en place, les navigateurs mémorisent votre préférence et passent automatiquement chaque requête en HTTPS pendant la durée que vous indiquez.

Que fait réellement l'en-tête HSTS ?

Lorsqu'un navigateur reçoit l'en-tête Strict-Transport-Security, il enregistre cette information localement. Pour chaque visite ultérieure pendant la fenêtre max-age spécifiée, le navigateur refusera toute connexion en HTTP simple. Il ne tentera même pas une connexion HTTP au préalable ; il ira directement en HTTPS. Cela élimine la brève fenêtre pendant laquelle un attaquant pourrait intercepter la requête HTTP initiale et rediriger l'utilisateur vers une page malveillante.

L'en-tête a trois paramètres principaux :

  • max-age : durée (en secondes) pendant laquelle le navigateur doit se rappeler de forcer le HTTPS. La valeur 31536000 correspond à un an.
  • includeSubDomains : applique la règle à tous les sous-domaines également (par exemple blog.example.com, shop.example.com).
  • preload : indique que vous souhaitez voir votre domaine inclus dans la liste de préchargement HSTS intégrée aux navigateurs, afin que la toute première visite soit également protégée.

Avant de commencer : vérifiez que HTTPS fonctionne partout

Cette étape est cruciale. Une fois HSTS actif, les navigateurs ne laisseront plus les visiteurs revenir en HTTP. Si votre certificat SSL est expiré, mal configuré ou absent sur un sous-domaine, ces pages deviendront totalement inaccessibles pendant la durée de votre paramètre max-age. Avant d'activer quoi que ce soit, vérifiez les points suivants :

  • Votre certificat SSL est valide et n'arrive pas bientôt à expiration.
  • Toutes les pages de votre site se chargent correctement en https://.
  • Aucun avertissement de contenu mixte n'apparaît dans la console du navigateur (ressources HTTP chargées sur des pages HTTPS).
  • Si vous prévoyez d'utiliser includeSubDomains, chaque sous-domaine doit disposer d'un certificat valide et servir son contenu en HTTPS.
  • L'Adresse web du site et l'Adresse web de WordPress (dans Réglages > Général) utilisent toutes deux https://.

Ajouter HSTS via .htaccess (Apache)

Si votre site WordPress fonctionne sous Apache (la plupart des hébergeurs mutualisés utilisent Apache), vous pouvez ajouter l'en-tête directement dans le fichier .htaccess situé à la racine de votre installation WordPress. Ouvrez le fichier avec un éditeur de texte ou via le gestionnaire de fichiers de votre hébergeur, et ajoutez le bloc suivant avant la section # BEGIN WordPress :

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

L'enveloppe IfModule garantit qu'Apache ne traite cette directive que si mod_headers est activé. Sur la plupart des hébergeurs il l'est par défaut, mais cette enveloppe évite une erreur 500 sur les serveurs où il ne le serait pas.

Ajouter HSTS via Nginx

Pour un hébergement basé sur Nginx (courant chez les hébergeurs WordPress managés comme Kinsta, Cloudways ou SpinupWP), ajoutez l'en-tête dans votre bloc server. Le fichier de configuration se trouve généralement dans /etc/nginx/sites-available/yourdomain.com ou dans un répertoire d'inclusion Nginx personnalisé fourni par votre hébergeur :

server {
    listen 443 ssl;
    server_name example.com;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # ... le reste de la configuration du serveur
}

Le mot-clé always à la fin est important. Sans lui, Nginx n'envoie l'en-tête que sur les réponses réussies (2xx). Avec always, il est également inclus sur les pages d'erreur (4xx, 5xx), ce qui est le comportement correct pour les en-têtes de sécurité.

Après avoir modifié la configuration, testez et rechargez Nginx :

sudo nginx -t
sudo systemctl reload nginx

Ajouter HSTS via PHP dans functions.php

Si vous n'avez pas accès aux fichiers de configuration du serveur (certains hébergeurs managés le restreignent), vous pouvez envoyer l'en-tête depuis PHP. Ajoutez le code suivant au fichier functions.php de votre thème actif ou, mieux encore, à une extension spécifique au site afin qu'il survive aux mises à jour du thème :

function iwp_add_hsts_header() {
    if ( ! is_admin() ) {
        header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
    }
}
add_action( 'send_headers', 'iwp_add_hsts_header' );

Gardez à l'esprit que les en-têtes envoyés depuis PHP ne s'appliquent qu'aux pages traitées par WordPress. Les fichiers statiques (images, CSS, JS) servis directement par Apache ou Nginx ne porteront pas cet en-tête. Pour une couverture complète, l'approche au niveau du serveur reste toujours préférable.

Utiliser une extension WordPress pour configurer HSTS

Si vous préférez une approche sans code, plusieurs extensions peuvent gérer HSTS pour vous :

  • Really Simple SSL (Pro) : la version Pro inclut un module d'en-têtes de sécurité où vous pouvez activer HSTS et configurer max-age et includeSubDomains depuis le tableau de bord.
  • HTTP Headers : une extension gratuite qui propose une interface pour définir divers en-têtes de sécurité, dont Strict-Transport-Security.
  • Headers Security Advanced & HSTS WP : conçue spécifiquement pour les en-têtes de sécurité, avec une activation simple de HSTS et du preload.

Les extensions sont pratiques, mais elles ajoutent une dépendance supplémentaire. Si l'extension est désactivée ou supprimée, vos en-têtes disparaissent aussi. Pour un élément aussi fondamental que HSTS, une configuration au niveau du serveur est plus fiable.

Stratégie de déploiement progressif : commencez petit, puis augmentez

Passer directement à un max-age d'un an est risqué si vous n'avez pas tout testé. En cas de problème, les navigateurs continueront à forcer HTTPS pendant un an entier, et il n'existe aucun moyen d'« annuler » l'en-tête côté serveur une fois qu'un navigateur l'a mis en cache. Suivez plutôt cette approche progressive :

  1. 5 minutes : définissez max-age=300 et naviguez sur votre site. Vérifiez que chaque page se charge, que les formulaires se soumettent correctement et qu'aucun avertissement de contenu mixte n'apparaît.
  2. 1 jour : passez à max-age=86400. Laissez tourner un jour ou deux en surveillant votre site.
  3. 1 semaine : montez à max-age=604800. À ce stade, vous devriez avoir confiance dans le fait que HTTPS fonctionne partout.
  4. 1 an : définissez la valeur finale max-age=31536000. C'est le minimum requis pour la soumission au preload HSTS.
  5. Ajoutez includeSubDomains : ne le faites que lorsque tous les sous-domaines sont confirmés comme fonctionnant en HTTPS.
  6. Ajoutez preload : ajoutez le drapeau preload et soumettez votre domaine sur hstspreload.org.

Soumettre votre site à la liste de préchargement HSTS

La liste de préchargement HSTS est un répertoire de domaines avec lesquels les navigateurs sont livrés et pour lesquels HSTS est appliqué d'emblée. Cela signifie que même la toute première visite sur votre site se fera en HTTPS, avant même que le navigateur n'ait vu votre en-tête. Pour être éligible, votre site doit remplir ces conditions :

  • Servir un certificat SSL valide.
  • Rediriger tout le trafic HTTP vers HTTPS sur le même hôte.
  • Envoyer l'en-tête Strict-Transport-Security avec un max-age d'au moins 31536000 (un an).
  • Inclure la directive includeSubDomains.
  • Inclure la directive preload.

Rendez-vous sur hstspreload.org, saisissez votre domaine et soumettez-le. Sachez qu'un retrait de la liste de préchargement prend des mois et nécessite un cycle de mise à jour des navigateurs ; ne le soumettez donc que si vous êtes pleinement engagé dans le HTTPS.

Comment vérifier votre en-tête HSTS avec les DevTools du navigateur

Après avoir ajouté l'en-tête, vous pouvez rapidement confirmer qu'il fonctionne :

  1. Ouvrez votre site dans Chrome ou Firefox.
  2. Appuyez sur F12 pour ouvrir les DevTools.
  3. Allez dans l'onglet Network et rechargez la page.
  4. Cliquez sur la requête du document principal (généralement la première).
  5. Faites défiler jusqu'à Response Headers.
  6. Cherchez Strict-Transport-Security. Vous devriez y voir la valeur que vous avez configurée.

Vous pouvez aussi utiliser la ligne de commande pour vérifier :

curl -sI https://example.com | grep -i strict-transport

Si l'en-tête n'apparaît pas, vérifiez bien que vous accédez à la version HTTPS (et non HTTP) et que les modifications de configuration de votre serveur ont bien été enregistrées et rechargées.

Erreurs HSTS courantes et comment les éviter

  • Définir HSTS sur des réponses HTTP : l'en-tête est ignoré par les navigateurs lorsqu'il est servi en HTTP simple. Il ne prend effet que sur les réponses HTTPS.
  • Oublier la couverture des fichiers statiques : si vous définissez HSTS via PHP, les fichiers statiques contournent WordPress et ne porteront pas l'en-tête. Utilisez une configuration au niveau du serveur pour une couverture totale.
  • Utiliser includeSubDomains sans vérifier les sous-domaines : si vous avez un sous-domaine qui ne prend pas en charge HTTPS (par exemple un ancien serveur de préproduction), il deviendra inaccessible.
  • Passer trop vite à un max-age long : commencez toujours par une durée courte et augmentez progressivement.
  • Oublier de renouveler votre certificat SSL : avec HSTS actif et un certificat expiré, votre site devient totalement inaccessible. Mettez en place le renouvellement automatique avec Let's Encrypt ou auprès de votre fournisseur de certificats.

Vérifiez votre configuration HSTS avec InspectWP

Après avoir ajouté l'en-tête, lancez une nouvelle analyse InspectWP sur votre site. La section des en-têtes de sécurité de votre rapport indiquera l'état de l'en-tête Strict-Transport-Security. Si tout est correctement configuré, il apparaîtra en vert (présent). Si vous avez également mis en place d'autres en-têtes de sécurité, vérifiez-les aussi pour obtenir une vue complète du niveau de sécurité de votre site.

Vérifiez votre site WordPress dès maintenant

InspectWP analyse votre site WordPress pour détecter les problèmes de sécurité, de SEO, de conformité RGPD et de performance — gratuitement.

Analyser votre site gratuitement