Kodredigerare med HTML-fil och terminal, en bild för felsökning av redirectsFoto: César Gaviria via Pexels

Felsök och mät redirects: statuskoder och verktyg

En omdirigering som ser rätt ut i webbläsaren kan ändå skicka fel signal i bakgrunden. Skillnaden mellan en 301 och en 302 syns inte för besökaren, men den avgör om sökmotorn för över värdet till din nya adress eller inte. Därför räcker det inte att klicka och se att rätt sida laddas. Du behöver läsa själva statuskoden. Här går vi igenom 3xx-koderna som referens och visar konkret hur du inspekterar en omdirigering med terminal och webbläsare tills du vet exakt vad som händer.

3xx-koderna som referens

Alla omdirigeringskoder ligger i 3xx-serien och definieras i RFC 9110. De som rör flytt av en adress är 301, 302, 303, 307 och 308. Två koder till hör tekniskt till serien men handlar inte om att peka vidare: 300 och 304. Tabellen nedan sammanfattar dem.

Kod Namn Permanent eller tillfällig Bevarar HTTP-metoden Kort beskrivning
301 Moved Permanently Permanent Inte garanterat Resursen har flyttat för gott. Sökmotorn för över värdet och gör målet kanoniskt.
302 Found Tillfällig Inte garanterat Resursen finns tillfälligt på en annan adress. Den gamla adressen förblir den kanoniska.
303 See Other Tillfällig Nej, tvingar fram GET Hämta målet med en GET, oavsett vilken metod den ursprungliga begäran hade. Vanlig efter en POST.
307 Temporary Redirect Tillfällig Ja Som 302, men metoden bevaras. En POST förblir en POST mot den nya adressen.
308 Permanent Redirect Permanent Ja Som 301, men metoden bevaras. Permanent flytt där en POST ska förbli en POST.
300 Multiple Choices Ingen omdirigering Inte tillämpligt Flera möjliga representationer finns. Sällsynt i praktiken, ingen automatisk vidaresändning.
304 Not Modified Ingen omdirigering Inte tillämpligt Innehållet är oförändrat sedan webbläsaren senast hämtade det. Svar på en villkorad begäran, inte en flytt.

Den praktiska kärnan: 301 och 308 är permanenta, 302, 303 och 307 är tillfälliga. Skillnaden mellan paren 301 och 308 respektive 302 och 307 är att 307 och 308 garanterar att HTTP-metoden bevaras, medan 303 tvärtom alltid byter till GET. 304 och 300 dyker upp i annan trafik och ska inte tolkas som en flytt. För en djupare jämförelse av just 301 mot 302, se guiden om 301 vs 302, och för grunderna om vad en permanent omdirigering innebär guiden om vad en 301-redirect är.

Inspektera med curl

Det snabbaste sättet att se vad en adress faktiskt svarar är curl -I, som hämtar bara svarsrubrikerna utan själva sidans innehåll.

curl -I https://example.se/gammal-sida/

Översta raden visar statuskoden, till exempel HTTP/2 301. Är koden i 3xx-serien följs den av en Location-rubrik som talar om vart du skickas vidare. Det här enskilda anropet visar bara det första hoppet. Vill du följa hela vägen till slutmålet lägger du till -L, och med -s tystar du förloppsutskriften så att utskriften blir ren.

curl -sIL https://example.se/gammal-sida/

Nu skrivs ett rubrikblock ut per hopp, det ena efter det andra, ända tills en sida svarar 200. För att snabbt se bara statuskoderna och vart varje hopp pekar filtrerar du fram raderna med grep:

curl -sIL https://example.se/gammal-sida/ | grep -i "^HTTP\|^location"

Flaggan -i till grep gör matchningen okänslig för gemener och versaler, vilket är bra eftersom rubriknamn kan skrivas på olika sätt. Resultatet blir en kompakt lista: en statusrad och en Location-rad per hopp, och till sist en HTTP-rad med 200 när du nått fram.

Läsa Location-rubriken

Vid en omdirigering är Location-rubriken hela poängen. Den talar om exakt vart servern skickar dig härnäst, och det är här de flesta fel avslöjar sig. Tre saker är värda att granska:

  • Pekar den på rätt slutmål? Om Location pekar på en adress som i sin tur omdirigerar igen har du en kedja. Den bör peka direkt på den slutgiltiga sidan.
  • Är protokollet och värden rätt? Kontrollera att den pekar på https och på den kanoniska värden, med eller utan www enligt hur sajten är upplagd, så att besökaren inte tvingas till ett extra hopp efteråt.
  • Pekar den tillbaka dit du kom? Om Location leder tillbaka till den adress du redan begärt har du en loop, och webbläsaren kommer till slut att ge upp.

Mer om hur kedjor och loopar uppstår och rätas ut finns i guiden om redirect-kedjor och loopar.

Hitta en oavsiktlig 302

Det vanligaste tysta felet är en 302 där du egentligen ville ha en 301. Besökaren märker ingenting, rätt sida laddas, men sökmotorn behåller den gamla adressen som kanonisk och för aldrig över värdet till målet. Eftersom inget syns i webbläsaren upptäcks felet bara genom att läsa statuskoden.

curl -sI https://example.se/gammal-sida/ | grep -i "^HTTP"

Står det 302 eller Found där du planerat en permanent flytt har du hittat felet. Ett vanligt skäl är att ett ramverk eller bibliotek svarar med 302 som standard när ingen kod anges uttryckligen, eller att en omdirigering satts i kod i stället för i serverns konfiguration. Rätta genom att uttryckligen sätta 301, eller 308 om även HTTP-metoden måste bevaras, och verifiera sedan på nytt.

Inspektera i webbläsarens devtools

Terminalen är snabbast, men webbläsarens utvecklarverktyg ger samma information visuellt och är bra när du vill se en omdirigering i sitt sammanhang. Öppna devtools, oftast med F12, och gå till fliken Network. Ladda om sidan och du ser varje begäran som en rad, omdirigeringar inkluderade.

  1. Markera kryssrutan Preserve log så att raderna inte rensas när sidan navigerar vidare. Utan den försvinner mellanstegen i en kedja innan du hinner läsa dem.
  2. Klicka på den första begäran i kedjan och titta under Headers. Där ser du statuskoden, till exempel 301, och under svarsrubrikerna hittar du Location.
  3. Följ raderna nedåt: varje 3xx-rad är ett hopp, och kolumnen Status låter dig läsa hela kedjan tills du når raden som svarar 200.

Devtools-panelen dokumenteras av MDN tillsammans med statuskoderna, om du vill slå upp en enskild kod medan du felsöker.

Onlineverktyg för redirect-koll

Det finns gott om webbaserade redirect-kontroller där du klistrar in en adress och får hela kedjan med statuskoder listad. De är bekväma när du inte har en terminal till hands, och de flesta visar samma sak som curl -sIL: varje hopp, dess kod och dess Location. Två saker är värda att tänka på. För det första hämtar verktyget sidan från sin egen server, inte från din plats, så geografiskt eller IP-baserat villkorade omdirigeringar kan se annorlunda ut än de gör för dig. För det andra ger ett eget anrop med curl alltid den mest exakta bilden av vad just din uppkoppling får tillbaka. Använd onlineverktygen för en snabb överblick och bekräfta sedan med curl vid minsta tveksamhet.

Bekräfta att slutmålet svarar 200

Felsökningen är inte klar förrän du sett en sida svara 200 OK i slutet av kedjan. En omdirigering som pekar på en adress som i sin tur svarar 404 eller 500 är fortfarande trasig, även om det första hoppet ser perfekt ut. Kör därför alltid igenom hela kedjan och läs sista raden:

curl -sIL https://example.se/gammal-sida/ | grep -i "^HTTP"

En frisk omdirigering visar ett enda 3xx-svar följt av 200. Ser du flera 3xx-rader i följd har du en kedja att korta ner, ser du samma adresser återkomma har du en loop, och slutar listan på en 4xx eller 5xx pekar omdirigeringen på en sida som inte finns eller är trasig. Målet är alltid detsamma: ett hopp, sedan 200.

Sammanfattning

En omdirigering ska inte bedömas på hur den ser ut i webbläsaren utan på statuskoden den faktiskt skickar. Lär dig 3xx-tabellen, läs koden och Location-rubriken med curl -I och curl -sIL, och använd webbläsarens Network-flik när du vill se det visuellt. Leta särskilt efter den tysta 302:an där du ville ha en 301, och nöj dig aldrig förrän kedjan slutar på en sida som svarar 200. Recepten för att sätta upp rätt regler finns i guiden om redirect i htaccess, nginx och WordPress, och fler guider i guidsamlingen.