Retour au blogSEO

Redirection 301 : le guide pas à pas

CZSyn
1 novembre 2026
Mis à jour le
9 min de lecture

Faire une redirection 301 sans erreur : 301 vs 302, code .htaccess et nginx, WordPress, PrestaShop, Shopify, puis test avec curl.

Aiguillage ferroviaire en pleine campagne, image d'une redirection 301 qui envoie le trafic vers une nouvelle voie
Photo : August Geyler, CC BY-SA (source Wikimedia Commons)

Une redirection 301 indique au navigateur et à Google qu'une page a changé d'adresse pour de bon : le serveur répond avec le code 301 et la nouvelle URL, que Google retient comme adresse de référence. Elle se pose côté serveur, dans le .htaccess, la configuration nginx ou le back-office du CMS, puis se vérifie avec curl -I.

Redirection 301 vs 302, 307 et 308 : quel code choisir ?

La RFC 9110 de l'IETF (2022), norme actuelle de la sémantique HTTP, distingue ces codes sur deux points : le déplacement est-il définitif, et la méthode de la requête (un formulaire envoyé en POST) est-elle conservée ?

CodeSens selon la RFC 9110Méthode conservéeLecture par Google
301 Moved Permanentlynouvelle adresse permanentepas garantie, un POST peut devenir un GETpermanente
302 Foundadresse temporairement différentepas garantietemporaire
307 Temporary Redirectadresse temporairement différenteoui, obligatoirementtemporaire
308 Permanent Redirectnouvelle adresse permanenteoui, obligatoirementpermanente

Pour une page web, la 301 reste le choix universel. La 308, apparue en 2014, sert aux formulaires et aux API qui reçoivent des requêtes POST. La 302 et la 307 se réservent aux situations provisoires, comme une page de maintenance.

Ce que Google fait d'une redirection 301

La documentation de Google Search Central « La recherche Google et les redirections d'URL » range les redirections en deux familles :

  1. Permanentes (301, 308, et la balise meta refresh à 0 seconde) : Googlebot suit la redirection et traite l'adresse de destination comme l'URL canonique, celle qui apparaît dans les résultats.
  2. Temporaires (302, 303, 307, et la meta refresh au-delà de 0 seconde) : Googlebot suit la redirection, mais n'en tire pas de signal pour faire de la destination l'URL canonique.

Google recommande les redirections côté serveur, le JavaScript n'étant qu'un dernier recours. Sa page « Migrer un site avec changement d'URL » ajoute trois règles :

  1. garder les redirections « aussi longtemps que possible, généralement au moins un an » ;
  2. rediriger chaque ancienne page vers son équivalent, jamais toutes vers la page d'accueil : Google peut alors traiter la redirection comme une erreur de type soft 404 ;
  3. viser directement la destination finale, sans étape intermédiaire.

Une page supprimée sans équivalent répond 404, ou 410 : Google traite ces deux codes de la même manière.

Faire une redirection 301 dans le .htaccess (Apache)

Sur un hébergement Apache, le fichier .htaccess à la racine du site accepte deux modules.

Avec Redirect (mod_alias)

Redirect 301 "/ancienne-page" "https://www.example.fr/nouvelle-page"
Redirect gone "/page-supprimee"

La première ligne envoie une 301 vers la nouvelle adresse, la seconde un 410, sans adresse de destination.

Premier piège : sans code de statut, Redirect "/ancienne-page" "…" envoie une 302, comportement par défaut selon la documentation d'Apache. Écrivez toujours 301 ou permanent.

Deuxième piège : Redirect transmet la suite du chemin. Une règle sur /blog redirige aussi /blog/mon-article vers …/nouvelle-page/mon-article.

Avec RewriteRule (mod_rewrite)

RewriteEngine On
RewriteRule ^ancien-dossier/(.*)$ /nouveau-dossier/$1 [R=301,L]

Ici, chaque adresse de /ancien-dossier/ part vers la même adresse dans /nouveau-dossier/.

Dans un .htaccess, le chemin comparé ne commence jamais par une barre oblique : selon la documentation d'Apache, un motif en ^/ n'y correspond jamais. Les exemples copiés depuis une configuration de serveur échouent pour cette raison.

Le drapeau [R] seul envoie lui aussi une 302 : il faut R=301, presque toujours associé à L, qui arrête les règles suivantes.

Une directive mal écrite dans ce fichier fait tomber le site en erreur 500 : gardez une copie de l'ancien fichier, et au besoin suivez notre méthode pour diagnostiquer une erreur 500 sous WordPress ou PrestaShop.

Redirection 301 sur nginx

nginx n'a pas de .htaccess : la règle se place dans le bloc server du site, avec la directive return.

location = /ancienne-page {
    return 301 https://www.example.fr/nouvelle-page;
}

Le signe = limite la règle à cette adresse exacte. nginx -t vérifie la syntaxe, puis nginx -s reload applique la configuration.

WordPress : pas de gestionnaire de redirections dans le cœur

L'administration de WordPress ne propose aucun écran de redirections. Le cœur fait une seule chose : quand vous changez le slug d'un article publié, il retient l'ancien et redirige en 301 l'ancienne adresse vers la nouvelle (fonction wp_old_slug_redirect). Cette mémoire ne concerne pas les types hiérarchiques comme les pages.

Pour le reste, deux voies :

  1. une extension de gestion des redirections ;
  2. des règles Apache dans le .htaccess, placées en dehors du bloc compris entre BEGIN WordPress et END WordPress : WordPress réécrit ce bloc quand il régénère ses permaliens, et conserve ce qui l'entoure.

Côté code, wp_redirect() envoie une 302 par défaut : il faut écrire wp_redirect( $url, 301 ). La fonction PHP header( 'Location: …' ) a le même travers : sans code 3xx déjà fixé, elle répond 302.

PrestaShop 8 et 9 : produits et catégories désactivés

Dans PrestaShop, la redirection se règle sur la fiche du produit hors ligne, onglet SEO, au paramètre de page de redirection. La documentation de la version 9 décrit trois choix : pas de redirection (404), redirection permanente (301) ou temporaire (302) vers un autre produit ou une catégorie. Le formulaire prévoit aussi le 410 depuis la version 8.

La version 9 ajoute le même réglage sur les catégories : une catégorie non affichée peut répondre 404 ou 410, ou rediriger en 301 ou 302 vers une autre catégorie.

Pour les autres adresses, on revient au .htaccess. PrestaShop régénère ce fichier et ne conserve que le code situé hors de la zone ~~start~~ / ~~end~~ : vos règles se placent avant ou après.

Shopify : les redirections d'URL de l'admin

Dans l'admin Shopify, les redirections se trouvent dans Contenu, puis Menus, via le lien des redirections d'URL (« View URL Redirects » en anglais).

Shopify n'accepte une redirection que depuis une adresse cassée, qui renvoie « page introuvable » : si l'ancienne page existe encore, supprimez-la ou renommez-la d'abord. Quand vous modifiez l'adresse d'une page, la case de création de la redirection est cochée par défaut, et les collections proposent la même option.

Une boutique peut compter jusqu'à 100 000 redirections, 20 millions sur Shopify Plus, importables d'un fichier CSV. Shopify rappelle que ces 301 sont mises en cache par les navigateurs et les moteurs.

Rediriger un site entier vers un autre domaine

Pour un changement de nom de domaine, la règle doit conserver le chemin de chaque page. Sur Apache, dans le .htaccess lu par l'ancien domaine :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?ancien-domaine\.fr$ [NC]
RewriteRule ^(.*)$ https://nouveau-domaine.fr/$1 [R=301,L]

Sur nginx, un bloc dédié à l'ancien domaine suffit, $request_uri reprenant le chemin et les paramètres d'origine :

server {
    listen 80;
    listen 443 ssl;
    server_name ancien-domaine.fr www.ancien-domaine.fr;
    return 301 https://nouveau-domaine.fr$request_uri;
}

L'ancien domaine garde un certificat valide, sans quoi le visiteur en https bute sur une alerte avant la redirection. Chaque variante (avec ou sans www, http ou https) part en un seul saut vers l'adresse finale.

Une fois les redirections en place, l'outil Changement d'adresse de la Search Console signale le déménagement à Google ; il ne sert pas pour un simple passage de http à https. Si le domaine change avec l'hébergeur, notre page sur la migration d'hébergement sans interruption détaille la bascule.

La liste complète d'une migration, de l'inventaire des URL au suivi après bascule, dépasse ce guide : elle est détaillée dans notre checklist de migration SEO, et c'est le cœur de notre accompagnement en migration SEO, dès 990 € HT.

Tester une redirection 301 avec curl

Le navigateur garde les 301 en mémoire et peut appliquer une ancienne règle après correction : testez avec curl, ou en navigation privée.

curl -sI https://www.example.fr/ancienne-page

La réponse doit commencer par HTTP/1.1 301 Moved Permanently (ou HTTP/2 301) et contenir une ligne Location: vers la bonne adresse.

Pour suivre la redirection jusqu'au bout :

curl -s -o /dev/null -L -w "%{http_code} %{num_redirects} %{url_effective}\n" https://www.example.fr/ancienne-page

Résultat attendu : 200 1 https://www.example.fr/nouvelle-page, soit un code final 200, une seule redirection suivie et la bonne adresse finale.

Pour toutes les anciennes adresses, listées une par ligne dans un fichier texte :

while read u; do curl -s -o /dev/null -L -w "$u %{http_code} %{num_redirects} %{url_effective}\n" "$u"; done < anciennes-urls.txt

Chaque ligne qui affiche autre chose que 200 et 1 mérite d'être reprise.

Chaînes et boucles de redirections

Une chaîne apparaît quand une page déjà redirigée déménage encore : A renvoie vers B, qui renvoie vers C. Googlebot suit jusqu'à 10 sauts par défaut, mais Google demande de viser directement la destination finale. Mettez donc à jour les anciennes règles et les liens internes pour qu'ils pointent vers C.

Une boucle est plus grave : A renvoie vers B, qui renvoie vers A, et le navigateur affiche ERR_TOO_MANY_REDIRECTS. En cause, par exemple, deux règles contradictoires, comme un passage forcé en https dans le .htaccess et un réglage inverse dans le CMS. Notre guide pour sortir de l'erreur ERR_TOO_MANY_REDIRECTS montre comment trouver la règle fautive.

Questions fréquentes

Quelle est la différence entre une redirection 301 et une 302 ?

La 301 annonce un déplacement définitif : Google retient la nouvelle adresse comme URL canonique. La 302 annonce un déplacement temporaire : Google suit la redirection sans en faire un signal de changement d'adresse.

Que signifie le code de statut 301 ?

Le code 301, « Moved Permanently », signifie que la ressource demandée a reçu une nouvelle adresse permanente, donnée dans l'en-tête Location de la réponse. Selon la RFC 9110, les liens et références futurs devraient utiliser cette nouvelle adresse.

Comment faire une redirection d'un site vers un autre ?

On pose sur l'ancien domaine une redirection 301 qui conserve le chemin de chaque page : RewriteCond et RewriteRule dans le .htaccess, ou un bloc server avec return 301 sur nginx. L'outil Changement d'adresse de la Search Console signale ensuite le déménagement à Google.

Combien de temps garder une redirection 301 ?

Google recommande de les conserver aussi longtemps que possible, généralement au moins un an, et d'envisager de les garder indéfiniment pour les visiteurs. Les supprimer trop tôt fait réapparaître des 404 sur des liens encore en circulation.

CZSyn est une agence web basée à Marseille. Elle conçoit, développe et maintient des sites internet, des boutiques en ligne, des applications web et mobiles et des logiciels sur mesure pour les TPE et PME de toute la francophonie, et dépanne les sites 24 h/24, 7 j/7.

Vous préparez un changement d'adresses et voulez vérifier vos redirections avant la bascule ? Parlez-nous de votre future arborescence : le pré-audit offert relève l'indexation et les erreurs bloquantes du site actuel, et vous recevez le devis de la migration avec.

Sources

  1. Google Search Central, « La recherche Google et les redirections d'URL », 2026, developers.google.com.
  2. Google Search Central, « Migrer un site avec changement d'URL », 2026, developers.google.com.
  3. Google for Developers, « Effet des codes d'état HTTP sur les robots d'exploration Google », 2026, developers.google.com.
  4. Aide Search Console, « Outil Changement d'adresse », support.google.com.
  5. IETF, RFC 9110, « HTTP Semantics », 2022, rfc-editor.org.
  6. Apache Software Foundation, « Apache Module mod_alias », « Apache Module mod_rewrite », « RewriteRule Flags », « Tutoriel : fichiers .htaccess », httpd.apache.org.
  7. nginx, « Module ngx_http_rewrite_module » et « Command-line parameters », nginx.org.
  8. WordPress Code Reference, « wp_redirect() », « wp_old_slug_redirect() », « wp_check_for_changed_slugs() », « insert_with_markers() », developer.wordpress.org.
  9. PHP, manuel de référence, « header », php.net.
  10. PrestaShop Project, « Managing Products » et « Managing Categories » (PrestaShop 9), docs.prestashop-project.org ; dépôt PrestaShop/PrestaShop, github.com.
  11. Shopify, centre d'aide, « URL redirects », help.shopify.com.
  12. curl, « curl.1 the man page », curl.se.

Nous développons ce type de projet : voir nos réalisations et notre offre de développement web fullstack.

Un projet en tête ?

Diagnostic gratuit, devis ferme, et un seul interlocuteur du premier appel à la mise en ligne.

Appeler : 06 64 81 45 03