Stig som delar sig i två vägar i skogenFoto: Han-Chieh Lee via Pexels

301 vs 302 redirect: vilken ska du använda?

Den korta regeln: är flytten permanent väljer du 301, är den tillfällig väljer du 302. Skillnaden låter liten men får stora följder för din synlighet i sökmotorerna, för väljer du fel kan den adress du ville bygga upp aldrig ta över. Här reder vi ut när du ska använda vilken, och var 307 och 308 kommer in.

Den grundläggande skillnaden

En 301 Moved Permanently säger att resursen flyttat för gott. Sökmotorn för över värdet och gör den nya adressen till den kanoniska. En 302 Found säger att flytten är tillfällig. Den ursprungliga adressen förblir den kanoniska, och sökmotorn fortsätter att betrakta den som hemmet medan besökaren tillfälligt skickas någon annanstans. Båda koderna definieras i RFC 9110.

Beslutsguide

  1. Kommer den gamla adressen att finnas kvar och vara den riktiga på sikt? Om nej, det här är en flytt för gott, gå till punkt 2. Om ja, sidan är bara tillfälligt någon annanstans, gå till punkt 3.
  2. Permanent flytt: använd 301. Behöver du dessutom garantera att HTTP-metoden bevaras, till exempel att en POST förblir en POST, använd 308.
  3. Tillfällig flytt: använd 302. Behöver du garantera att metoden bevaras, använd 307.

Jämförelse av de fyra koderna

Kod Permanent eller tillfällig Bevarar metoden Effekt för SEO
301 Permanent Nej, kan ändras till GET Stark kanonisk signal. Värdet förs över till den nya adressen.
302 Tillfällig Nej, kan ändras till GET Den gamla adressen förblir kanonisk. Inget värde flyttas över.
307 Tillfällig Ja Som 302 men metoden bevaras. Den gamla adressen förblir kanonisk.
308 Permanent Ja Som 301 men metoden bevaras. Värdet förs över.

Varför 301 och 302 kan byta metod

Av historiska skäl tillåter standarden att en webbläsare ändrar en POST till en GET när den följer en 301 eller 302. I praktiken gör de flesta webbläsare just det. Vill du vara säker på att metoden inte ändras, till exempel vid ett formulär som skickar data, ska du använda 307 (tillfällig) eller 308 (permanent), som är just metodbevarande motsvarigheter. För vanliga sidomdirigeringar, där det handlar om GET-anrop, räcker 301 och 302 gott.

Välj 301 när

  • Du byter domän eller adress för gott.
  • Du slår ihop flera adresser till en.
  • Du tvingar fram https eller en www-variant.
  • Du migrerar en sajt och vill behålla din ranking.

Välj 302 när

  • Du kör en tillfällig kampanjsida och vill tillbaka till originalet sedan.
  • Du gör underhåll och pekar tillfälligt om till en statussida.
  • Du A/B-testar och vill att originaladressen förblir den kanoniska.

Det vanligaste felet

Att råka använda 302 vid en permanent flytt. Då fortsätter sökmotorn att se den gamla adressen som den riktiga, och den nya får aldrig ärva värdet. Många system sätter dessutom 302 som standard om man inte anger annat, så kontrollera alltid vilken kod som faktiskt skickas. Hur du verifierar det visar vi i guiden om redirect i htaccess, nginx och WordPress. Behöver du grunderna först, läs vad en 301-redirect är.

Vad en HTTP-statuskod faktiskt är

För att förstå 301 och 302 hjälper det att veta var de hör hemma. Varje gång en webbläsare ber en server om en sida svarar servern med en treställig statuskod som beskriver vad som hände. Koderna delas in i fem grupper efter första siffran, något som definieras i RFC 9110:

  • 1xx, informativa. Begäran togs emot och behandlas, till exempel 100 Continue.
  • 2xx, lyckade. Begäran gick igenom, till exempel 200 OK.
  • 3xx, omdirigeringar. Resursen finns någon annanstans och klienten behöver göra ett nytt anrop. Hit hör 301, 302, 307 och 308.
  • 4xx, klientfel. Något var fel i begäran, till exempel 404 Not Found.
  • 5xx, serverfel. Servern misslyckades med en i grunden giltig begäran, till exempel 500 Internal Server Error.

En 301 och en 302 är alltså två varianter av samma sorts svar i 3xx-familjen: båda säger åt webbläsaren att gå vidare till en annan adress. Skillnaden ligger i om flytten är permanent eller tillfällig, och det är just den skillnaden som avgör hur sökmotorn behandlar dina adresser.

Webbläsaren cachar en 301 hårt

En viktig praktisk skillnad är hur länge svaret lever kvar i besökarens webbläsare. Eftersom en 301 säger att flytten är permanent får webbläsaren spara den lokalt och hoppa direkt till den nya adressen vid nästa besök, utan att ens fråga servern igen. En 302 är tillfällig och cachas normalt inte på samma sätt, så webbläsaren frågar servern på nytt.

Det här gör en felaktig 301 svår att ångra. Har en besökares webbläsare väl sparat omdirigeringen fortsätter den att skicka vidare även efter att du tagit bort regeln på servern, ända tills cachen löper ut eller töms. Hur länge styrs av eventuella Cache-Control-rubriker på svaret, och utan sådana får webbläsaren själv avgöra hur länge den behåller posten. Slutsatsen är praktisk: testa aldrig en ny omdirigering med en 301 medan du fortfarande experimenterar. Använd en 302 under tiden och byt till 301 först när du vet att målet är rätt.

Vad sökmotorn gör vid en 302

När sökmotorn möter en 302 behandlar den den gamla adressen som hemmet. I praktiken betyder det att roboten fortsätter att besöka och hålla kvar den gamla adressen i indexet i stället för att ersätta den med målet. Det kan leda till att både den gamla och den nya adressen ligger i indexet samtidigt med samma innehåll, vilket inte är vad du vill om flytten egentligen är permanent. Vid en 301 byter sökmotorn i stället successivt ut den gamla adressen mot den nya och för över värdet dit.

Kanoniska versioner: https och www

Ett vanligt och permanent fall där du nästan alltid vill ha en 301 är att samla sajten på en enda kanonisk version. En sida kan annars nås på flera adresser som ser olika ut men visar samma innehåll, till exempel både med och utan www och både över http och https. Lämnas alla varianter öppna riskerar du att sökmotorn ser flera kopior och delar upp värdet mellan dem.

Lösningen är att välja en variant som den riktiga och 301:a alla andra dit. De flesta tvingar fram https och väljer antingen med eller utan www, och pekar resten av varianterna permanent till den valda. Eftersom det här är ett permanent val passar 301, aldrig 302. Konkreta regler för Apache och nginx finns i guiden om redirect i htaccess, nginx och WordPress.

När en ”tillfällig” ändring saboterar SEO

Felet att råka använda 302 vid en permanent flytt dyker ofta upp i tekniska miljöer där omdirigeringen sätts i kod i stället för i en serverfil. Ett bibliotek eller ramverk som svarar med en redirect använder inte sällan 302 som standard om ingen kod anges uttryckligen. En utvecklare som tänker ”jag pekar bara om den här adressen” kan därför oavsiktligt skicka en tillfällig signal vid en flytt som i själva verket är för gott.

Detta gäller även i moderna uppdelade arkitekturer, där frontend och backend är skilda och adresser hanteras i ett applikationslager eller ett API. Skickar koden en 302 vid en permanent omflyttning förs inget värde över, precis som vid vilken annan felaktig 302 som helst. Gör flytten permanent i koden ska statuskoden uttryckligen sättas till 301, eller till 308 om även HTTP-metoden måste bevaras. Verifiera alltid med curl -I vilken kod som faktiskt skickas, oavsett var omdirigeringen sätts upp.