Pourquoi maîtriser les redirections 301 ?
Une redirection 301 mal posée — ou oubliée — peut faire chuter votre trafic SEO de 30 à 70 % en quelques semaines. À l’inverse, des 301 bien orchestrées lors d’une migration transmettent quasi 100 % de l’autorité (link equity) de l’ancienne URL vers la nouvelle. C’est l’un des seuls outils qui permet de changer la structure de son site sans perdre des années de référencement accumulé.
Quand utiliser 301 vs autres codes
301 Moved Permanently : URL déplacée définitivement (SEO: transmet le jus)
302 Found / 307 : redirection temporaire
308 Permanent Redirect: identique 301 mais préserve méthode POST
410 Gone : page supprimée définitivement, retirer de l'index
451 Unavailable : raison légale (censure, retrait)
Apache .htaccess
RewriteEngine On
# HTTPS forcé
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# WWW vers non-WWW
RewriteCond %{HTTP_HOST} ^www\.example\.sn$ [NC]
RewriteRule ^(.*)$ https://example.sn/$1 [R=301,L]
# Ancienne URL → nouvelle
Redirect 301 /ancien-article-2022 https://example.sn/nouveau-article
RedirectMatch 301 ^/blog/categorie/(.*)$ /blog/$1
# Supprimer /index.php
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/index\.php
RewriteRule ^index\.php$ / [R=301,L]
# Slash final cohérent (ajouter)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]
Nginx
server {
listen 80;
server_name www.example.sn example.sn;
return 301 https://example.sn$request_uri;
}
server {
listen 443 ssl;
server_name www.example.sn;
return 301 https://example.sn$request_uri;
}
server {
listen 443 ssl;
server_name example.sn;
# Redirections individuelles
location = /old-page { return 301 /new-page; }
location = /blog/tuto-excel-2020 { return 301 /blog/tuto-excel-2026; }
# Par motif
location ~ ^/produit/([0-9]+)-(.*)$ {
return 301 /p/$1;
}
# Supprimer slash final (si convention choisie)
rewrite ^/(.*)/$ /$1 permanent;
}
Next.js
// next.config.mjs
export default {
async redirects() {
return [
{ source: '/blog/ancien-slug', destination: '/blog/nouveau-slug', permanent: true },
{ source: '/categorie/:slug*', destination: '/c/:slug*', permanent: true },
{ source: '/produit/:id(\\d+)-:slug*', destination: '/p/:id', permanent: true },
{ source: '/:path*', has: [{ type: 'host', value: 'www.example.sn' }], destination: 'https://example.sn/:path*', permanent: true },
];
},
};
WordPress
// functions.php
add_action('template_redirect', function () {
$map = [
'/anciens-tutos-excel' => '/blog/categorie/excel',
'/offre-ete-2025' => '/offres/formation-ete-2026',
];
$uri = rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if (isset($map[$uri])) {
wp_redirect($map[$uri], 301);
exit;
}
});
Plugins éprouvés : Redirection (gratuit, interface claire), Yoast Premium (inclus), Rank Math (gratuit) gèrent les redirections depuis l’admin et enregistrent automatiquement lors d’un changement de slug.
Valider les redirections
# curl + suivi
curl -sI https://example.sn/old-url | grep -E '^(HTTP|Location)'
# HTTP/2 301
# location: https://example.sn/new-url
# curl -L suit toutes les redirections
curl -sIL https://example.sn/old-url | grep -E '^(HTTP|Location)'
# Doit idéalement n'avoir qu'UN saut (301 → 200)
# Si 301 → 301 → 301 → 200 : chaine à raccourcir (perte de PageRank)
Audit en masse
import requests, csv
with open("urls_a_rediriger.txt") as f, open("audit.csv","w",newline="") as out:
writer = csv.writer(out)
writer.writerow(["source","status","location","n_redirects","final_url"])
for url in f.read().splitlines():
try:
r = requests.head(url, allow_redirects=False, timeout=10)
hops = [r]
while r.status_code in (301,302,307,308) and len(hops) < 5:
r = requests.head(r.headers["Location"], allow_redirects=False, timeout=10)
hops.append(r)
writer.writerow([url, hops[0].status_code, hops[0].headers.get("Location",""),
len(hops)-1, hops[-1].url])
except Exception as e:
writer.writerow([url, "ERR", str(e), 0, ""])
Règles SEO à respecter
- 301, pas 302, pour les changements définitifs
- Une seule redirection par saut (pas de chaine 301 → 301 → 301)
- Redirection vers une page PERTINENTE (pas la home par défaut) sinon Google pénalise
- Mettre à jour les liens internes pour qu’ils pointent directement sur la destination
- Conserver les redirections au moins 12 mois (le temps que Google recrawle)
- Mettre à jour sitemap.xml avec les nouvelles URLs
Erreurs fréquentes
1. Chaîne de redirections (301 → 301 → 301 → 200)
Cause : chaque migration successive ajoute un maillon à la chaîne sans nettoyer les anciens. Au bout de 5 sauts, Googlebot abandonne et la page n’est plus indexée.
Solution : au moment d’ajouter une nouvelle 301, regardez si l’URL source apparaît déjà comme cible d’une autre redirection. Si oui, mettez à jour l’ancienne pour qu’elle pointe directement vers la destination finale. Auditez avec curl -sIL ou Screaming Frog (rapport « Redirect Chains »).
2. Rediriger toutes les anciennes URLs vers la home
Cause : par paresse, on configure RedirectMatch 301 ^/blog/.*$ /. Google considère cela comme un soft 404 et n’attribue aucune autorité à la home.
Solution : chaque ancienne URL doit pointer vers la page la plus proche thématiquement. Si aucune équivalence n’existe, retournez plutôt un 410 Gone qui dit à Google « cette page n’existe plus, retire-la de l’index ».
3. Utiliser 302 pour un changement permanent
Cause : beaucoup de plateformes (Cloudflare, Vercel) configurent par défaut des 302. Google ne transmet alors pas le PageRank de l’ancienne URL vers la nouvelle.
Solution : vérifiez explicitement avec curl -I. Pour un changement définitif, c’est 301 (ou 308 si vous voulez préserver les requêtes POST).
4. Oublier de mettre à jour les liens internes
Cause : vos articles continuent à lier vers /ancienne-url qui redirige. Chaque visiteur subit un saut inutile, et Google met du temps à recrawler.
Solution : après une migration, faites un find & replace en base de données (plugin Better Search Replace) pour remplacer toutes les occurrences. Mettez aussi à jour le sitemap XML.
5. Boucle de redirection (redirect loop)
Cause : A redirige vers B qui redirige vers A. Le navigateur affiche « ERR_TOO_MANY_REDIRECTS ». Souvent dû à HTTPS forcé combiné à une règle www → non-www mal ordonnée.
Solution : dans .htaccess ou nginx.conf, mettez la règle HTTPS avant la règle www/non-www. Testez avec curl -I http://www.example.sn et curl -I https://www.example.sn séparément.
Monitoring Search Console
Search Console → Couverture → Excluses:
- Page avec redirection : normal si volontaire
- Erreur de redirection : chaine trop longue, boucle → à corriger
- URL envoyée est une redirection : retirer du sitemap
Sur le même thème
- Comprendre et utiliser les liens canoniques — le complément naturel des 301 pour gérer les duplicatas non-redirigeables.
- Comment structurer vos URLs pour un meilleur référencement — pour ne pas avoir à refaire de migration plus tard.
- Créer un sitemap XML — à mettre à jour systématiquement après une vague de redirections.
- Auditer votre SEO technique en 10 étapes — inclut un module sur la détection des chaînes de redirection.
- Référence officielle : Google Search Central — Redirections et Search.
- Outil : httpstatus.io pour tester jusqu’à 100 URLs en lot et visualiser les chaînes complètes.
Étape 1 — Cartographier les URLs avant toute redirection
Avant de poser la moindre 301, exportez la liste complète de vos URLs en ligne. Sur WordPress, le plugin Rank Math fournit un export CSV de toutes les pages indexées. Sinon, lancez un crawl Screaming Frog en mode liste sur sitemap.xml. Visez un fichier avec colonnes URL, statut HTTP actuel, titre, profondeur de clic.
Cette photographie initiale est votre filet de sécurité. Sans elle, vous redirigerez à l’aveugle et créerez des boucles ou des 404 silencieuses qui détruisent l’indexation.
Étape 2 — Distinguer 301, 302 et 410
Trois codes répondent à des intentions différentes. La 301 est permanente, transmet l’autorité, à utiliser pour migration définitive. La 302 est temporaire, ne transmet pas durablement le PageRank, à réserver aux maintenances. La 410 indique « contenu supprimé volontairement, ne revenez pas » et accélère la désindexation Google.
Renommage d'article publié → 301
Maintenance 4 heures → 302
Article retiré pour fact-check → 410 (puis 301 si remplacement existe)
Confondre ces trois codes est l’erreur la plus fréquente que je rencontre lors des audits SEO de blogs francophones.
Étape 3 — Définir la cible de chaque redirection
Une 301 doit pointer vers la page la plus pertinente pour l’utilisateur, pas vers la page d’accueil par paresse. Rediriger /article-supprime vers / dilue le signal de pertinence et déclasse le domaine sur le long terme.
Si aucun équivalent n’existe, choisissez la page de catégorie la plus proche thématiquement, ou servez une 410 plutôt qu’une 301 vers /. Cette discipline préserve la confiance que Google place dans votre arborescence.
Étape 4 — Appliquer les redirections via Rank Math (cas WordPress)
Pour un site WordPress avec Rank Math activé, ouvrez Rank Math → Redirections → Add New. Saisissez l’URL source (sans le domaine), choisissez 301 Permanent, et collez l’URL cible complète.
Source : /ancien-article-2024
Type : 301 Permanent
Cible : https://exemple.sn/nouveau-guide-2026/
Activez la règle, puis testez immédiatement avec curl -I depuis un terminal pour vérifier le code de retour. Validation visuelle : HTTP/2 301 et Location: pointant sur la cible attendue.
Étape 5 — Utiliser les regex pour les patterns de masse
Quand 50 URLs partagent un préfixe commun, écrire 50 règles individuelles est une perte de temps. Rank Math accepte les regex : un pattern remplace 50 lignes.
Source (regex) : ^/comment-creer-systeme-au-senegal-(.*)$
Cible : /guide-creer-systeme-information/
Type : 301
Testez la regex sur regex101.com avant de l’activer. Une regex trop large (par exemple ^/article-) peut capturer des URLs valides et générer des boucles. Toujours commencer par une preview sur 3 à 5 URLs avant le déploiement large.
Étape 6 — Configurer côté serveur quand le plugin n’est pas disponible
Sur Apache, éditez le .htaccess à la racine. Sur Nginx, modifiez le bloc server du virtual host. Cette voie est plus rapide à l’exécution (pas de bootstrap WordPress) mais demande un accès SSH ou cPanel.
# Apache .htaccess
Redirect 301 /ancien-chemin /nouveau-chemin
# Nginx
location = /ancien-chemin {
return 301 /nouveau-chemin;
}
Rechargez le service après modification (apachectl graceful, nginx -s reload). Une faute de syntaxe dans .htaccess peut renvoyer une 500 sur tout le site : gardez une copie de sauvegarde avant édition.
Étape 7 — Éviter les chaînes et les boucles
Une chaîne A → B → C dilue l’autorité et augmente le temps de réponse. Google déconseille au-delà de 2 sauts. Auditez régulièrement avec httpstatus.io ou Screaming Frog (rapport Redirect Chains).
Pour casser une chaîne, rééditez la première règle pour qu’elle pointe directement vers la destination finale. Une boucle (A → B → A) bloque carrément le crawl : à corriger sous 24 heures.
Étape 8 — Soumettre à Google et Bing après mise en place
Une 301 posée n’est pas immédiatement vue par les moteurs. Accélérez l’inspection en utilisant Google Search Console (URL Inspection → Request Indexing) sur l’ancienne et la nouvelle URL. Côté Bing, IndexNow déclenche une re-crawl en moins d’une heure.
curl "https://www.bing.com/indexnow?url=https://exemple.sn/nouveau-guide-2026/&key=VOTRE_CLE"
Sur Rank Math, l’option IndexNow est activable en deux clics dans Settings → IndexNow. Une fois branché, chaque sauvegarde d’article ping automatiquement Bing.
Étape 9 — Surveiller l’effet sur 4 à 8 semaines
Suivez trois indicateurs dans Search Console : nombre d’URLs « Avec redirection », taux d’impressions sur la nouvelle URL, position moyenne sur les requêtes ciblées. La transition typique demande 4 à 8 semaines pour stabilisation complète.
Si la nouvelle URL ne récupère pas le trafic dans ce délai, vérifiez que le contenu est équivalent, que les liens internes pointent désormais vers la cible, et que la 301 est bien servie sans header conflictuel (par exemple un Cache-Control trop agressif qui sert l’ancien HTML depuis un CDN).
Étape 10 — Documenter les redirections dans un référentiel
Tenez un fichier redirections.csv versionné dans Git ou stocké sur Drive avec date, source, cible, motif, auteur. Ce registre devient inestimable lors d’une migration future ou d’un audit SEO à 12 mois.
2026-04-22, /comment-creer-systeme-au-senegal-, /guide-creer-systeme-information/, 301, Cluster trash, Maïmouna
Une équipe sans registre re-redirige des URLs déjà redirigées et casse l’historique. Trente minutes de discipline par mois évitent des heures de débogage à la prochaine refonte.
Récapitulatif opérationnel
301 maîtrisées = cartographie + bon code HTTP + cible pertinente + plugin ou serveur + regex pour la masse + zéro chaîne + soumission Google/Bing + monitoring 4-8 semaines + registre. Posez ce socle une fois, vous protégez votre SEO sur cinq ans.
Erreurs fréquentes à éviter
Premier piège : rediriger vers la home par défaut, ce qui dilue la pertinence et déclasse le domaine. Deuxième piège : utiliser 302 pour une migration définitive et constater six mois plus tard que l’autorité ne se transmet pas. Troisième piège : empiler les chaînes en oubliant de réviser les anciennes règles, ce qui finit par produire des boucles infinies. Quatrième piège : ne pas tester avec curl avant de déclarer la mise en production réussie.
Notes terrain
Sur les migrations observées en zone CFA en 2026, un site qui applique correctement ces dix étapes récupère 85 à 95 pour cent de son trafic organique en 6 à 8 semaines après bascule. Sans cartographie ni registre, la perte se stabilise souvent autour de 30 à 45 pour cent et ne se rattrape jamais complètement.
Astuce maillage
Pendant la mise en place, profitez de la phase de mapping pour identifier les liens internes qui pointent encore vers d’anciennes URLs et les mettre à jour directement vers la cible finale. Cela évite que Googlebot consomme du budget de crawl sur des sauts inutiles, et améliore la propagation du PageRank de 10 à 20 pour cent selon les retours observés sur des blogs francophones moyens.