Je winkelwagen is leeg
Producten die je toevoegt, verschijnen hier.
Leer HTTP redirects instellen: 301, 302, 307, 303 en 308. Complete gids met .htaccess, PHP en WordPress voorbeelden. Behoud SEO waarde bij URL wijzigingen.
Samenvatting: HTTP
KeurigOnline zegtHTTPHTTP is het protocol waarmee webclients en -servers gestructureerd data uitwisselen via requests en responses. Redirects
Een HTTP redirect
KeurigOnline zegtRedirectEen redirect stuurt bezoekers automatisch door naar een andere webpagina. stuurt bezoekers automatisch van een oude URL naar een nieuwe URL. Gebruik een 301 redirect voor permanente verhuizingen (SEO waarde 90-99% overgedragen), een 302 redirect voor tijdelijke situaties en 307/308 redirects wanneer HTTP method preservation kritiek is. Implementeer via .htaccess
KeurigOnline zegthtaccessEen .htaccess-bestand gebruik je voor geavanceerde serverinstellingen zoals redirects en beveiliging., PHP
KeurigOnline zegtPHPPHP is een programmeertaal waarmee dynamische websites en webapplicaties gebouwd worden., Nginx
KeurigOnline zegtNginxNginx is een snelle, lichtgewicht webserver die ook als reverse proxy en load balancer functioneert. of WordPress
KeurigOnline zegtWordPressWordPress is een veelgebruikt CMS om eenvoudig websites en blogs mee te maken en beheren. plugins en test altijd met browser DevTools of cURL.
Stel je voor dat je een oude pagina van je website verwijdert waarna bezoekers op een link vanuit Google of een backlink klikken en een 404 foutmelding krijgen. Dit zorgt voor frustratie, verloren traffic en dalende SEO rankings waarbij dit scenario zich duizenden keren per dag afspeelt op websites wereldwijd.
De oplossing is een HTTP redirect oftewel de digitale verhuiskaart van het internet. Net zoals je een verhuiskaart stuurt wanneer je van huis verhuist, vertelt een redirect bezoekers en zoekmachines dat deze pagina is verhuisd naar een nieuwe locatie.
Maar redirect instellen is complexer dan het lijkt want er zijn vijf verschillende redirect types (301, 302, 307, 303, 308), meerdere implementatie methodes (.htaccess, PHP, Nginx, WordPress, Next.js) en kritieke SEO en security overwegingen.
In deze complete gids behandelen we alles wat je moet weten over HTTP redirects waarbij je leert wanneer je welk redirect type moet gebruiken, hoe je ze correct implementeert op verschillende platforms, hoe je SEO waarde behoudt en hoe je security problemen vermijdt. Of je nu developer bent, site owner of SEO professional, na het lezen van deze gids kun je redirects professioneel configureren.

Definitie: Een HTTP redirect is een server response (3xx status code) die browsers automatisch doorstuurt naar een andere URL via de Location header. De server vertelt de browser: "Deze pagina is verplaatst, ga naar deze nieuwe locatie."
Een HTTP redirect is een server response die je browser automatisch naar een andere URL stuurt. Wanneer je een URL bezoekt, stuurt de server een 3xx status code terug met een Location header die de nieuwe URL bevat waarna je browser deze redirect automatisch volgt.
Hoe werkt een HTTP redirect in 4 stappen
https://example.com/oude-paginaHTTP redirects zijn essentieel in verschillende scenario's:
/product-123 naar /categorie/product-123http:// naar https://www.site.nl en site.nlNiet elke situatie vereist een redirect. Hier is een decision tree:
Een redirect vervangt de oude URL door de nieuwe terwijl een canonical tag consolideert PageRank waarbij beide URLs bereikbaar blijven. Een noindex tag verbergt de pagina voor zoekmachines maar blijft toegankelijk voor gebruikers.

Er bestaan vijf belangrijke server-side redirect types elk met specifieke use cases. De meeste websites gebruiken alleen 301 en 302 maar 307, 303 en 308 zijn essentieel voor specifieke scenarios.
| Code | Type | Method | SEO | Gebruik |
|---|---|---|---|---|
| 301 | Permanent | Kan wijzigen | ✅ Equity over | URL/domein migratie |
| 302 | Tijdelijk | Kan wijzigen | ⚠️ Blijft op oud | Promoties, A/B tests |
| 307 | Tijdelijk | Behouden | ⚠️ Blijft op oud | POST forms tijdelijk |
| 308 | Permanent | Behouden | ✅ Equity over | API |
Een 301 redirect vertelt browsers en zoekmachines dat deze pagina permanent is verhuisd waarbij de oude URL niet meer bestaat en alle bezoekers voortaan de nieuwe URL moeten gebruiken (bron: MDN Web Docs).
SEO impact: Volgens Google wordt 90-99% van link equity overgedragen bij een 301 redirect (bron: Google Search Central) waarbij de historische 15% dampingsfactor myth in 2016 officieel werd ontkracht door Gary Illyes van Google.
HTTP method behavior: Een 301 redirect kan de HTTP method wijzigen waarbij een POST request door sommige browsers kan worden omgezet naar een GET request op de nieuwe URL. Voor de meeste websites is dit geen probleem maar bij API endpoints kan dit ongewenst zijn.
Caching: Browsers cache
KeurigOnline zegtCacheCache slaat tijdelijk gegevens op, waardoor je website sneller laadt.n 301 redirects aggressief wat snellere navigatie betekent voor terugkerende bezoekers maar ook dat een verkeerd geconfigureerde 301 moeilijk terug te draaien is zonder cache clearing.
Use cases:
oud-domein.nl → nieuw-domein.nl/oude-lange-url-naam → /korte-urlhttp://site.nl → https://site.nlEen 302 redirect is tijdelijk waarbij de oude URL blijft bestaan en later terugkomt. Zoekmachines houden SEO waarde bij de oude URL en dragen deze niet over naar de tijdelijke bestemming (bron: MDN Web Docs).
SEO impact: Link equity blijft op de oude URL wat gewenst is voor tijdelijke situaties maar verkeerd gebruik van 302 in plaats van 301 kan SEO schade veroorzaken.
Caching: Browsers cachen 302 redirects minimaal zodat wanneer de redirect wordt verwijderd gebruikers automatisch de originele URL weer zien.
Use cases:
/product → /black-friday-deal/page → /onderhoud-paginaLet op: 302 redirect duur
Als je een 302 redirect te lang laat staan (maanden) kan Google deze behandelen als permanent en alsnog naar 301 behavior overschakelen. Evalueer tijdelijke redirects regelmatig.
Een 307 redirect is de moderne versie van 302 met één cruciaal verschil waarbij HTTP method preservation is gegarandeerd. Een POST request blijft POST en een GET blijft GET (bron: MDN Web Docs).
Verschil met 302: Bij een 302 redirect kunnen browsers POST requests omzetten naar GET terwijl bij 307 dit expliciet verboden is want de browser MOET de originele method behouden.
SEO impact: Link equity blijft op de oude URL, net als bij 302.
Use cases:
De meeste websites hebben 307 niet nodig maar voor moderne web applications en APIs is het essentieel wanneer HTTP method preservation kritiek is.
Een 303 redirect forceert een wijziging van POST naar GET waarbij dit het enige redirect type is dat altijd de HTTP method wijzigt ongeacht browser (bron: MDN Web Docs).
Primary use case: Post-Redirect-Get pattern wat een web development best practice is om dubbele form submissions te voorkomen.
SEO impact: Niet relevant - 303 wordt gebruikt voor forms en applicatie logic, niet voor SEO pages.
Code voorbeeld (PHP):
<?php
// Na form processing
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process form data
$result = processFormData($_POST);
// 303 redirect naar bedankt pagina
header("HTTP/1.1 303 See Other");
header("Location: https://www.jouwsite.nl/bedankt");
exit();
}
?>Een 308 redirect is de moderne versie van 301 met gegarandeerde method preservation waarbij het het permanente karakter van 301 combineert met de method garantie van 307 (bron: MDN Web Docs).
Verschil met 301: Bij 301 kan POST worden GET terwijl bij 308 POST altijd POST blijft, PUT blijft PUT en DELETE blijft DELETE.
SEO impact: Link equity wordt overgedragen, net als bij 301 (90-99%).
Use cases:
Let op: Browser support voor 308
308 is relatief nieuw (sinds 2015) waardoor oudere browsers 308 mogelijk niet herkennen. Check je browser support requirements voordat je 308 gebruikt in plaats van 301.
Naast server-side redirects bestaan er client-side redirects via HTML
KeurigOnline zegtHTMLHTML is de programmeertaal voor het maken van webpagina’s. en JavaScript
KeurigOnline zegtJavaScriptJavaScript is de browser- en server-scriptingtaal voor interactieve, asynchrone webapplicaties. die minder preferred zijn vanuit SEO perspectief.
Meta refresh tag:
<!-- 0 seconds = immediate -->
<meta http-equiv="refresh" content="0;url=https://www.jouwsite.nl/nieuwe-pagina">
<!-- 5 seconds delay met melding -->
<meta http-equiv="refresh" content="5;url=https://www.jouwsite.nl/nieuwe-pagina">
<p>Als u niet wordt doorverwezen, <a href="https://www.jouwsite.nl/nieuwe-pagina">klik hier</a>.</p>JavaScript redirect:
// Immediate redirect
window.location.href = 'https://www.jouwsite.nl/nieuwe-pagina';
// Of met replace (geen history entry)
window.location.replace('https://www.jouwsite.nl/nieuwe-pagina');Let op: SEO risico's bij client-side redirects
Wanneer acceptabel: Alleen als je geen server toegang hebt zoals bij statische hosting, legacy systemen of voor niet-SEO critical pages zoals applicatie redirects binnen authenticated areas.
Er zijn 7+ manieren om redirects te implementeren waarbij de juiste keuze afhangt van je server (Apache
KeurigOnline zegtApacheApache is software die webpagina’s aan bezoekers toont. vs Nginx), tech stack (WordPress, Next.js, PHP) en technische kennis.
Het .htaccess bestand is de meest gebruikte methode voor Apache servers waarbij het een configuratie bestand is dat in de root directory van je website staat (bron: Apache mod_rewrite documentation). Zie ook onze complete .htaccess gids met 20+ code snippets voor meer configuratie opties.
# Single page redirect
Redirect 301 /oude-pagina https://www.jouwsite.nl/nieuwe-pagina
# Multiple redirects
Redirect 301 /product-a https://www.jouwsite.nl/products/product-a
Redirect 301 /product-b https://www.jouwsite.nl/products/product-b<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^oud-domein\.nl$ [OR]
RewriteCond %{HTTP_HOST} ^www\.oud-domein\.nl$
RewriteRule ^(.*)$ https://www.nieuw-domein.nl/$1 [R=301,L]
</IfModule>Uitleg. RewriteCond controleert of het gevraagde domein. oud-domein.nl of www.oud-domein.nl is. RewriteRule redirect alles naar het nieuwe domein. Waarbij $1 de oorspronkelijke path behoudt.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule><IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</IfModule>%1 bevat de captured group uit de RewriteCond (het domein zonder www).
# Redirect alle /blog/YYYY/MM/DD/post naar /blog/post
RewriteRule ^blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.+)$ /blog/$1 [R=301,L]
# Redirect met query string preservation
RewriteRule ^oude-categorie/(.*)$ /nieuwe-categorie/$1 [R=301,QSA,L][0-9]{4} matched exact 4 cijfers terwijl QSA (Query String Append) URL parameters behoudt zoals ?id=123.
# Redirect alleen voor specifieke IP
RewriteCond %{REMOTE_ADDR} ^123\.456\.789\.
RewriteRule ^(.*)$ https://special-site.nl/$1 [R=302,L]
# Redirect gebaseerd op user agent
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^mobile/(.*)$ /desktop/$1 [R=301,L]public_html
KeurigOnline zegtpublic_htmlpublic_html is de hoofdmap waar je websitebestanden geplaatst moeten worden./ of www/)/var/log/apache2/error.log) bij problemenRewriteRule flags uitgelegd:
R=301 = 301 redirect (gebruik R=302 voor tijdelijk)L = Last (stop met verdere regel processing)QSA = Query String Append (behoud URL parameters)NC = No Case (case-insensitive matching)Nginx is een moderne high-performance webserver waarbij redirect configuratie gebeurt in server blocks meestal in /etc/nginx/sites-available/ (bron: Nginx rewrite module documentation).
server {
listen 80;
server_name example.com;
# 301 redirect single page
location /oude-pagina {
return 301 https://example.com/nieuwe-pagina;
}
# 302 redirect
location /tijdelijk {
return 302 https://example.com/nieuwe-locatie;
}
}server {
listen 80;
server_name oud-domein.nl www.oud-domein.nl;
return 301 https://nieuw-domein.nl$request_uri;
}$request_uri behoudt de volledige path en query string.
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}# Redirect met regex pattern
location ~ ^/blog/([0-9]{4})/([0-9]{2})/(.+)$ {
return 301 /blog/$3;
}
# Conditional redirect
if ($host ~* ^www\.(.+)$) {
return 301 https://$1$request_uri;
}Tips voor Nginx:
return 301 is sneller dan rewrite directive$request_uri behoudt automatisch query string + pathsudo nginx
KeurigOnline zegtNginxNginx is een snelle, lichtgewicht webserver die ook als reverse proxy en load balancer functioneert. -tsudo systemctl reload nginxPHP
KeurigOnline zegtPHPPHP is een programmeertaal waarmee dynamische websites en webapplicaties gebouwd worden. redirects zijn flexibel en werken op elke PHP-hosting waarbij ze ideaal zijn voor dynamische redirects en conditional redirects. PHP gebruikt de header() functie om HTTP headers te sturen.
<?php
// 301 redirect
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.jouwsite.nl/nieuwe-pagina");
exit();
?><?php
header("HTTP/1.1 302 Found");
header("Location: https://www.jouwsite.nl/tijdelijke-pagina");
exit();
?><?php
header("HTTP/1.1 307 Temporary Redirect");
header("Location: https://www.jouwsite.nl/nieuwe-endpoint");
exit();
?><?php
// Na form processing
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process form data
$result = processFormData($_POST);
// 303 redirect naar confirmation page
header("HTTP/1.1 303 See Other");
header("Location: https://www.jouwsite.nl/bedankt");
exit();
}
?><?php
// Redirect gebaseerd op domein
if ($_SERVER['HTTP_HOST'] === 'oud-domein.nl') {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://nieuw-domein.nl" . $_SERVER['REQUEST_URI']);
exit();
}
// Redirect gebaseerd op HTTPS
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit();
}
?>Tips & warnings voor PHP redirects:
exit() na header() aanroepen, anders wordt code verder uitgevoerdheader() callsWordPress heeft meerdere opties voor redirect instellen wordpress van beginner-vriendelijke plugins tot custom PHP code.
De Redirection plugin is de meest populaire WordPress redirect plugin met 2+ miljoen actieve installaties. Lees ook onze specifieke gids over 301 redirects voor verwijderde WordPress pagina's.
/oude-paginahttps://www.jouwsite.nl/nieuwe-paginaVoordelen Redirection plugin: Ingebouwde logging, overzicht van alle redirects, regex support, conditional logic en 404 error monitoring.
Als je Yoast SEO Premium hebt, zijn redirects ingebouwd:
// In functions.php van je theme
add_action('template_redirect', 'custom_redirects');
function custom_redirects() {
if (is_page('oude-pagina-slug')) {
wp_redirect('https://www.jouwsite.nl/nieuwe-pagina', 301);
exit();
}
// Multiple redirects
$redirects = array(
'oude-slug-1' => '/nieuwe-pagina-1',
'oude-slug-2' => '/nieuwe-pagina-2',
);
foreach ($redirects as $old => $new) {
if (is_page($old)) {
wp_redirect($new, 301);
exit();
}
}
}Tips voor WordPress redirects:
Next.js heeft drie methodes voor redirects elk voor verschillende scenarios (bron: Next.js Redirects documentation).
// next.config.js
module.exports = {
async redirects() {
return [
{
source: '/oude-pagina',
destination: '/nieuwe-pagina',
permanent: true, // 301 redirect
},
{
source: '/tijdelijk',
destination: '/nieuwe-locatie',
permanent: false, // 302 redirect
},
// Regex pattern
{
source: '/blog/:year/:month/:day/:slug',
destination: '/blog/:slug',
permanent: true,
},
// Wildcard
{
source: '/oude-categorie/:path*',
destination: '/nieuwe-categorie/:path*',
permanent: true,
},
];
},
};Voordelen: Geëvalueerd tijdens build time, zeer performant, declarative syntax.
// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
if (request.nextUrl.pathname === '/oude-pagina') {
return NextResponse.redirect(
new URL('/nieuwe-pagina', request.url),
{ status: 301 }
);
}
// Conditional redirect (bijv. auth check)
const isAuthenticated = request.cookies.get('auth');
if (!isAuthenticated && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url));
}
}Voordelen: Runs on edge globally wat perfect is voor conditional/dynamic redirects.
// pages/oude-pagina.tsx
export async function getServerSideProps() {
return {
redirect: {
destination: '/nieuwe-pagina',
permanent: true, // 301
},
};
}Voordelen: Page-specific logic met toegang tot props/data voor conditional redirects.
Next.js redirect strategie:
next.config.js (fastest)getServerSidePropsClient-side redirects zijn minder preferred, maar soms noodzakelijk.
// Immediate redirect
window.location.href = 'https://www.jouwsite.nl/nieuwe-pagina';
// Met replace (geen history entry)
window.location.replace('https://www.jouwsite.nl/nieuwe-pagina');replace() voorkomt dat gebruikers met de back button terugkeren naar de oude pagina.
<!-- 0 seconds = immediate -->
<meta http-equiv="refresh" content="0;url=https://www.jouwsite.nl/nieuwe-pagina">
<!-- 5 seconds delay met bericht -->
<meta http-equiv="refresh" content="5;url=https://www.jouwsite.nl/nieuwe-pagina">
<p>Als u niet automatisch wordt doorverwezen, <a href="https://www.jouwsite.nl/nieuwe-pagina">klik hier</a>.</p>Let op: JavaScript redirect SEO risico's
Alleen gebruiken als: Geen server toegang, legacy systemen, niet-SEO pages.
Veel hosting providers bieden GUI interfaces voor redirects wat ideaal is voor niet-technische gebruikers.
/oude-paginahttps://www.jouwsite.nl/nieuwe-paginaVoordelen cPanel:
Let op: cPanel conflict
cPanel genereert .htaccess
KeurigOnline zegthtaccessEen .htaccess-bestand gebruik je voor geavanceerde serverinstellingen zoals redirects en beveiliging. regels automatisch. Als je later .htaccess handmatig bewerkt kunnen cPanel redirects conflicteren met je handmatige regels.
Redirects hebben significante impact op je SEO waarbij je correct geïmplementeerd je rankings behoudt maar verkeerd gedaan je traffic verliest.
Historische context: In 2000 publiceerde Google een patent met een dampingsfactor van 0.85 wat werd geïnterpreteerd als 15% PageRank verlies per redirect waarbij deze myth persisteerde tot 2016.
2016 clarification: Gary Illyes van Google bevestigde op Twitter dat 301 redirects geen PageRank verliezen omdat de dampingsfactor geldt voor alle links en niet specifiek voor redirects.
Modern understanding: 90-99% van link equity wordt overgedragen bij 301 en 308 redirects (bron: Moz SEO Guide) waarbij het kleine verlies van 1-10% inherent is aan alle links en niet specifiek aan redirects.
Redirect type comparison:
Redirect chains verspillen crawl budget oftewel het aantal pagina's dat Google crawlt per dag.
Impact van redirect chains:
Tip: Maak altijd directe redirects. Als je A→B had en B→C toevoegt, update A→C direct om redirect chains te voorkomen.
Google behandelt irrelevante redirects als soft 404 errors. Link equity gaat verloren.
Voorbeeld van verkeerde redirect:
Google's rationale: Als de redirect niet relevant is voor de gebruiker, wordt het behandeld alsof de pagina niet bestaat waarbij de oude pagina link equity verliest.
Tip: Voorkom soft 404s
410 Gone voor permanent verwijderde content (explicieter dan 404)Wanneer gebruik je een redirect vs canonical tag?
Decision tree:
Moet de oude pagina verdwijnen?
├─ Ja → Use REDIRECT (301)
└─ Nee (beide pagina's blijven online)
├─ Duplicate content probleem?
│ ├─ Ja → Use CANONICAL TAG
│ └─ Nee → Geen actie nodig
└─ Pagina uit Google index maar online blijven?
└─ Use ROBOTS META TAG (noindex)Canonical vs Redirect vergelijking:
| Aspect | Canonical Tag | Redirect |
|---|---|---|
| URL bereikbaar? | ✅ Beide URLs bereikbaar | ❌ Oude URL niet meer bereikbaar |
| PageRank consolidatie | ✅ Consolidatie naar canonical | ✅ Transfer naar nieuwe URL |
| User experience | Blijft op originele URL | Navigeert naar nieuwe URL |
| Use case | Filters, sorting, pagination | URL wijziging, domain migratie |
Monitor je redirects via Google Search Console:
Setup na redirects:
Tip: Google Search Console monitoring
Google's guidance: In 2021 zei John Mueller in de Ask Googlebot video dat 1 jaar voldoende is voor 301 redirects.
Real-world advice:
Exception: Bij domain migratie waar het oude domein expires, kunnen redirects na 2-3 jaar verwijderd worden als het oude domein offline gaat.
Redirects kunnen security risico's vormen als ze niet correct geïmplementeerd zijn waarbij open redirect vulnerabilities vaak misbruikt worden voor phishing
KeurigOnline zegtPhishingPhishing is een vorm van online oplichting waarbij slachtoffers worden misleid om gevoelige informatie prijs te geven.. Dit is onderdeel van een bredere website beveiligingsstrategie.
Een open redirect treedt op. Wanneer een attacker de redirect destination kan manipuleren.
Vulnerable code voorbeeld (PHP):
<?php
// ❌ VULNERABLE - accepteert elke URL
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);
exit();
?>Attack scenario:
https://jouw-trusted-site.nl/redirect.php?url=https://malicious-phishing-site.com
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Attacker controlled!Gebruikers zien de trusted domain in de URL, klikken erop en worden doorverwezen naar een phishing
KeurigOnline zegtPhishingPhishing is een vorm van online oplichting waarbij slachtoffers worden misleid om gevoelige informatie prijs te geven. site.
Secure code voorbeeld (whitelist approach):
<?php
// ✅ SECURE - whitelist van toegestane domains
$allowed_domains = ['jouwsite.nl', 'partner-site.nl', 'trusted-partner.com'];
$redirect_url = $_GET['url'];
// Parse URL en check domain
$parsed = parse_url($redirect_url);
if (!isset($parsed['host']) || !in_array($parsed['host'], $allowed_domains)) {
// Invalid redirect, ga naar homepage
header("Location: https://jouwsite.nl/");
} else {
// Valid domain, allow redirect
header("Location: " . $redirect_url);
}
exit();
?>Attackers kunnen de HTTP_HOST header manipuleren. Om redirects naar hun domain te forceren.
Vulnerable code:
<?php
// ❌ VULNERABLE - vertrouwt HTTP_HOST
header("Location: https://" . $_SERVER['HTTP_HOST'] . "/success");
?>Secure code:
<?php
// ✅ SECURE - hardcoded trusted domain
$trusted_domain = 'jouwsite.nl';
header("Location: https://" . $trusted_domain . "/success");
?>Validation:
parse_url()Relative URLs preferred:
/nieuwe-pagina instead of https://site.nl/nieuwe-paginaFramework built-ins:
redirect()->route('name') (veilig)wp_redirect() met wp_validate_redirect()next.config.js (geen user input)Logging & monitoring:
OWASP (Open Web Application Security Project) heeft officiële guidance voor redirect security inclusief CWE-601 (URL Redirection to Untrusted Site).
Key recommendations:
Alternative approach: Parameter mapping:
<?php
// In plaats van URL in parameter, gebruik ID
$redirect_map = [
1 => '/page-one',
2 => '/page-two',
3 => '/partner-site'
];
$redirect_id = (int)$_GET['id'];
if (isset($redirect_map[$redirect_id])) {
header("Location: " . $redirect_map[$redirect_id]);
} else {
header("Location: /");
}
?>Redirects moeten grondig getest worden voordat ze live gaan en continu gemonitord na implementatie.
Redirect testen met DevTools in 5 stappen
Wat te checken:
cURL is een command-line tool. Perfect voor redirect testing.
Basic redirect check:
# Show volledige redirect chain met headers
curl -L -v https://oude-url.nl
# Only show headers (follow redirects)
curl -I -L https://oude-url.nl
# Don't follow redirects (show eerste response only)
curl -I https://oude-url.nlOutput interpreteren:
< HTTP/1.1 301 Moved Permanently
< Location: https://nieuwe-url.nl
^^^^^^^^^^^^^^^^^
Redirect destination
< HTTP/1.1 200 OK
^^^^^^^^^
Final response (na redirect)Check redirect timing:
curl -w "Time: %{time_total}s\n" -o /dev/null -s https://oude-url.nlVerschillende online tools bieden visuele redirect chain checking. Met handige features.
HTTPStatus.io is een gratis online tool. Voor redirect chain visualization.
Redirect-checker.org biedt een simple interface. Voor redirect testing.
Screaming Frog SEO Spider is een desktop crawler tool. Perfect voor large-scale redirect audits.
Screaming Frog configuration:
Key reports voor redirect monitoring:
Coverage rapport:
URL Inspection tool:
Performance rapport:
Voor large-scale migraties. Zijn automated tests essentieel.
Bash script voorbeeld:
#!/bin/bash
# test-redirects.sh
URLS_FILE="redirects.txt" # Format: old-url new-url
while IFS= read -r line; do
OLD_URL=$(echo $line | awk '{print $1}')
EXPECTED_URL=$(echo $line | awk '{print $2}')
# Follow redirects en get final URL
ACTUAL_URL=$(curl -Ls -o /dev/null -w %{url_effective} "$OLD_URL")
if [ "$ACTUAL_URL" = "$EXPECTED_URL" ]; then
echo "✅ PASS: $OLD_URL → $ACTUAL_URL"
else
echo "❌ FAIL: $OLD_URL expected $EXPECTED_URL but got $ACTUAL_URL"
fi
done < "$URLS_FILE"Usage:
# Maak redirects.txt met format:
# https://old-site.com/page1 https://new-site.com/page1
# https://old-site.com/page2 https://new-site.com/page2
chmod +x test-redirects.sh
./test-redirects.shTTFB (Time To First Byte) impact:
Monitoring tools:
Het web is geëvolueerd met HTTP
KeurigOnline zegtHTTPHTTP is het protocol waarmee webclients en -servers gestructureerd data uitwisselen via requests en responses./2, SPAs en Serverless waarbij deze technologieën veranderen hoe we over redirects denken.
Verschillen met HTTP/1.1:
Key insight: Ook met HTTP/2 en HTTP/3 blijven redirect chains slecht voor performance waarbij connection reuse de redirect roundtrip niet elimineert (bron: web.dev performance best practices).
Best practice: Minimaliseer redirects ongeacht HTTP protocol versie.
SPAs zoals React, Vue en Angular gebruiken client-side routing waarbij je dan nog server-side redirects nodig hebt.
| Scenario | Solution |
|---|---|
| Navigatie tussen pages binnen app | ❌ GEEN redirect - use React Router / Vue Router |
| Externe URLs | ✅ Server-side redirect of window.location |
| Oude domain → nieuwe domain | ✅ Server-side redirect (.htaccess, Nginx) |
| Marketing campaign URLs | ✅ Server-side redirect (voor tracking) |
| Oude pre-SPA URLs | ✅ Server-side redirect naar SPA route |
React Router voorbeeld (client-side navigation):
import { Navigate } from 'react-router-dom';
// ❌ FOUT - server-side redirect niet nodig binnen SPA
// ✅ CORRECT - client-side navigation
function OldPage() {
return <Navigate to="/nieuwe-pagina" replace />;
}Wanneer server-side redirects WEL nodig in SPAs:
Moderne hosting platforms bieden edge redirects. Uitgevoerd op CDN nodes wereldwijd.
Vercel Edge Middleware draait op het Vercel edge network. Wereldwijd.
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
// Edge redirect - runs globally on Vercel edge network
const url = request.nextUrl.clone();
if (url.pathname === '/oude-pagina') {
url.pathname = '/nieuwe-pagina';
return NextResponse.redirect(url, 301);
}
}Netlify redirects worden geconfigureerd. Via een simpel text bestand.
# netlify/_redirects
/oude-pagina /nieuwe-pagina 301
/oude/* /nieuwe/:splat 301
# Domain redirect
https://oud-domein.nl/* https://nieuw-domein.nl/:splat 301!Cloudflare Workers laten toe om redirects te implementeren. Op het Cloudflare edge network.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// Redirect logic
if (url.pathname === '/oude-pagina') {
return Response.redirect('https://site.nl/nieuwe-pagina', 301);
}
// Pass through
return fetch(request);
}Voordelen van edge redirects:
Service Workers kunnen redirects afhandelen. Maar met caveats.
Service Worker redirect voorbeeld:
// service-worker.js
self.addEventListener('fetch', event => {
const url = new URL(event.request.url);
if (url.pathname === '/oude-pagina') {
event.respondWith(
Response.redirect('/nieuwe-pagina', 301)
);
}
});⚠️ Caveat: Service Workers zijn client-side dus SEO impact is zoals JavaScript redirects waarbij je ze alleen voor applicatie logic gebruikt en niet voor SEO pages.
Zelfs ervaren developers maken deze redirect mistakes waarbij hier staat hoe je ze herkent en oplost.
Het probleem:
Bezoeker request: example.com/oude-pagina
→ 301 redirect naar /tussenliggende-pagina
→ 301 redirect naar /nog-een-stap
→ 301 redirect naar /finale-paginaImpact:
Detectie:
curl -L -v URL toont alle hopsOplossing:
# ❌ FOUT - chain
Redirect 301 /a /b
Redirect 301 /b /c
Redirect 301 /c /d
# ✅ CORRECT - directe redirects
Redirect 301 /a /d
Redirect 301 /b /d
Redirect 301 /c /dHet probleem:
/pagina-a → redirects to /pagina-b
/pagina-b → redirects to /pagina-a
(infinite loop!)Browser error. "Too many redirects". Of ERR_TOO_MANY_REDIRECTS.
Common cause: conflicting .htaccess rules:
# ❌ FOUT - creates loop
# Rule 1: www toevoegen
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# Rule 2: www verwijderen (CONFLICT!)
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]Oplossing - combine conditions:
# ✅ CORRECT - kies één richting
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]Detectie:
Het probleem. Redirect wijst naar page die niet meer bestaat.
Impact:
Detectie met Screaming Frog:
Detectie met bash script:
#!/bin/bash
while read url; do
STATUS=$(curl -L -o /dev/null -w '%{http_code}' "$url")
if [ "$STATUS" = "404" ]; then
echo "❌ $url ends in 404"
fi
done < urls.txtOplossing:
Het probleem: Browser cached oude 301 redirect waardoor nieuwe redirect niet wordt gezien.
Symptomen:
Oplossing voor gebruikers:
1. Clear browser cache:
2. Test in Incognito/Private mode (geen cache):
3. Flush DNS
KeurigOnline zegtDNSHet Domain Name System (DNS) vertaalt domeinnamen naar IP-adressen, zodat websites makkelijk bereikbaar zijn. cache:
# Windows
ipconfig /flushdns
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Linux
sudo systemd-resolve --flush-cachesPreventie voor developers:
Het probleem: Internationale sites redirecten bezoekers naar country-specific versies waarbij Google crawlt vanuit VS, wordt ge-redirect en de verkeerde versie indexeert.
Symptomen:
Oplossing:
hreflang tags instead of GEO redirects (preferred)Hreflang implementation (preferred):
<link rel="alternate" hreflang="nl" href="https://site.nl/pagina" />
<link rel="alternate" hreflang="en" href="https://site.com/page" />
<link rel="alternate" hreflang="de" href="https://site.de/seite" />Concrete scenarios. Met complete implementaties.
Complete workflow voor domain migratie:
Stap 1: Redirect setup (.htaccess op oud domein):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^oud-domein\.nl$ [OR]
RewriteCond %{HTTP_HOST} ^www\.oud-domein\.nl$
RewriteRule ^(.*)$ https://nieuw-domein.nl/$1 [R=301,L]
</IfModule>:
Google Search Console setup na domain migratie
Stap 4: Update backlinks (optioneel maar aanbevolen):
Timeline verwachting:
.htaccess redirect:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>Complete HTTPS migration checklist:
Scenario. Van /product-name naar /category/subcategory/product-name.
Approach 1: Individual redirects (small sites):
Redirect 301 /product-a /electronics/phones/product-a
Redirect 301 /product-b /electronics/laptops/product-b
Redirect 301 /product-c /clothing/shirts/product-cApproach 2: Database
KeurigOnline zegtDatabaseEen database is een georganiseerde verzameling gegevens waar websites informatie opslaan en ophalen.-driven (large sites):
<?php
// redirect-mapper.php
$Db = App::get('Db');
// Query redirect mapping from database
$redirects = $Db->query("SELECT old_url, new_url FROM redirects WHERE active = 1");
$current_url = $_SERVER['REQUEST_URI'];
foreach ($redirects as $redirect) {
if ($redirect['old_url'] === $current_url) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $redirect['new_url']);
exit();
}
}
?>Scenario. 3 oude product reviews samenvoegen. Naar 1 comprehensive guide.
Setup:
# Alle oude reviews → nieuwe comprehensive guide
Redirect 301 /review-product-a /complete-product-guide
Redirect 301 /review-product-b /complete-product-guide
Redirect 301 /comparison-a-vs-b /complete-product-guideSEO considerations:
Scenario: Black Friday promo page met tijdelijk redirect.
Setup (302 temporary):
# Tijdens Black Friday (november)
Redirect 302 /bestsellers /black-friday-deals
# Na Black Friday: Verwijder redirect
# /bestsellers works normally againAlternative: Date-based PHP redirect:
<?php
// Tijdelijke redirect gebaseerd op datum
$start_date = strtotime('2024-11-25');
$end_date = strtotime('2024-12-01');
$now = time();
if ($now >= $start_date && $now <= $end_date) {
header("HTTP/1.1 302 Found");
header("Location: /black-friday-deals");
exit();
}
// Normale pagina laadt na campaign
?>301 redirect (permanent): De oude URL bestaat niet meer. SEO waarde (90-99% link equity) wordt overgedragen naar de nieuwe URL.
302 redirect (tijdelijk): De oude URL komt terug. SEO waarde blijft op de oude URL.
Nee, niet meer sinds 2016. De "15% dampingsfactor" myth werd ontkracht door Gary Illyes van Google.
Bij 301/308 redirects wordt 90-99% link equity overgedragen. Het kleine verlies (1-10%) is inherent aan alle links, niet specifiek aan redirects.
Uitzondering: Irrelevante redirects (alle oude producten → homepage) worden als "soft 404" behandeld en verliezen wél link equity.
Permanent laten staan is het veiligst.
Hoewel Google zegt dat 1 jaar voldoende is: oude backlinks blijven jaren bestaan, redirects hebben minimale performance impact en voorkomen broken links.
Uitzondering: Bij domain migratie waar het oude domein expires kunnen redirects na 2-3 jaar verwijderd worden.
Ja! Beide methodes zijn binnen 5 minuten opgezet zonder code-kennis:
Test altijd in incognito mode om browser cache
KeurigOnline zegtCacheCache slaat tijdelijk gegevens op, waardoor je website sneller laadt. te vermijden:
Een redirect chain is meerdere redirects achter elkaar (A → B → C → D).
Problemen:
Oplossing: Maak directe redirects (A→C in plaats van A→B→C). Detecteer met Screaming Frog, HTTPStatus.io of curl -L -v URL.
Niet preferred maar mogelijk.
Server-side redirects (.htaccess, PHP, Nginx) zijn altijd beter: gegarandeerd door Google gezien, sneller, werken zonder JavaScript, 100% link equity overdracht.
JavaScript
KeurigOnline zegtJavaScriptJavaScript is de browser- en server-scriptingtaal voor interactieve, asynchrone webapplicaties. alleen acceptabel bij: static hosting zonder server toegang, legacy systemen, niet-SEO critical pages. Let op: Google kan JS redirects missen bij slow connections.
Beide zijn tijdelijk maar verschillen in HTTP method handling:
Gebruik 307 voor form submissions, API
KeurigOnline zegtAPIKoppeling tussen verschillende systemen of software. endpoints, REST APIs. Gebruik 302 voor simpele tijdelijke redirects, promoties, A/B testing.
Preventie:
curl -L -v URLLoop oplossen: Check .htaccess voor conflicting RewriteRules, gebruik verbose cURL om chain te zien, verwijder conflicterende regel.
HTTP redirects zijn een essentieel onderdeel van professioneel website beheer waarbij of je nu een domain migreert, URL structuur optimaliseert of oude pagina's verwijdert, correct ingestelde redirects je SEO waarde behouden en zorgen voor optimale gebruikerservaring.
Key takeaways uit deze complete gids:
Modern web development context: Met de opkomst van Next.js, React, Vue, SPAs en edge computing zijn redirects complexer geworden. Begrijp wanneer je server-side redirects nodig hebt versus client-side routing en gebruik edge redirects (Vercel, Netlify, Cloudflare) voor global performance.
SEO best practices samengevat:
Volgende stappen:
Met de kennis uit deze complete gids kun je professionele redirects implementeren die je SEO rankings beschermen, gebruikerservaring optimaliseren en toekomstbestendig zijn voor moderne web architecturen.
Blijf redirects monitoren, test regelmatig en behandel ze als permanente infrastructuur van je website en niet als tijdelijke oplossing.
Dit artikel is gebaseerd op officiële documentatie en authoritative sources:
Let op: HTTP
KeurigOnline zegtHTTPHTTP is het protocol waarmee webclients en -servers gestructureerd data uitwisselen via requests en responses. redirect
KeurigOnline zegtRedirectEen redirect stuurt bezoekers automatisch door naar een andere webpagina. gedrag kan variëren per browser en server versie. Implementeer en test altijd in je eigen omgeving. Links gecontroleerd op december 2025.