301 redirect
Een 301 redirect, ook wel een “301 Moved Permanently” redirect genoemd, is bedoelt voor het permanent doorsturen van verkeer naar een nieuwe URL.
Eigenlijk geeft het de bezoeker van de oude url de boodschap dat het zijn script of link moet vervangen naar de nieuwe url. Een voorbeeld hiervan is als een website bijvoorbeeld jaren gedraaid heeft op HTTP ( zonder SSL ) en nu voorzien is van HTTPS ( met SSL ). De 301 redirect geeft dan aan de bezoeker van de oude URL aan dat de link aangepast moet worden van http://www.theory7.net naar https://www.theory7.net
301 Redirect en SEO
Een 301 redirect is de meest vriendelijke redirect die je kan maken op het gebied van SEO. Je vertelt de zoekmachine namelijk netjes dat de URL die jij beschouwt als oude URL nu beschikbaar is op een nieuwe URL.
Indien er backlinks of andere verwijzende websites naar de oude URL gelinkt staan, dan zal de zoekmachine zoals Google of Bing deze waarde die binnenkomt op de oude URL ook netjes doorsturen en meenemen naar de nieuwe URL toe.
Het is daarom ook altijd van groot belang om te zorgen dat je bij 404 pagina’s een 301 redirect maakt, zodat de waarde op SEO gebied en de bezoekers altijd goede content op de goede URL laat zien! Haal dus nooit pagina’s zomaar offline, maar zet ze offline en maak een 301 redirect naar een andere pagina of relevante content.
301 redirect methoden
Een 301 redirect kan op meerdere manieren gemaakt worden. Het verschilt per hosting pakket / server welke methode voor jou het makkelijkste is. Wij bespreken hieronder de meest voorkomende:
- 301 redirect via .htaccess regel
- 301 redirect via mod_rewrite in .htaccess of Apache Vhost
- 301 redirect via PHP script
- 301 redirect via Nginx
301 redirect via .htaccess regel
Een 301 redirect kan gemaakt worden in een zogeheten .htaccess file. Dit is een bestand die echt begint met een punt en geplaatst moet worden in de map waar jouw website bestanden ook staan. Vaak heet die map public_html, of public of static. Dit verschilt per hosting pakket / server.
Voorbeeld van 301 redirecten via .htaccess
Redirect 301 /pad/naar/oude/url https://www.theory7.net/pad/naar/nieuwe/url
**Ander voorbeeld:**
Redirect 301 /oude-pagina https://www.theory7.net/nieuwe-pagina
301 redirect via mod_rewrite
Deze methode die gaat via mod_rewrite is een veelgebruikte methode en word ook vaak in de .htaccess gebruikt. Je kunt deze methode van 301 redirecten herkennen en vaak terugzien bij het doorsturen van bezoekers of zoekmachines van een oude website (domeinnaam) naar een nieuwe website (domeinnaam).
Ook word het veel gebruikt om iedereen te forceren om van http:// naar https:// te gaan en zodoende te zorgen dat iedereen over de beveiligde verbinding gaat.
Wat is mod_rewrite?
Mod_rewrite is een module die geladen word in Apache. Apache is de software die jouw scripts en html bestanden leest en vervolgens omzet in visuele weergave. Kortgezegd maakt het van jouw geschreven html code dus een zichtbare website.
De mod_rewrite module is een optie/extra module die ingeladen wordt waarmee je Apache kunt vertellen dat het urls moet doorsturen naar nieuwe urls. Aangezien het in Apache gebeurd tijdens het verwerken van jouw html code, is het ook erg snel!
Voorbeeld van het 301 redirecten via mod_rewrite
RewriteEngine On
rewritecond %{http_host} ^theory7.net
rewriteRule ^(.*) http://www.theory7.net/$1 [R=301,L]
Met dit voorbeeld sturen we alle bezoekers die onze website via http://theory7.net bezoeken, dus zonder www ervoor naar de versie met www ervoor, namelijk http://www.theory7.net .
Voorbeeld Forceer SSL 301 redirect mod_rewrite
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
In dit voorbeeld geven we aan mod_rewrite aan dat als de URL die we bezoeken over http:// (dus zonder SSL) bezocht wordt, we hem graag willen doorsturen naar https:// (dus met SSL) en we dit via een 301 redirect willen doen.
Zodra je deze 301 redirect gebruikt, zal dus elke bezoeker geforceerd worden naar een https:// SSL link en is vanaf dat moment altijd een slotje zichtbaar in jouw adresbalk.
301 redirect via PHP (header functie)
Het is ook mogelijk om een 301 redirect te maken in PHP. Dit is wel de variant die ik het minst aanraad, omdat Apache en PHP eerst het door jou geschreven script moeten lezen en uitvoeren en je dan pas via een 301 redirect doorsturen. Dit is dus aanzienlijk trager dan als het via .htaccess of via mod_rewrite gaat!
Voorbeeld 301 redirect via PHP header functie
<?php
//Eerst openen we de PHP code met <php
//Daarna openen we de header functie en zetten we de HTTP status code, namelijk 301 moved permanently
///Daarna geven we via Location de nieuwe URL aan
header( "Status: 301 Moved Permanently" );
header( "Location: https://www.theory7.net/nieuwe-url" );
exit();
?>
Via bovenstaande code stuur je dus iemand via PHP simpel door naar een nieuwe URL. Je kan het uiteraard volledig naar wens aanpassen.
De // regels zijn enkel ter uitleg, PHP doet er dus niks mee dus je mag ze eventueel ook weer weghalen als je de code gebruikt!
301 redirect via NGINX
Het kan zijn dat jouw webhosting provider in plaats van Apache gebruik maakt van NGINX. Dit is een ander soort software die net anders werkt dan Apache en vaak meer gericht is op een hogere performance en minder rekenkracht nodig heeft.
Helaas kent NGINX geen .htaccess of geen mod_rewrite, dus via die methoden kun je niet 301 redirecten bij NGINX. Via PHP kan het wel, maar er is nog een mogelijkheid via de config van NGINX.
Via de NGINX vhost config, kun je namelijk 301 redirects maken voor verschillende doeleinden. Ik zal hieronder enkele voorbeelden maken die mogelijk voor jou te gebruiken zijn:
301 redirect naar een nieuw domein via NGINX
server {
server_name oudedomeinnaam.net;
rewrite ^/(.*)$ http://nieuwedomeinnaam.net/$1 permanent;
}
In dit voorbeeld maak je in de NGINX config een server object aan. In dat object geef je bij server_name de oude domeinnaam op. Dit houd in dat het object in de nginx config geactiveerd word zodra je naar de oudedomeinnaam.net surft.
In dit geval staat eronder een rewrite regel. Daar stellen we in dat als je naar de oudedomeinnaam.net surft, je doorgestuurd moet worden naar de nieuwedomeinnaam.net. Dit gaat via een 301 redirect!
301 redirect oude pagina naar nieuwe pagina in NGINX
server {
server_name theory7.net www.theory7.net;
rewrite ^/oude-pagina$ /nieuwe-pagina.html permanent;
}
Om een oude pagina url naar een nieuwe pagina url te 301 redirecten, heb je weer andere code nodig. Hierboven maken we wederom een server object in de NGINX config aan.
Bij server_name stellen we de domeinnaam theory7.net en www.theory7.net in. Dit houd in dat dit object geactiveerd word zodra we een van deze domeinnamen bezoeken in de adresbalk.
Vervolgens zie je een redirect regel staan waarmee we zeggen dat /oude-pagina ( en alles wat er achter komt) doorgestuurd moet worden naar /nieuwe-pagina.html. Zodoende sturen we een specifieke pagina dus makkelijk via een 301 redirect in NGINX door!