Les redirections HTTP sont des mécanismes essentiels pour gérer le routage et la navigation. Comprendre les différences entre les codes 301 et 302 est important pour tout projet web, que ce soit pour intervenir en développement, référencement ou planification. Faisons le tour en détails.
Différences principales entre 301 et 302
Redirection 301 - Moved Permanently
La redirection 301 Moved Permanently indique que la ressource a été déplacée de manière permanente vers une nouvelle adresse, ou URL. Cette redirection signale aux navigateurs et aux moteurs de recherche que l'ancienne URL ne sera plus jamais utilisée.
- Les navigateurs la mettent en cache par défaut
- Les moteurs de recherche remplacent l'ancienne URL par la nouvelle dans leurs index
- Elle transfère l'autorité SEO ce qui permet de "préserver" dans une certaine mesure les acquis et ne pas perdre en référencement
Quand utiliser une redirection 301 permanente ?
En cas de refonte de site web : vous souhaitez
- Rediriger une page ou un groupe de pages vers de nouveaux chemins exemple.com/ancienne-page → exemple.com/nouvelle-page
- Fusionner des pages similaires
- Supprimer des pages obsolètes (attention dans ce cas l'erreur 404 est prévue à cet effet et bien plus "compréhensible")
- Changer de domaine : monsite.fr → monsite.com
En cas de migration HTTPS, c'est une démarche purement technique et globale si votre site vient de passer du protocole non sécurisé HTTP, vers le HTTPS (recommandé) : http://exemple.com → https://exemple.com
Redirection 302 - Found (Temporary Redirect)
La redirection 302 Found (Temporary Redirect) indique une redirection temporaire. L'URL originale reste valide et pourrait être utilisée à nouveau dans le futur.
- On conserve l'URL originale dans les index des moteurs de recherche
- Généralement il n'y a pas de mise en cache
- On ne transfère pas l'autorité SEO vers la nouvelle URL
Quand utiliser une redirection 302 temporaire ?
- Pour une maintenance temporaire : site.com → site.com/maintenance
- Pour effectuer des tests A/B : avec une redirection conditionnelle vers différentes versions
- Redirections géographiques temporaires : site.com → site.com/fr (pour les visiteurs en langue française)
- Promotions limitées dans le temps : produit.com → produit.com/promo-noel
Implémentation technique
Les redirections HTTP se font, comme leur nom et protocole l'indique, au niveau du serveur HTTP.
Avec Apache 🪶
Dans la configuration du serveur web Apache ou dans un fichier .htacess
la syntaxe est historiquement toujours la même, grâce au module rewrite et aux instructions Redirect
ou RewriteRule
en précisant le code de redirection HTTP avec le paramètre R=xxx
.
Redirection 301 :
# Redirection simple avec Redirect
Redirect 301 /ancienne-page /nouvelle-page
# Redirection simple avec RedirectPermanent
RedirectPermanent /ancienne-page /nouvelle-page
Ces deux directives s'utilisent hors du contexte de mod_rewrite contrairement à RewriteRule
qui permet d'ajouter des expressions régulières, des conditions, etc. Pour cela, il faut utiliser RewriteRule
dans un bloc avec RewriteEngine On
:
# Avec RewriteRule
RewriteEngine On
RewriteRule ^ancienne-page$ /nouvelle-page [R=301,L]
# Migration HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Changement de domaine
RewriteCond %{HTTP_HOST} ^ancien-domaine\.com$ [NC]
RewriteRule ^(.*)$ https://nouveau-domaine.com/$1 [R=301,L]
Redirection 302 :
# Redirection temporaire
Redirect 302 /maintenance /page-maintenance
# Avec RewriteRule
RewriteRule ^promo$ /page-promo-temporaire [R=302,L]
💡 Dans ces exemples le paramètre L
signifie Last, soit la dernière règle à suivre : il ne doit pas appliquer les règles suivantes dans le même bloc ou le même fichier de configuration. Cela permet d'optimiser les performances et d'éviter des conflits entre plusieurs règles.
Avec PHP 🐘
Moult langages de programmation back-end permettent d'effectuer ces mêmes redirections en renvoyant l'en-tête HTTP correspondant. En PHP c'est très simple grâce à la fonction header()
qu'il faut appeler avant tout autre envoi de contenu (par exemple pas d'appel à echo
auparavant).
Redirection 301 :
<?php
// Redirection 301 basique
header("Location: https://exemple.com/nouvelle-page", true, 301);
exit;
?>
Redirection 302 :
<?php
// Redirection 302 (par défaut)
header("Location: https://exemple.com/page-temporaire");
exit;
// Explicitement 302
header("Location: https://exemple.com/page-temporaire", true, 302);
exit;
?>
Avec Nginx
Configuration Nginx : avec une syntaxe un peu plus "moderne" que le vétéran Apache, cela reste assez lisible et explicite.
server {
# Redirection 301
location /ancienne-page {
return 301 /nouvelle-page;
}
# Redirection 302
location /page-temporaire {
return 302 /autre-page;
}
# Migration HTTPS
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
}
Avec JavaScript (côté client)
⚠️ Attention : Les redirections JavaScript ne sont pas idéales pour le SEO car elles ne sont pas des redirections HTTP natives, dans ce cas elles ne sont pas du tout interprétées de la même façon par les navigateurs ou les robots d'indexation des moteurs de recherche.
// Redirection simple (équivalent à 302)
window.location.href = '/nouvelle-page';
// Ou
window.location.replace('/nouvelle-page');
Impact référencement / SEO
Toutes ces redirections ont toujours une signification pour les outils qui exploitent le protocole HTTP, à savoir les robots des moteurs de recherche en particulier. Vous pouvez aussi consulter la documentation Google Search Central à ce sujet.
Redirections 301
Avantages :
- Transfert d'autorité : 90-99% du Page Rank est transféré
- Consolidation des backlinks : Les liens pointant vers l'ancienne URL bénéficient à la nouvelle
- Mise à jour des index : Les moteurs de recherche remplacent l'ancienne URL
- Évite le contenu dupliqué
Précautions :
- Éviter les chaînes de redirections (A → B → C)
- Vérifier que la nouvelle page est pertinente par rapport à l'ancienne
- Surveiller les erreurs 404 après implémentation
Redirections 302
Caractéristiques SEO :
- Pas de transfert d'autorité : L'URL originale conserve son Page Rank
- Conservation de l'indexation : L'ancienne URL reste dans les résultats de recherche
- Risque de contenu dupliqué : Si utilisée de manière inappropriée
Bonnes pratiques :
- Utiliser uniquement pour des redirections réellement temporaires
- Éviter pour des changements permanents d'URL
Impact sur le cache navigateur
Le cache des navigateurs peut être sensible aux redirections.
Avec une redirection 301 (Permanente), les navigateurs et les moteurs de recherche mettent à jour leur cache pour pointer directement vers la nouvelle URL. Après la première redirection, le navigateur stocke la nouvelle URL et l’utilise directement pour les requêtes suivantes, sans repasser par la redirection. Ce qui peut être gênant pour tester à nouveau cette redirection, la reconfigurer avec une autre adresse, bref, utilisez le mode navigation privée pour ne pas influencer votre cache local.
La nouvelle URL est généralement cachée longtemps, selon les en-têtes Cache-Control
ou Expires
renvoyés par le serveur.
Avec une redirection 302 (Temporaire), l'impact est limité : les navigateurs ne mettent pas à jour leur cache pour la redirection. À chaque visite, le navigateur recontacte le serveur pour vérifier si la redirection est toujours active. La redirection est toujours exécutée, même après plusieurs visites.
Outils de diagnostic et debug
Outils de développement navigateur
Les Chrome DevTools ou Firefox Developer Tools sont vos meilleurs amis. Ouvrez le panneau, et utilisez l'onglet Réseau (ou Network). Cochez l'option Preserve log avant de naviguer pour conserver les traces de chaque requête (sinon elles sont vidées à chaque changement de page ou redirection) et visualiser toutes les étapes avec leurs codes de statut 301 ou 302. Cliquez sur chaque requête pour examiner les en-têtes HTTP en détails.
Sur cette capture on peut constater de multiples redirections successives (qui auraient pu être fusionnées en une seule) :
adsl.free.fr
→ 302 →free.fr
free.fr
→ 301 →www.free.fr
www.free.fr/freebox
→ 301 →www.free.fr/freebox/
- finalement résultat HTTP 200 OK pour
www.free.fr/freebox/
et livraison de la page
Outils en ligne
- https://httpstatus.io/ : Test rapide de redirections
- https://redirectdetective.com : Analyse des chaînes de redirections
- https://search.google.com/search-console/ : Google Search Console, effectuant un récapitulatif des redirections détectées, signalant aussi les erreurs d'exploration (parfois avec beaucoup d'insistance)
Outils en ligne de commande
Le célèbre outil en ligne de commande cURL est très pratique pour analyser les redirections grâce à l'option -L
.
curl -L --max-redirs 10 -v https://exemple.com/page 2>&1 | grep "Location:"
L'option -I
(ou --head
) permet d'envoyer une requête HEAD au serveur, plutôt qu'une requête GET complète ce qui est utile pour vérifier le statut HTTP de la réponse du serveur, sans télécharger le corps de la page (le contenu HTML, les images, etc.).
curl -I https://exemple.com/page
Si on combine, le tout en ajoutant encore -v
pour avoir plus de détails, cela nous permet de suivre les redirections avec curl -L -I -v https://exemple.com/page
Cas d'erreurs courantes
Il est fréquent de se mélanger les pinceaux, outre le piège d'utiliser un code 302 au lieu de 301 pour un changement permanent, ce sont des bugs vite repérés et signalés par votre navigateur :
Les chaînes trop longues : en passant par A → B → C → D → E cela ralentit le chargement et rend difficile l'analyse du réseau et des bugs, cela alourdit le back-end "pour rien".
Les boucles de redirection : si votre script ou configuration provoque une boucle infinie A → B → A et ainsi de suite, il n'est plus possible de s'en sortir. En général le navigateur s'arrête au bout de 20 redirections et renvoie le code
ERR_TOO_MANY_REDIRECTS
pour éviter de saturer le réseau, la machine ou les attaques par déni de service.
Bonnes pratiques
Avant | Après |
---|---|
✅ Vérifier si la redirection est vraiment nécessaire | ✅ Tester avec différents outils |
✅ Choisir le bon type (301 vs 302) | ✅ Vérifier les logs du serveur (par exemple dans /var/log/apache2 ) |
✅ Tester sur un environnement de développement | ✅ Surveiller via des outils externes tels que Google Search Console |
✅ Vérifier l'absence de boucles |
Les redirections HTTP 301 et 302 sont présentes depuis bien longtemps dans le protocole HTTP et restent très pertinentes, utilisées correctement : elles améliorent l'expérience utilisateur et préservent le référencement de votre site. Désormais vous savez tout sur le sujet et faire le choix entre une redirection permanente ou temporaire.
Commentaires
Dans les exemples de redirection 302, les noms de page choisis prêtent à confusion. Dans l'exemple Nginx, elles induisent même complètement en erreur. Au lieu de "page-temporaire" on s'attend putôt à y trouver quelque chose du genre "page-habituelle" et à retrouver "page-temporaire" (au lieu de "autre-page") comme page cible de la redirection.