KeurigOnline
Bestellen
Hosting
Domeinnaam
Ondersteuning
Ontdek

Op deze pagina

Blog / Hosting · · ~34 min lezen

HTTP redirects: complete gids voor 301, 302, 307, 303 en 308 redirects instellen

Leer HTTP redirects instellen: 301, 302, 307, 303 en 308. Complete gids met .htaccess, PHP en WordPress voorbeelden. Behoud SEO waarde bij URL wijzigingen.

Geschreven door: Maarten Keizer Maarten Keizer
Deel dit artikel

Samenvatting: HTTPKeurigOnline zegtHTTPHTTP is het protocol waarmee webclients en -servers gestructureerd data uitwisselen via requests en responses. Redirects

Een HTTP redirectKeurigOnline 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 .htaccessKeurigOnline zegthtaccessEen .htaccess-bestand gebruik je voor geavanceerde serverinstellingen zoals redirects en beveiliging., PHPKeurigOnline zegtPHPPHP is een programmeertaal waarmee dynamische websites en webapplicaties gebouwd worden., NginxKeurigOnline zegtNginxNginx is een snelle, lichtgewicht webserver die ook als reverse proxy en load balancer functioneert. of WordPressKeurigOnline 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.

Abstracte illustratie van HTTP redirects: centraal oude URL oude-site.nl met redirect pijl naar nieuwe-site.nl, omringd door status code badges - 301 permanent met groene vinkje, 302 tijdelijk met oranje klok, 307 met preserved method icoon, 303 POST naar GET conversie pijl, 308 permanent met lock, browser venster met locatie pijl, server response, SEO link equity flow met groene pijlen, verhuiskaart moving box metafoor - visualiseert HTTP redirect als digitale verhuizing met verschillende types

Wat zijn HTTP redirects?

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

  1. Browser request — Browser vraagt: https://example.com/oude-pagina
  2. Server response — Server antwoordt: "301 Moved Permanently" met nieuwe locatie in Location header
  3. Automatische navigatie — Browser navigeert automatisch naar de nieuwe URL
  4. Pagina weergave — Gebruiker ziet de nieuwe pagina (zonder handmatige actie)

Wanneer gebruik je redirects?

HTTP redirects zijn essentieel in verschillende scenario's:

  • Domain migratie: Verhuizen van oud-domein.nl naar nieuw-domein.nl
  • URL structuur wijziging: Van /product-123 naar /categorie/product-123
  • Pagina verwijdering: Oude pagina redirecten naar relevante vervanging
  • HTTPS migratie: Van http:// naar https://
  • wwwKeurigOnline zegtWWWWWW staat voor World Wide Web en omvat alle websites op internet. canonicalization: Kiezen tussen www.site.nl en site.nl
  • Content consolidatie: Meerdere oude artikelen samenvoegen naar één comprehensive guide
  • Seasonal campaigns: Tijdelijke redirects voor promoties of A/B testing
  • Taalversies: Gebruikers redirecten naar correcte taalversie

Redirect vs canonical vs noindex

Niet elke situatie vereist een redirect. Hier is een decision tree:

  • Moet de oude pagina verdwijnen? → Gebruik een redirect (301)
  • Blijven beide pagina's online maar duplicate content? → Gebruik een canonical tagKeurigOnline zegtCanonical tagEen canonical tag vertelt zoekmachines welke versie van een pagina de 'originele' is.
  • Pagina blijft online maar moet uit Google index? → Gebruik robots meta tag (noindex)

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.

Complete redirect types uitgelegd

Abstracte illustratie van HTTP redirect types vergelijking: horizontale rij met 5 status code kaarten - 301 permanent verhuizing met groene SEO pijl, 302 tijdelijk met oranje klok waarschuwing, 307 tijdelijk met preserved POST method icoon, 303 met POST naar GET conversie pijl, 308 permanent met lock en method preserved, elk met type label en gebruik scenario - visualiseert verschillen tussen 5 belangrijkste HTTP redirect status codes

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.

Comparison table: alle redirect types

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 APIKeurigOnline zegtAPIKoppeling tussen verschillende systemen of software.'s, POST permanent

301 Moved Permanently

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 cacheKeurigOnline 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:

  • Domain migratie: oud-domein.nl → nieuw-domein.nl
  • URL cleanup: /oude-lange-url-naam → /korte-url
  • HTTPS migratie: http://site.nl → https://site.nl
  • Content consolidatie: Drie oude artikelen → één comprehensive guide

302 Found (tijdelijke redirect)

Een 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:

  • Tijdelijke promoties: /product → /black-friday-deal
  • A/B testing: Tijdelijk verkeer splitsen tussen varianten
  • Maintenance: /page → /onderhoud-pagina
  • Seasonal content: Tijdelijke kampagne pagina's

Let 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.

307 Temporary Redirect (met method preservation)

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:

  • Form submissions tijdelijk naar andere endpoint (POST blijft POST)
  • API endpoints met tijdelijke downtime (PUT/DELETE blijven behouden)
  • POST/PUT/DELETE requests naar maintenance endpoint

De meeste websites hebben 307 niet nodig maar voor moderne web applications en APIs is het essentieel wanneer HTTP method preservation kritiek is.

303 See Other (POST → GET conversie)

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.

  1. Gebruiker submit form (POST request)
  2. Server verwerkt data
  3. Server stuurt 303 redirect naar confirmation page
  4. Browser doet GET request voor confirmation page
  5. Als gebruiker F5 drukt, wordt alleen de confirmation page ververst (geen dubbele submission)

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();
}
?>

308 Permanent Redirect (met method preservation)

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:

  • REST API endpoints permanent verplaatst (method is critical)
  • POST/PUT/DELETE endpoints naar nieuwe URL
  • Modern web applications waar method preservation essentieel is

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.

Meta refresh & JavaScript redirects

Naast server-side redirects bestaan er client-side redirects via HTMLKeurigOnline zegtHTMLHTML is de programmeertaal voor het maken van webpagina’s. en JavaScriptKeurigOnline 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

  • Google kan ze missen (geen garantie dat Googlebot JavaScript uitvoert)
  • Langzamer dan server-side (extra rendering tijd)
  • Werken niet als JavaScript disabled is
  • PageRank mogelijk niet 100% overgedragen

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.

Implementatie methodes

Er zijn 7+ manieren om redirects te implementeren waarbij de juiste keuze afhangt van je server (ApacheKeurigOnline zegtApacheApache is software die webpagina’s aan bezoekers toont. vs Nginx), tech stack (WordPress, Next.js, PHP) en technische kennis.

Apache .htaccess - advanced implementation

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.

Basis 301 redirect

# 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

Volledige domain redirect

<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.

HTTP naar HTTPS redirect

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

www naar non-www canonicalization

<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).

Advanced: regex patterns

# 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.

Advanced: conditional redirects

# 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]

Tips & warnings voor .htaccess

  • ⚠️ BackupKeurigOnline zegtBackupEen backup is een veilige kopie van je websitegegevens voor noodgevallen. eerst: Maak altijd een backupKeurigOnline zegtBackupEen backup is een veilige kopie van je websitegegevens voor noodgevallen. van .htaccess voordat je wijzigingen maakt
  • 📍 Locatie: .htaccess moet in de root directory staan (public_htmlKeurigOnline zegtpublic_htmlpublic_html is de hoofdmap waar je websitebestanden geplaatst moeten worden./ of www/)
  • Test syntax: Gebruik online .htaccess validators om syntax errors te voorkomen
  • 🔧 Debugging: Check Apache error logs (/var/log/apache2/error.log) bij problemen

RewriteRule 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 - complete server configuration

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).

Basis redirects

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;
    }
}

Volledige domain redirect

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.

HTTP naar HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

Advanced: regex redirects

# 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 + path
  • Test configuratie: sudo nginxKeurigOnline zegtNginxNginx is een snelle, lichtgewicht webserver die ook als reverse proxy en load balancer functioneert. -t
  • Reload: sudo systemctl reload nginx

PHP - server-side implementation

PHPKeurigOnline 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.

301 permanent redirect

<?php
// 301 redirect
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.jouwsite.nl/nieuwe-pagina");
exit();
?>

302 temporary redirect

<?php
header("HTTP/1.1 302 Found");
header("Location: https://www.jouwsite.nl/tijdelijke-pagina");
exit();
?>

307 temporary redirect (method preservation)

<?php
header("HTTP/1.1 307 Temporary Redirect");
header("Location: https://www.jouwsite.nl/nieuwe-endpoint");
exit();
?>

303 See Other (POST → GET)

<?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();
}
?>

Conditional redirects

<?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() is CRITICAL: Altijd exit() na header() aanroepen, anders wordt code verder uitgevoerd
  • ⚠️ Headers eerst: Geen output (echo, HTMLKeurigOnline zegtHTMLHTML is de programmeertaal voor het maken van webpagina’s., whitespace) voor header() calls
  • REQUEST_URI: Behoudt automatisch path + query string
  • 🔧 Debugging: Check voor "headers already sent" errors in logs

WordPress - plugins & custom code

WordPress heeft meerdere opties voor redirect instellen wordpress van beginner-vriendelijke plugins tot custom PHP code.

Via Redirection plugin (recommended)

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.

  1. Ga naar: Plugins → Nieuwe plugin toevoegen
  2. Zoek: "Redirection"
  3. Installeer en activeer de plugin
  4. Ga naar: Extra → Redirection
  5. Klik "Add New" redirect
  6. Vul in:
    • Source URL: /oude-pagina
    • Target URL: https://www.jouwsite.nl/nieuwe-pagina
    • Type: 301 (dropdown)
  7. Klik "Add Redirect"

Voordelen Redirection plugin: Ingebouwde logging, overzicht van alle redirects, regex support, conditional logic en 404 error monitoring.

Via Yoast SEO Premium

Als je Yoast SEO Premium hebt, zijn redirects ingebouwd:

  1. Ga naar: SEO → Redirects
  2. Voeg redirect toe via interface
  3. Yoast detecteert automatisch URL changes en suggereert redirects

Custom code in functions.php

// 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:

  • Plugin preferred: Eenvoudiger te beheren en heeft logging
  • 📊 Monitor 404s: Redirection plugin toont welke 404s redirects nodig hebben
  • ⚠️ Performance: Te veel redirects in databaseKeurigOnline zegtDatabaseEen database is een georganiseerde verzameling gegevens waar websites informatie opslaan en ophalen. kunnen queries vertragen (100+ redirects = overweeg .htaccess)

Next.js - modern framework redirects

Next.js heeft drie methodes voor redirects elk voor verschillende scenarios (bron: Next.js Redirects documentation).

In next.config.js (preferred)

// 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.

In Middleware (edge redirects)

// 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.

In getServerSideProps

// 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:

  • Static redirects: Use next.config.js (fastest)
  • Conditional/auth redirects: Use Middleware
  • 📱 Data-dependent: Use getServerSideProps

JavaScript & meta refresh (client-side)

Client-side redirects zijn minder preferred, maar soms noodzakelijk.

JavaScript window.location

// 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.

Meta refresh tag

<!-- 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

  • Google kan deze redirects missen (JavaScriptKeurigOnline zegtJavaScriptJavaScript is de browser- en server-scriptingtaal voor interactieve, asynchrone webapplicaties. execution required)
  • Langzamer dan server-side (extra rendering tijd)
  • Werkt niet met JavaScript disabled
  • Mogelijk niet 100% link equity overdracht

Alleen gebruiken als: Geen server toegang, legacy systemen, niet-SEO pages.

cPanel & hosting control panels

Veel hosting providers bieden GUI interfaces voor redirects wat ideaal is voor niet-technische gebruikers.

cPanel redirects interface

  1. Log in op cPanel
  2. Ga naar sectie: DomeinenRedirects
  3. Select type: Permanent (301) of Temporary (302)
  4. Vul in:
    • Van: /oude-pagina
    • Naar: https://www.jouwsite.nl/nieuwe-pagina
    • Redirect met of zonder wwwKeurigOnline zegtWWWWWW staat voor World Wide Web en omvat alle websites op internet.
  5. Klik "Add"

Voordelen cPanel:

  • ✅ Geen code kennis nodig
  • 📊 Overzicht van alle redirects
  • 🔧 Test button om redirect te verifiëren

Let op: cPanel conflict

cPanel genereert .htaccessKeurigOnline 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.

SEO overwegingen

Redirects hebben significante impact op je SEO waarbij je correct geïmplementeerd je rankings behoudt maar verkeerd gedaan je traffic verliest.

Link equity & PageRank flow

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:

  • 301/308 redirect: 90-99% link equity naar nieuwe URL
  • 302/307 redirect: Link equity blijft bij oude URL (niet overgedragen)
  • 303 redirect: Niet relevant voor SEO (gebruikt voor forms)

Crawl budget implications

Redirect chains verspillen crawl budget oftewel het aantal pagina's dat Google crawlt per dag.

Impact van redirect chains:

  • Elke redirect = aparte HTTP request
  • Chain A→B→C = 3 requests in plaats van 1
  • Langzamere indexering van nieuwe content
  • Google's guidance: Max 3-5 redirects in chain

Tip: Maak altijd directe redirects. Als je A→B had en B→C toevoegt, update A→C direct om redirect chains te voorkomen.

Soft 404 issue

Google behandelt irrelevante redirects als soft 404 errors. Link equity gaat verloren.

Voorbeeld van verkeerde redirect:

  • Fout: Alle oude product pagina's → homepage
  • Correct: Product pagina → relevante categorie of vergelijkbaar product

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

  • Redirect naar relevante pagina (content similarity)
  • 404 is beter dan irrelevante redirect
  • Use 410 Gone voor permanent verwijderde content (explicieter dan 404)

Redirect vs canonical tag

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

Google Search Console monitoring

Monitor je redirects via Google Search Console:

Setup na redirects:

  1. Submit nieuwe sitemapKeurigOnline zegtSitemapEen sitemap is een bestand dat zoekmachines helpt alle pagina's van je website te vinden. (verwijder oude URLs uit sitemap)
  2. Monitor Coverage rapport voor redirect errors
  3. Use URL Inspection tool om redirect status te checken
  4. Check Links rapport om te zien of oude backlinks nog wijzen naar oude URLs

Tip: Google Search Console monitoring

  • Neem redirects NIET op in je sitemap
  • Monitor gedurende 3-6 maanden na grote migratie
  • Check voor toename in crawl errors

Hoelang redirects laten staan?

Google's guidance: In 2021 zei John Mueller in de Ask Googlebot video dat 1 jaar voldoende is voor 301 redirects.

Real-world advice:

  • Permanent laten staan is het veiligst
  • Oude backlinks blijven jaren bestaan
  • Minimale performance impact
  • Voorkomt broken links en verloren traffic

Exception: Bij domain migratie waar het oude domein expires, kunnen redirects na 2-3 jaar verwijderd worden als het oude domein offline gaat.

Security best practices

Redirects kunnen security risico's vormen als ze niet correct geïmplementeerd zijn waarbij open redirect vulnerabilities vaak misbruikt worden voor phishingKeurigOnline 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.

Open redirect vulnerability

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 phishingKeurigOnline 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();
?>

Host header attacks

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");
?>

Best practices checklist

Validation:

  • ✅ Whitelist toegestane redirect destinations
  • ✅ Valideer URL format met parse_url()
  • ✅ Check domain tegen allowed list
  • ❌ NOOIT user input direct gebruiken in redirect

Relative URLs preferred:

  • ✅ Use /nieuwe-pagina instead of https://site.nl/nieuwe-pagina
  • Voorkomt cross-domain redirects
  • Geen domain validation nodig

Framework built-ins:

  • Laravel: redirect()->route('name') (veilig)
  • WordPress: wp_redirect() met wp_validate_redirect()
  • Next.js: Redirects in next.config.js (geen user input)

Logging & monitoring:

  • ✅ Log alle redirect attempts met destination URL
  • ✅ Alert bij external redirect attempts
  • ✅ Monitor voor suspicious patterns

OWASP guidelines

OWASP (Open Web Application Security Project) heeft officiële guidance voor redirect security inclusief CWE-601 (URL Redirection to Untrusted Site).

Key recommendations:

  1. Avoid redirects based on user input - gebruik parameter IDs in plaats van URLs
  2. Use whitelist validation - nooit blacklists (te easy to bypass)
  3. Sanitize input - ook bij whitelist approach
  4. Framework built-ins - gebruik framework functies wanneer mogelijk

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: /");
}
?>

Testing & monitoring

Redirects moeten grondig getest worden voordat ze live gaan en continu gemonitord na implementatie.

Browser DevTools testing

Redirect testen met DevTools in 5 stappen

  1. Open DevTools — Druk F12
  2. Ga naar Network tab — Selecteer het Network tabblad
  3. Enable Preserve log — Anders verdwijnt de log na redirect
  4. Bezoek oude URL — Type de te testen URL in de adresbalk
  5. Controleer redirect — Check status code (301/302/307), Location header en timing

Wat te checken:

  • ✅ Correcte status code (301 voor permanent, 302 voor tijdelijk)
  • ✅ Location header wijst naar correcte URL
  • ✅ Geen redirectKeurigOnline zegtRedirectEen redirect stuurt bezoekers automatisch door naar een andere webpagina. chains (direct van A naar B)
  • ✅ Response time < 200ms per redirect

cURL command testing

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.nl

Output 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.nl

Online testing tools

Verschillende online tools bieden visuele redirect chain checking. Met handige features.

HTTPStatus.io

HTTPStatus.io is een gratis online tool. Voor redirect chain visualization.

  • ✅ Complete redirect chain visualization
  • ✅ Status codes, response times, headers
  • ✅ Identifies loops en chains
  • ✅ Free tool

Redirect Checker

Redirect-checker.org biedt een simple interface. Voor redirect testing.

  • ✅ Simple interface
  • ✅ Shows complete redirect path
  • ✅ HTTP en HTTPS testing

Screaming Frog SEO Spider

Screaming Frog SEO Spider is een desktop crawler tool. Perfect voor large-scale redirect audits.

  • ✅ Crawl entire site voor redirects
  • ✅ Identify redirect chains
  • ✅ Detect redirect loops
  • ✅ Find redirects ending in 404
  • ✅ Export naar CSV

Screaming Frog configuration:

  1. Mode: Spider
  2. Configuration → Spider → Check "Follow Redirects"
  3. Crawl je website
  4. Filter: Response Codes → 3xx Redirects
  5. Check kolom "Redirect Chains" voor problemen

Google Search Console monitoring

Key reports voor redirect monitoring:

Coverage rapport:

  • Check "Excluded" sectie voor redirect errors
  • "Redirect error" indicates broken redirects
  • "Page with redirect" shows which pages redirect

URL Inspection tool:

  1. Enter oude URL
  2. Check "Coverage" status
  3. Should show "Page redirects to X"
  4. Verify redirect destination is correct

Performance rapport:

  • Monitor traffic drop na redirects
  • Check if nieuwe URLs krijgen impressions/clicks
  • Timeline should show gradual shift van old naar new

Automated testing scripts

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.sh

Performance monitoring

TTFB (Time To First Byte) impact:

  • Elke redirect adds 50-200ms latency
  • Redirect chain A→B→C = 100-400ms extra
  • Mobile networks = higher latency per redirect

Monitoring tools:

Modern web context

Het web is geëvolueerd met HTTPKeurigOnline 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.

HTTP/2 & HTTP/3 implications

Verschillen met HTTP/1.1:

  • HTTP/1.1: Sequential requests, redirect = volledige roundtrip delay
  • HTTP/2: Multiplexing (parallel requests), maar redirects add nog steeds latency
  • HTTP/3 (QUIC): Lagere latency, snellere connection setup, maar redirects blijven roundtrips

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.

Single Page Applications (SPAs)

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:

  • Legacy URLs van pre-SPA website
  • Cross-domain redirects
  • SEO (Googlebot volgt server-side redirects betrouwbaarder)
  • Marketing URLs met UTM parameters

Serverless & edge redirects

Moderne hosting platforms bieden edge redirects. Uitgevoerd op CDN nodes wereldwijd.

Vercel Edge Middleware

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 file

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

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:

  • ⚡ Ultra-low latency (dichtstbijzijnde CDN node)
  • 📈 Infinite scalability (geen origin server load)
  • 💰 Cost effective (edge compute is goedkoop)
  • 🌍 Global performance (overal ter wereld snel)

Progressive Web Apps (PWAs)

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.

Veelgemaakte fouten & oplossingen

Zelfs ervaren developers maken deze redirect mistakes waarbij hier staat hoe je ze herkent en oplost.

Redirect chains

Het probleem:

Bezoeker request: example.com/oude-pagina
→ 301 redirect naar /tussenliggende-pagina
  → 301 redirect naar /nog-een-stap
    → 301 redirect naar /finale-pagina

Impact:

  • ⏱️ Extra latency: 150-600ms (50-200ms per redirect)
  • 🤖 Crawl budgetKeurigOnline zegtCrawl budgetCrawl budget is het aantal pagina's dat Google per tijdseenheid van je website crawlt. verspilling (Google moet 3+ requests doen)
  • ⚠️ Google advice: Maximum 3-5 redirects
  • 📱 Mobiele gebruikers merken significante vertraging

Detectie:

  • Screaming Frog: Filter "Redirect Chains"
  • HTTPStatus.io: Shows volledige chain visueel
  • cURL: curl -L -v URL toont alle hops

Oplossing:

# ❌ 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 /d

Redirect loops

Het 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:

  • Browser toont direct error message
  • Screaming Frog: "Redirect Loop" status
  • cURL hangs indefinitely (gebruik Ctrl+C)

Redirects naar 404 pagina

Het probleem. Redirect wijst naar page die niet meer bestaat.

Impact:

  • Link equity gaat naar 404 = volledig verloren
  • Slechte user experience (2 hops om bij error te komen)
  • Google indexeert uiteindelijk als 404

Detectie met Screaming Frog:

  1. Crawl site met "Follow Redirects" enabled
  2. Filter op "3xx Redirects"
  3. Check "Redirect URI" kolom
  4. Cross-reference met "404" responses

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.txt

Oplossing:

  1. Find valid replacement page
  2. Update redirect naar valid URL
  3. If geen relevant page: Remove redirect, return 404 of 410 direct

Cache issues

Het probleem: Browser cached oude 301 redirect waardoor nieuwe redirect niet wordt gezien.

Symptomen:

  • Test toont nieuwe redirect werkt
  • Gebruikers zien nog steeds oude redirect
  • Incognito mode werkt wel

Oplossing voor gebruikers:

1. Clear browser cache:

  • Chrome: Ctrl+Shift+Del → Cached images and files
  • Firefox: Ctrl+Shift+Del → Cache
  • Safari: Develop → Empty Caches

2. Test in Incognito/Private mode (geen cache):

  • Chrome: Ctrl+Shift+N
  • Firefox: Ctrl+Shift+P

3. Flush DNSKeurigOnline 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-caches

Preventie voor developers:

  • ✅ Test met 302 eerst (niet cached), dan switch naar 301
  • ✅ Communiceer cache clearing instructies naar gebruikers
  • ✅ Wacht 24-48 uur na 301 voor volledige cache expiration

GEO redirects blocking Googlebot

Het probleem: Internationale sites redirecten bezoekers naar country-specific versies waarbij Google crawlt vanuit VS, wordt ge-redirect en de verkeerde versie indexeert.

Symptomen:

  • Nederlandse pagina's niet geïndexeerd
  • Alleen US versie in Google
  • Coverage errors in GSC

Oplossing:

  • ✅ Never block USA IP ranges (Googlebot location)
  • ✅ Use hreflang tags instead of GEO redirects (preferred)
  • ✅ If GEO redirect essential: Whitelist Googlebot user agent

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" />

Praktische use cases

Concrete scenarios. Met complete implementaties.

Domain migratie: oud-domein.nl → nieuw-domein.nl

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>

:

  • Behoud oud-domein.nl hosting voor minimum 1 jaar
  • Point naar server met redirect config
  • Monitor renewal dates (niet laten expiren!)

Google Search Console setup na domain migratie

  1. Add properties — Voeg beide domeinen toe: oud-domein.nl EN nieuw-domein.nl
  2. Submit sitemap — Upload sitemap voor nieuw-domein.nl
  3. Monitor indexering — Volg de shift over 3-6 maanden
  4. Check errors — Controleer Coverage rapport voor redirect errors

Stap 4: Update backlinks (optioneel maar aanbevolen):

  • Identificeer high-value backlinks (GSC → Links rapport)
  • Contact site owners
  • Vraag om update naar nieuw domein
  • Focus op high-authority sites eerst

Timeline verwachting:

  • Week 1-2: Eerste nieuwe URLs in Google
  • Maand 1-3: 50-70% van traffic naar nieuwe domain
  • Maand 3-6: 90%+ van traffic verschoven
  • Maand 6-12: Oude domain volledig vervangen in rankings

HTTPS migratie: http:// → https://

.htaccess redirect:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

Complete HTTPS migration checklist:

  • SSL certificaatKeurigOnline zegtSSL certificaatSecure Sockets Layer (SSL) is een encryptie om data te versleutelen. Door middel van een SSL certificaat zorgt u ervoor dat de data die u uitwisselt met de server versleuteld is. geïnstalleerd en actief
  • ✅ Test https:// versie laadt correct
  • ✅ Update internal links naar https://
  • ✅ Update sitemapKeurigOnline zegtSitemapEen sitemap is een bestand dat zoekmachines helpt alle pagina's van je website te vinden. URLs naar https://
  • ✅ Update Google Search Console property (add https:// versie)
  • ✅ Update canonical tags naar https://
  • ✅ Check mixed content warnings (DevTools Console)
  • ✅ Update CDN/external resources naar https://
  • ✅ Update social media links
  • ✅ Update email signatures, marketing materials

URL restructure: flat → hierarchical

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-c

Approach 2: DatabaseKeurigOnline 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();
    }
}
?>

Content consolidatie

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-guide

SEO considerations:

  • ✅ Nieuwe pagina moet alle content van oude pagina's coverage hebben
  • ✅ Nieuwe pagina moet comprehensive zijn (2,500+ woorden)
  • ✅ Link equity van alle 3 oude pages flows naar nieuwe page
  • ⚠️ Check GSC: Oude URLs moeten uit index verdwijnen binnen 1-2 maanden

Seasonal campaign redirects

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 again

Alternative: 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
?>

FAQ

Wat is het verschil tussen een 301 en 302 redirect?

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.

  • Gebruik 301: domain migratie, permanente URL wijzigingen, verwijderde pagina's, HTTPS migratie
  • Gebruik 302: tijdelijke promoties, A/B testing, maintenance pages, seasonal campaigns

Verliezen redirects SEO waarde?

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.

Hoelang moet ik een redirect laten staan?

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.

Kan ik redirects instellen zonder technische kennis?

Ja! Beide methodes zijn binnen 5 minuten opgezet zonder code-kennis:

  • WordPressKeurigOnline zegtWordPressWordPress is een veelgebruikt CMS om eenvoudig websites en blogs mee te maken en beheren.: Installeer Redirection plugin → Extra → Redirection → voeg redirect toe
  • cPanel: Log in → Domeinen → Redirects → vul formulier in → klik "Add"

Hoe test ik of mijn redirect werkt?

Test altijd in incognito mode om browser cacheKeurigOnline zegtCacheCache slaat tijdelijk gegevens op, waardoor je website sneller laadt. te vermijden:

  1. Browser test: Open incognito venster, bezoek oude URL
  2. Online tools: HTTPStatus.io of Redirect-checker.org voor chain en status code
  3. DevTools: F12 → Network tab → bezoek URL → check status code 301/302 + Location header

Wat is een redirect chain en waarom is het slecht?

Een redirect chain is meerdere redirects achter elkaar (A → B → C → D).

Problemen:

  • Elke redirect voegt 50-200ms latency toe
  • Crawl budget verspild (Google doet 3+ HTTP requests)
  • Mobiele gebruikers ervaren significante vertraging

Oplossing: Maak directe redirects (A→C in plaats van A→B→C). Detecteer met Screaming Frog, HTTPStatus.io of curl -L -v URL.

Redirect of canonical tag - wat moet ik gebruiken?

  • Redirect (301): Oude pagina verdwijnt, gebruikers navigeren automatisch. Gebruik voor domain migratie, permanente URL wijzigingen, HTTPS migration.
  • Canonical tagKeurigOnline zegtCanonical tagEen canonical tag vertelt zoekmachines welke versie van een pagina de 'originele' is.: Beide pagina's blijven online, PageRank wordt geconsolideerd. Gebruik voor filters, pagination, duplicate content.
  • Noindex: Pagina blijft online maar uit Google index.

Kan ik JavaScript redirects gebruiken voor SEO?

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.

JavaScriptKeurigOnline 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.

Wat is het verschil tussen 307 en 302 redirect?

Beide zijn tijdelijk maar verschillen in HTTP method handling:

  • 302 Found: HTTP method kan wijzigen (POST → GET). Oudere HTTP/1.0 standaard.
  • 307 Temporary: HTTP method blijft gegarandeerd hetzelfde. Moderne HTTP/1.1 standaard.

Gebruik 307 voor form submissions, APIKeurigOnline zegtAPIKoppeling tussen verschillende systemen of software. endpoints, REST APIs. Gebruik 302 voor simpele tijdelijke redirects, promoties, A/B testing.

Hoe voorkom ik redirect loops?

Preventie:

  1. Test direct na setup met browser en curl -L -v URL
  2. Documenteer redirects in spreadsheet (oude → nieuwe URL)
  3. Combineer .htaccess conditions i.p.v. separate rules
  4. Maandelijks audit met Screaming Frog (filter "Redirect Loop")

Loop oplossen: Check .htaccess voor conflicting RewriteRules, gebruik verbose cURL om chain te zien, verwijder conflicterende regel.

Conclusie

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:

  • 301 redirects voor permanente wijzigingen - behoud 90-99% link equity
  • 302/307 redirects voor tijdelijke situaties - SEO waarde blijft bij originele URL
  • 303 redirects voor POST-Redirect-GET pattern bij form submissions
  • 308 redirects voor permanente wijzigingen waar HTTP method preservation kritiek is
  • Server-side implementation preferred (.htaccessKeurigOnline zegthtaccessEen .htaccess-bestand gebruik je voor geavanceerde serverinstellingen zoals redirects en beveiliging., PHPKeurigOnline zegtPHPPHP is een programmeertaal waarmee dynamische websites en webapplicaties gebouwd worden., Nginx) boven client-side
  • Vermijd redirect chains - maak altijd directe redirects (A→C, niet A→B→C)
  • Test grondig met browser DevTools, cURL, en online tools
  • Monitor continu met Google Search Console en Screaming Frog
  • Security first - valideer redirect destinations, gebruik whitelists
  • Modern context - Next.js, SPAs, HTTP/2, edge computing patterns

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:

  • Redirect naar relevante pagina's (voorkom soft 404s)
  • Behoud redirects permanent (ondanks Google's "1 jaar" guidance)
  • Oude backlinks blijven jaren bestaan - redirects beschermen je investering
  • Monitor GSC Coverage rapport voor 3-6 maanden na grote migraties

Volgende stappen:

  1. Kies de juiste implementatie methode voor jouw platform
  2. Implementeer redirects met code voorbeelden uit deze gids
  3. Test grondig met meerdere tools
  4. Monitor met Google Search Console
  5. Audit maandelijks voor chains, loops, en 404s

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.


Bronnen en referenties

Dit artikel is gebaseerd op officiële documentatie en authoritative sources:

  1. MDN Web Docs - HTTP 301 Moved Permanently: Officiële documentatie over HTTP status codes en redirect gedrag.
  2. Google Search Central (2024) - 301 Redirects: Google's officiële guidance over redirects en SEO impact.
  3. Google Search Central - Crawl Budget Management: Hoe redirects crawl budgetKeurigOnline zegtCrawl budgetCrawl budget is het aantal pagina's dat Google per tijdseenheid van je website crawlt. beïnvloeden.
  4. Moz SEO Guide - Redirection: Link equity overdracht bij redirects (90-99%).
  5. Apache Software Foundation - mod_rewrite Documentation: Officiële ApacheKeurigOnline zegtApacheApache is software die webpagina’s aan bezoekers toont. redirect configuratie.
  6. Nginx Documentation - ngx_http_rewrite_module: NginxKeurigOnline zegtNginxNginx is een snelle, lichtgewicht webserver die ook als reverse proxy en load balancer functioneert. rewrite en redirect syntax.
  7. OWASP Foundation - Unvalidated Redirects Cheat Sheet: Security best practices voor redirects.
  8. MITRE CWE - CWE-601: URL Redirection to Untrusted Site: Open redirect vulnerability classificatie.
  9. Next.js Documentation - Redirecting: Modern framework redirect implementatie.
  10. IETF RFC 7231 - HTTP/1.1 Semantics and Content: Officiële HTTP/1.1 specificatie.
  11. IETF RFC 7540 - HTTP/2: HTTP/2 protocol specificatie.
  12. IETF RFC 9114 - HTTP/3: HTTP/3 (QUIC) protocol specificatie.
  13. Google Web.dev - Avoid multiple page redirects: Performance impact van redirect chains.
  14. Search Engine Land (2016) - Google: No PageRank Dilution: Gary Illyes bevestigt geen PageRank verlies bij redirects.

Let op: HTTPKeurigOnline zegtHTTPHTTP is het protocol waarmee webclients en -servers gestructureerd data uitwisselen via requests en responses. redirectKeurigOnline 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.