307 Redirection temporaire

Ce qu'est une redirection temporaire 307, comment elle préserve strictement la méthode HTTP contrairement à une 302, où elle apparaît (HSTS, déplacements temporaires) et comment Google la traite en SEO.

Première publication : 28 juin 2026 · Dernière mise à jour : 22 août 2026 · Advanced
Langues
1 indice probant sur cette page

Une 307 Temporary Redirect est un déplacement temporaire, comme une 302 : elle envoie utilisateurs et moteurs de recherche vers une nouvelle URL sans demander à Google de transférer le classement de l'ancienne URL à la nouvelle. Sa seule vraie différence avec une 302 est une garantie de la spécification : une 307 ne doit pas modifier la méthode ni le corps de la requête, donc un POST reste un POST. Cela compte pour les formulaires, les API et les frameworks modernes (Next.js utilise 307 par défaut), mais pas pour les redirections ordinaires de page à page en GET. La 307 qui déroute le plus souvent n'est pas une redirection : c'est l'artefact produit par le HSTS du navigateur lorsqu'il transforme http en https, avec un corps de 0 octet que le serveur n'a jamais envoyé. Un vérificateur de redirections ou une requête curl simple (et pas seulement une fenêtre privée, qui ne peut pas contourner la liste HSTS préchargée du navigateur) montre le véritable code d'état.

TL;DR — Une 307 est une redirection temporaire qui, selon la RFC 9110, « MUST NOT change the request method » (traduction) : « NE DOIT PAS modifier la méthode de la requête » — c’est la seule garantie ferme qu’une 302 ne donne pas. Pour le SEO, c’est un non-événement : la documentation de Google la décrit comme « Equivalent to 302 » (traduction) : « équivalente à 302 » (un signal faible et temporaire), et Mueller a dit que le choix entre 307 et 302 « doesn’t really matter » (traduction) : « ne fait pas vraiment de différence » pour la recherche. La question est de savoir si la redirection doit fonctionner pour du trafic POST ou API. La 307 qui déroute réellement est l’artefact HSTS : une « redirection » de 0 octet, visible seulement dans le navigateur, que le serveur n’a jamais envoyée, lorsque le navigateur transforme lui-même http en https. Il existe deux cas sans rapport fonctionnel, et les distinguer est le cœur du sujet.

Une 307 recouvre deux cas complètement différents

C’est l’idée directrice de tout ce qui suit. Elle vient directement de mon propre guide des codes d’état, où la 307 possède deux entrées distinctes : « 307 Temporary Redirect – Has the same functionality as a 302 redirect, except you can’t switch between POST and GET » (traduction) : « 307 Temporary Redirect — a la même fonction qu’une redirection 302, sauf qu’on ne peut pas basculer entre POST et GET » ; et « 307 HSTS Policy – Forces the client to use HTTPS when making requests instead of HTTP. » (traduction) : « 307 HSTS Policy — force le client à utiliser HTTPS au lieu de HTTP pour ses requêtes. » Elles partagent un numéro et presque rien d’autre :

  1. La 307 comme vraie redirection temporaire émise par le serveur — choisie délibérément (ou fournie par défaut par un framework) pour préserver la méthode et le corps HTTP d’une requête qui n’est pas une requête GET.
  2. La 307 comme artefact du navigateur lié au HSTS — ce n’est pas du tout une réponse du serveur. Le navigateur transforme http en https en interne et étiquette cette mise à niveau comme une 307.

Confondre ces deux cas est la principale source de confusion autour des 307. Examinons-les l’un après l’autre.

Cas 1 : la vraie 307 — ce que la spécification exige réellement

La RFC 9110, la spécification actuelle sur la sémantique HTTP, est sans ambiguïté au §15.4.8 :

“The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.” (traduction) : « Le code d’état 307 (Temporary Redirect) indique que la ressource cible se trouve temporairement sous une URI différente et que l’agent utilisateur NE DOIT PAS modifier la méthode de la requête s’il effectue une redirection automatique vers cette URI. »

Evidence for this claim RFC 9110 defines 307 Temporary Redirect as a temporary move and requires clients not to change the request method when following it automatically. Scope: HTTP semantics for real server 307 responses, not browser-internal HSTS displays. Confidence: high · Verified: IETF: RFC 9110 §15.4.8 — 307 Temporary Redirect

Ce « MUST NOT » est une exigence ferme, pas une suggestion. La section 302 (§15.4.3) décrit au contraire le comportement historique que la 307 a été créée pour corriger : un agent utilisateur peut transformer un POST en GET lors de la requête suivante et doit utiliser une 307 si cette conversion n’est pas souhaitée. En d’autres termes, la 307 existe précisément pour supprimer l’ambiguïté POST→GET que les anciens clients avaient avec les 302.

MDN donne la version pratique de la même distinction :

“The difference between 307 and 302 is that 307 guarantees that the client will not change the request method and body when the redirected request is made. With 302, older clients incorrectly changed the method to GET. 307 and 302 responses are identical when the request method is GET.” (traduction) : « La différence entre 307 et 302 est que 307 garantit que le client ne modifiera ni la méthode ni le corps de la requête lors de la redirection. Avec 302, d’anciens clients modifiaient à tort la méthode en GET. Les réponses 307 et 302 sont identiques lorsque la méthode de la requête est GET. »

Cette dernière phrase est la plus importante pour le SEO. Presque toutes les redirections qui intéressent un spécialiste SEO — d’une ancienne page vers une nouvelle — sont des requêtes GET, et avec une requête GET, une 307 et une 302 sont littéralement identiques. La garantie de préservation de la méthode n’intervient que lorsque la méthode n’est pas GET : renvoi de formulaires, points de terminaison d’API, cibles de webhooks, passage d’une commande ou d’une authentification par POST. La spécification garantit la méthode et le corps, mais ne fixe pas à elle seule la gestion exacte des en-têtes, des identifiants ou des requêtes interorigines lors de la retransmission : vérifiez ces éléments avec votre client réel au lieu de supposer un comportement identique au niveau des octets. Si vous comparez les deux codes pour un déplacement de page ordinaire, le sujet est traité en détail dans l’article consacré à la comparaison 302/307 ; cet article suppose que vous connaissez déjà le concept de redirection temporaire et se concentre sur ce qui est propre à la 307.

302, 303 ou 307 : un tableau récapitulatif

Les trois codes appartiennent à la catégorie « temporaire » de la RFC, mais leur comportement diffère sur les deux axes qui comptent réellement : la conservation de la méthode et la mise en cache :

CodeMéthode lors d’une redirection automatiqueMise en cache heuristique ?
302 FoundPeut transformer POST en GET (comportement historique des clients ; ce n’est pas une exigence de la RFC)Non
303 See OtherRécupère volontairement la cible avec GET ou HEADNon
307 Temporary RedirectNE DOIT PAS modifier la méthodeNon

Aucun des trois codes n’est mis en cache de manière heuristique par défaut : une 307 (comme une 302 et une 303) a besoin d’un signal explicite de fraîcheur (Cache-Control, Expires, etc.) avant qu’un cache puisse la stocker sans nouvelle vérification.

Cas 1, suite : comment Google traite une vraie 307 en SEO

Version courte : exactement comme une 302. La documentation Google sur les codes d’état HTTP indique pour la ligne 307 « Equivalent to 302 » (traduction) : « équivalente à 302 », et la ligne 302 dont elle hérite précise ce que cela signifie :

“By default, Google’s crawlers follow the redirect, and Google systems use the redirect as a weak signal that the redirect target should be processed.” (traduction) : « Par défaut, les robots d’exploration de Google suivent la redirection et les systèmes Google utilisent la redirection comme un signal faible indiquant que la cible doit être traitée. »

« Weak » est le mot important : une redirection temporaire ne regroupe pas la canonicalisation sur la cible comme le ferait une redirection permanente. La documentation Google sur les redirections et Google Search regroupe les 302, 303 et 307 sous « temporary » et décrit directement le comportement : « Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical. » (traduction) : « Googlebot suit la redirection, mais le pipeline d’indexation n’utilise pas la redirection comme signal indiquant que la cible doit être canonique. » Même page, même intention : « If you just want to send users to a different page temporarily, use a temporary redirect. » (traduction) : « Si vous voulez seulement envoyer les utilisateurs vers une autre page temporairement, utilisez une redirection temporaire. »

Evidence for this claim Google's indexing pipeline does not use a temporary 302, 303, or 307 redirect as a signal that the redirect target should be canonical. Scope: redirect crawling, indexing, and canonicalization Confidence: high · Verified: Redirects and Google Search

Immédiatement après les lignes consacrées aux 307 et aux 308, Google ajoute la réserve à retenir :

“While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (traduction) : « Même si Google traite ces codes d’état de la même manière, gardez à l’esprit qu’ils sont sémantiquement différents. Utilisez le code d’état adapté à la redirection afin que d’autres clients (par exemple des liseuses ou d’autres moteurs de recherche) puissent en tirer parti. »

Google regroupe donc les 307 et 302 pour le classement, tout en vous demandant de choisir le code sémantiquement correct. C’est toute la réponse SEO. Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the HTTP semantics differ. Scope: Google Search redirect handling; clients still need the semantically appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search John Mueller l’a formulé encore plus directement dans l’épisode 51 de l’émission “Search Off the Record” (traduction) : « Hors micro » (« Parlons des redirections »), en expliquant que « with 307, 308, it also forwards POST requests » (traduction) : « avec 307 et 308, les requêtes POST sont également transmises », contrairement aux 301/302, qui transmettent des requêtes GET, avant de conclure :

Pour John Mueller, le choix entre 302 et 307 ne change pas vraiment le SEO : la question pratique est surtout de savoir si la redirection fonctionne pour les API, qui n’ont généralement pas vocation à être indexées directement dans la recherche.

Il n’y a aucun avantage de classement à remplacer vos redirections temporaires par des 307. La seule raison valable de la choisir est la conservation de la méthode et du corps — ou, comme préférence générale de pérennité, ce que j’aborderai à la fin.

Cas 1, suite : les valeurs par défaut des frameworks et des CDN

De plus en plus de questions « pourquoi est-ce une 307 ? » ne viennent pas d’un choix explicite, mais des valeurs par défaut des frameworks. La fonction redirect() de Next.js utilise une 307 par défaut, et sa documentation explique pourquoi sous un titre littéralement intitulé « Why does redirect use 307 and 308? » : « The redirect() method uses a 307 by default, instead of a 302 temporary redirect, meaning your requests will always be preserved as POST requests. » (traduction) : « La méthode redirect() utilise 307 par défaut au lieu d’une redirection temporaire 302, ce qui signifie que vos requêtes seront toujours conservées comme des requêtes POST. » (Next.js utilise précisément 303 dans les Server Actions et fournit permanentRedirect() pour le cas 308.) Si vous voyez des 307 que vous n’avez pas écrites, vérifiez si votre framework ou votre plateforme edge les utilise par défaut pour les redirections qui ne sont pas des GET : c’est généralement la réponse, et généralement le bon comportement.

Cas 2 : l’« artefact 307 » HSTS que votre serveur n’a jamais envoyé

C’est le territoire réellement peu couvert, et celui où un article consacré à la 307 est utile. Lorsqu’un site envoie un en-tête Strict-Transport-Security (HSTS), il dit au navigateur : à partir de maintenant, charge-moi toujours en https. Lors de la prochaine requête vers la version http, le navigateur passe lui-même en https sans contacter le serveur, et affiche cette mise à niveau interne comme une « 307 » dans les outils de développement et les robots d’exploration.

John Mueller a expliqué ce mécanisme sur son site personnel :

“After seeing the HTTPS URL with the HSTS header (for example, with any redirect from the HTTP version), Chrome will act like it’s seeing a 307 redirect the next time you try to access the HTTP page. Your server’s not returning a 307, Chrome is just showing it to you as such to explain that it’s doing the redirect for you.” (traduction) : « Après avoir vu l’URL HTTPS avec l’en-tête HSTS (par exemple avec n’importe quelle redirection depuis la version HTTP), Chrome se comportera comme s’il voyait une redirection 307 la prochaine fois que vous tenterez d’accéder à la page HTTP. Votre serveur ne renvoie pas une 307 : Chrome vous l’affiche ainsi pour expliquer qu’il effectue la redirection pour vous. »

Le corps de 0 octet est le signe révélateur. Mueller ajoute : « the 307 isn’t actually a redirect at all, it’s just a placeholder » (traduction) : « la 307 n’est en réalité pas une redirection, c’est seulement un espace réservé ». Mon propre guide des redirections présente la conséquence pratique pour les audits : « When web servers require clients to only use HTTPS connections (HSTS policy), Google won’t see the 307 because it’s cached in the browser. The initial hit (without cache) will have a server response code that’s likely a 301 or a 302. But your browser will show you a 307 for subsequent requests which makes it more difficult to troubleshoot. You will need to use a fresh Incognito session to see the returned status code. » (traduction) : « Lorsque les serveurs Web exigent que les clients utilisent uniquement des connexions HTTPS (politique HSTS), Google ne verra pas la 307, car elle est mise en cache dans le navigateur. La première requête (sans cache) recevra probablement une réponse serveur 301 ou 302. Mais votre navigateur affichera une 307 lors des requêtes suivantes, ce qui complique le dépannage. Vous devrez utiliser une nouvelle session privée pour voir le code d’état renvoyé. »

Ce que Googlebot voit réellement avec HSTS (et l’évolution du récit)

Deux déclarations de Google, séparées de cinq ans, méritent d’être lues ensemble. En décembre 2015, Zineb Ait Bahajji (alors chez Google) a déclaré, selon Search Engine Roundtable, « With HSTS implemented, Googlebot sees a 301 redirect (try it with Fetch as Google). The 307 is just an ‘internal redirect’. » (traduction) : « Avec HSTS, Googlebot voit une redirection 301 (essayez avec Fetch as Google). La 307 n’est qu’une “redirection interne”. » En octobre 2020, la formulation de Mueller dans une vidéo Ask Google Webmasters (par Search Engine Journal) était légèrement différente : « In short, [Googlebot] doesn’t interact with them. 307 redirects are generally not real redirects. » (traduction) : « En bref, Googlebot n’interagit pas avec elles ; les redirections 307 ne sont généralement pas de vraies redirections. » Dans les deux cas, le robot ne voit pas la même « 307 » que l’humain dans les outils de développement : les outils et l’infrastructure d’exploration ont changé (Fetch as Google a été remplacé par l’Inspection de l’URL), mais l’idée centrale tient depuis au moins une décennie : dans le cas HSTS, Googlebot n’interagit pas avec une vraie 307 émise par le serveur. Considérez la déclaration de 2020 comme l’orientation actuelle ; celle de 2015 est utile pour l’historique.

La conséquence opérationnelle est importante : le HSTS est une commodité de navigateur, pas un mécanisme de découverte pour les robots. Les propriétaires de sites doivent toujours prévoir une vraie redirection côté serveur (une véritable 301) de http vers https s’ils veulent que ce chemin fonctionne pour les robots.

Comment Bing traite-t-il une 307 ?

Honnêtement, il existe une lacune documentaire. Je n’ai trouvé aucune déclaration publique de Bing qui traite nommément la 307 ou la 307 provoquée par le HSTS. Les recommandations de Bing sur les redirections (l’article de 2011 Gérer les redirections — 301, 302 et balises canoniques et celui de 2020 Migrer un site avec Bing) couvrent uniquement la distinction permanente/temporaire 301/302 — pas les 307, 308 ou le HSTS. Plutôt que de supposer une parité avec Google, restons précis : Bing n’a pas publié de position spécifique sur les 307. Le phénomène demeure réel et pertinent pour l’exploration quel que soit le moteur — Screaming Frog propose un réglage « Respect HSTS Policy » justement parce que le HSTS influence l’exploration — mais il s’agit d’une documentation d’outil, pas d’une déclaration de Bing.

Quand choisir volontairement une 307 ?

Choisissez une 307 plutôt qu’une 302 chaque fois que perdre la méthode ou le corps d’origine casserait quelque chose :

  • Points de terminaison d’API et cibles de webhooks qui reçoivent des POST/PUT/PATCH.
  • Flux d’envoi de formulaires (POST) qui redirigent après traitement.
  • Passages POST de paiement ou de connexion entre deux hôtes.
  • Toute requête contenant un corps que vous ne pouvez pas vous permettre de perdre.

Pour un simple déplacement de page, une 302 et une 307 sont indiscernables pour Google : les deux conviennent du point de vue SEO. Si la version de ce mécanisme est permanente, il s’agit de la relation 301/308 : la 308 est à la 301 ce que la 307 est à la 302.

Ma préférence déclarée, dans le guide des redirections, est plus tranchée que le classique « cela ne fait pas de différence » : « my preferred order would be: 307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0. » (traduction) : « Mon ordre de préférence serait : 307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0. » Je place la 307 en tête des options temporaires : l’utiliser systématiquement garantit la sécurité du côté de la préservation de la méthode, ce qui rejoint à peu près l’argument de « complétude » de Mueller. Quel que soit votre choix, veillez à ce qu’une vraie 307 (ou l’artefact HSTS) ne devienne pas un saut dans une chaîne plus longue : chaque saut supplémentaire ajoute de la latence et réduit l’efficacité.

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.