Een 301-redirect zegt dat een pagina definitief is verhuisd; een 302 zegt dat de verhuizing tijdelijk is en dat het oude adres terugkomt. Zoekmachines handelen naar dat verschil: na een 301 indexeren ze het nieuwe adres in plaats van het oude, na een 302 houden ze meestal het oude aan. Gebruik een 301 (of een 308) voor alles wat permanent is, zoals een hernoemde pagina, een nieuw domein of de overstap naar HTTPS, en een 302 (of een 307) alleen als het oorspronkelijke adres echt terugkomt. Houd elke redirect bij één stap en controleer hem met een tool die elke stap laat zien.
De statuscodes voor redirects
Een redirect is een antwoord in de 3xx-reeks met een Location-header die het nieuwe adres noemt. In de praktijk doen vijf codes ertoe:
CodeBetekenisBehoudt de methodeGebruik voor301 Moved PermanentlyDefinitief verhuisdNiet gegarandeerd: browsers maken van een POST een GETHernoemde pagina’s, nieuwe domeinen, HTTP naar HTTPS302 FoundTijdelijk ergens andersNiet gegarandeerd: browsers maken van een POST een GETKortstondige verhuizingen, bezoekers naar een inlogpagina sturen303 See OtherHaal het resultaat op bij een ander adresNee, altijd een GETNa het verzenden van een formulier, zodat herladen het niet nog eens verstuurt307 Temporary RedirectTijdelijk ergens andersJa, methode en bodyTijdelijke verhuizingen van API-endpoints en formulieren308 Permanent RedirectDefinitief verhuisdJa, methode en bodyPermanente verhuizingen van API-endpoints en formulieren
Voor gewone pagina’s, die browsers met GET ophalen, gedragen 301 en 308 zich hetzelfde, net als 302 en 307. Het verschil merk je pas als een client een POST stuurt: na een 301 of 302 herhalen de meeste clients die als GET zonder body, terwijl ze bij 307 en 308 precies hetzelfde verzoek opnieuw sturen. Daarom horen API’s die een endpoint verplaatsen 308 of 307 te gebruiken. De volledige lijst met codes vind je in het overzicht van HTTP-statuscodes.
Wat redirects doen met je SEO
De documentatie van Google over redirects behandelt 301 en 308 als permanent en 302, 303 en 307 als tijdelijk. Een permanente redirect is een sterk signaal dat het doel in de zoekresultaten moet verschijnen in plaats van het oude adres. Een tijdelijke redirect is een zwak signaal, dus het oude adres blijft meestal geïndexeerd.
Dat levert drie veelgemaakte fouten op:
Een 302 voor een permanente verhuizing. Veel frameworks en plug-ins sturen standaard door met een 302. Controleer na een sitemigratie of de redirects echt 301 of 308 antwoorden.
Alles doorsturen naar de homepage. Als een oude pagina geen tegenhanger heeft, kan Google een redirect naar de homepage zien als een soft 404. Stuur elke oude pagina naar de pagina die er het dichtst bij komt, of laat hem 404 of 410 antwoorden.
Oude links die naar redirects wijzen. Een redirect is een vangnet, geen bestemming. Werk interne links, canonical-tags en de sitemap bij naar het uiteindelijke adres, zodat bezoekers en crawlers niet voor die extra stap betalen.
Redirects aan de serverkant geven het duidelijkste signaal. Meta refresh-tags en JavaScript-redirects werken voor bezoekers, maar zoekmachines zien ze pas na het laden van de pagina, en andere clients zien ze misschien helemaal niet.
Welke gebruik je wanneer?
Een pagina is hernoemd of samengevoegd met een andere: 301.
De site is verhuisd naar een nieuw domein, naar HTTPS, of tussen www en het kale domein: 301 van elke oude variant rechtstreeks naar het uiteindelijke adres.
Een pagina staat tijdelijk ergens anders, voor een campagne of terwijl hij opnieuw wordt gebouwd: 302.
Een bezoeker moet eerst inloggen: 302 naar de inlogpagina, en daarna terug.
Er is een formulier verzonden: 303 naar de resultaatpagina.
Een API-endpoint is verplaatst: 308 als het definitief is, 307 als het tijdelijk is, zodat clients hun methode en body behouden.
De site is offline voor onderhoud: geen redirect. Antwoord met 503 Service Unavailable op het oorspronkelijke adres, zodat zoekmachines later terugkomen in plaats van een onderhoudspagina te indexeren.
Browsers onthouden permanente redirects
Browsers cachen 301- en 308-antwoorden, vaak voor lange tijd, en volgen ze zonder de server opnieuw te vragen. Een verkeerde permanente redirect blijft terugkerende bezoekers dus naar de verkeerde plek sturen, ook als je de server allang hebt gecorrigeerd. Test een nieuwe regel daarom eerst als 302 en zet hem pas om naar een 301 als hij klopt. Is er al een foute 301 de deur uit, dan helpt een Cache-Control: no-store-header op toekomstige redirects nieuwe bezoekers, maar de kopieën die browsers al hebben verlopen in hun eigen tempo.
Redirectketens en -loops
Een keten is een redirect naar een adres dat zelf weer doorstuurt: http://example.com naar https://example.com naar https://www.example.com naar https://www.example.com/en/. Elke stap is een extra round trip voordat de pagina begint te laden, en Google volgt maximaal 10 stappen. Ketens groeien in de loop van jaren van sitemigraties, waarbij elke migratie zijn regel boven op de vorige legt. Los ze op door elke oude variant in één stap rechtstreeks naar het uiteindelijke adres te sturen.
Een loop is een keten die nooit eindigt: twee regels sturen bezoekers heen en weer tot de browser het opgeeft met ‘too many redirects’. De gebruikelijke oorzaken:
HTTP en HTTPS. Een CDN praat via HTTP met je server, terwijl de server elk HTTP-verzoek doorstuurt naar HTTPS. Achter Cloudflare is dit de SSL-instelling Flexible; Full (strict) lost het op.
www en het kale domein. De webserver voegt www toe en de applicatie haalt het weer weg, of andersom. Controleer in WordPress of het WordPress-adres en het siteadres overeenkomen met de regel op de server.
Slashes aan het eind en taalregels. De ene regel voegt een slash of een taalprefix toe, een andere haalt hem weer weg.
Zo controleer je een redirect
In een terminal laat curl elke stap zien met de statuscode en de Location-header:
curl -sIL http://example.com/old-page | grep -iE “^(HTTP|location)”
HTTP/1.1 301 Moved Permanently
Location: https://example.com/old-page
HTTP/2 301
location: https://example.com/new-page
HTTP/2 200
Twee stappen: de tweede regel had de eerste moeten zijn. Open in een browser de ontwikkelaarstools, vink Preserve log aan op het tabblad Network en laad het oude adres; elke redirect krijgt een eigen rij. Houd er rekening mee dat de browser een 301 uit zijn cache kan beantwoorden, dus een privévenster geeft een zuiverder beeld.
Of gebruik onze gratis redirect checker: vul een URL in en je ziet elke stap met de statuscode, waar de keten eindigt en of hij in een loop raakt, te lang is of een tijdelijke redirect gebruikt waar je waarschijnlijk een permanente bedoelde. Hij volgt maximaal 5 stappen, live gecontroleerd vanuit Stockholm.
Een 301 instellen
De meeste hostingpartijen en CDN’s hebben een redirect-instelling in hun dashboard. In de serverconfiguratie:
# nginx: one page
location = /old-page { return 301 /new-page; }
# nginx: a whole domain, keeping the path
server {
server_name old-example.com www.old-example.com;
return 301 https://example.com$request_uri;
}
# Apache (.htaccess): one page
Redirect 301 /old-page /new-page
Controleer daarna het oude adres, de HTTP- en www-varianten ervan en een adres met een querystring, en zorg dat elk daarvan in één stap op de uiteindelijke pagina uitkomt.
Redirects monitoren met Uptimecheck
Een HTTP(S)-monitor in Uptimecheck uptime monitoring volgt standaard maximaal 10 redirects en beoordeelt de pagina aan het eind; die telt als up als hij antwoordt met een status van 200 tot en met 399. Een loop, of een keten die langer is, wordt als down gemeld met ‘Too many redirects’, en het incident vermeldt het wanneer de keten heen en weer springt tussen HTTP en HTTPS of tussen www en het kale domein. Checks draaien zo vaak als elke minuut vanuit Stockholm, Londen en New York, en een tweede check bevestigt een fout voordat je een alert krijgt.
Wil je de redirect zelf in de gaten houden, bijvoorbeeld na een domeinverhuizing? Zet Follow redirects uit zodat de monitor de statuscode van de redirect zelf beoordeelt, stel Expected status codes in op 301 en voeg een headercheck toe die controleert of Location gelijk is aan het nieuwe adres. Verandert iemand de redirect later in een 302 of laat hij hem ergens anders heen wijzen, dan hoor je het. Lees hoe je je eerste monitor toevoegt en de gids over HTTP-statuscodes in monitoring.
Weet het meteen als een verhuizing misgaat. Probeer Uptimecheck 14 dagen gratis, geen creditcard nodig.