dinsdag, december 06, 2005

Zoekmachine vriendelijke redirect

De zoekmachine vriendelijke Redirect


Een van de best bekende zoekmachine optimalisatie technieken is het gebruiken van zoekmachine vriendelijke redirects. Het is alom bekend dat zoekmachines problemen hebben met een 302 redirect in de header. Vooral Google en 302 redirects zijn geen al te beste vrienden, hoewel Google een aantal aanpassingen in het algoritme heeft gedaan zodat ook 302 redirects nu worden opgenomen in de index. Het probleem is eigenlijk een logisch gevolg van de semantiek van de redirects. Een 301 redirect is een Permanente redirect en een 302 redirect is een temporele redict. Dat staat zelfs mee in de return van de redirect: "301 Permanently Moved". Toch komt de 302 redirect soms nog voor bij mensen die een permanente redirect willen doorvoeren. Ook andere zoekmachine onvriendelijke redirects komen voor. Een van de meest voorkomende is de meta-refresh redirect. In tegenstelling tot een verkeerd soort redirect (zoals bij 301/302) is dit een verkeerde techniek. Ook de url-forwarding die sommige domeinnaam hosting bedrijven aanbieden is onveilig.


Het probleem met 302 redirect zit hem in het feit dat de nieuwe pagina wordt bekeken als inhoud van de eerste pagina. De oude pagina wordt meestal ook niet uit de index gehaald. Zoekmachines interpreteren de 302 redirect elks op een andere manier en er duiken zo problemen op ivm hijacks en duplicate content filters. Dit valt echter buiten het bestek van deze tekst.


De HTTP-redirect


Een eerste manier is de meta-refresh redirect. Dit is een zeer veel voorkomende vorm van redirect en het is dus belangrijk dat je ervoor op je hoede bent. Deze redirect geef je mee in een meta tag in de header van het html document. Het ziet er allemaal zo uit:


<META HTTP-EQUIV=Refresh CONTENT="0; URL=http://www.nieuwdomain.com">


Je kan dus een aantal seconden meegeven (hier 0) gedurende dewelke de pagina moet weergegeven worden vooraleer de nieuwe pagina wordt geladen. Dit soort redirect wordt vaak gebruikt bij het wijzigen van domein of pagina met de vermelding "Onze website is verhuist naar www.nieuwesite.be, u wordt automatisch doorverwezen. Indien de nieuwe pagina niet automatisch wordt weergegeven, klik dan hier". De meeste zoekmachines indexeren deze pagina gewoon met de tekst "onze website is ..". Een aantal zoekmachines (de belangrijkste) is intelligent genoeg om de redirect te herkennen. Zij zien dan hoe lang de time-out is. Indien de time-out zeer kort is en korter dan de gemiddelde tijd om een pagina te laden, wordt de nieuwe pagina bekeken. Indien de tijd te lang is wordt de pagina zelf gewoon geindexeerd.


Maar indien de tijd zeer kort is zou de redirect aanzien worden als een 302 redirect, en niet als een 301 redirect. En een 302 redirect is nu eenmaal niet zoekmachine vriendelijk. Dus proberen we dit soort redirect beter te vermijden.


Yahoo heeft bekendgemaakt hoe het dit soort redirect behandeld. Een meta refresh van 0 seconden wordt aanzien als een 301 redirect. Vanaf meer dan 1 seconde wordt de redirect aanzien als een 302 redirect. Msn zegt dat ze een meta-refresh redirect zien als een 302 redirect en Ask Jeeves ziet een meta-refresh van 0 seconden aan als een 302 redirect, maar wacht tot er meer duidelijkheid is over de redirect vooraleer de index te updaten.


Elke zoekmachine heeft dus een andere manier om de redirectie te interpreteren en het is vanuit zoekmachine-optimalisatie standpunt dus beter om deze redirect te vermijden. Als je hem toch nodig hebt omdat de andere methodes bijvoorbeeld niet binnen de mogelijkheden liggen, gebruik je best een redirect van 0 seconden. Die wordt dan in de meeste gevallen geïnterpreteerd als een 302 redirect, behalve bij Yahoo.


De Script-redirect


Een andere manier om te redirecten van de client-side is door middel van een client script zoals JavaScript. Zoekmachines zullen een dergelijke JavaScript redirect niet herkennen en dus ook niet volgen. Sommige mensen zagen zo de kans van hun leven om de zoekmachines te misleiden. Ze maakten een pagina vol keywords en lieten een JavaScript de pagina doorverwijzen naar de echte pagina. De zoekmachines zien alleen de originele pagina en ranken die dus hoog in de SERPS. Vorig jaar echter werd het algoritme Google slim genoeg om dergelijke redirects te herkennen en werden er een hele hoop pagina's uit de lijsten gebanned of omlaag gehaald.


Het komt er dus op neer dat de redirect niet herkend wordt door de zoekmachines en dat het gebruik ervan ertoe kan leiden dat de site gebanned wordt. Het is dus absoluut belangrijk deze methode te vermijden! Om volledig te zijn neem ik hier toch 2 voorbeeld code snippets op waarmee dergelijke redirect mogelijk is:


JavaScript Redirect - Niet gebruiken!


<script type="text/javascript">

<!--

window.location = "http://www.nieuwesite.be/"

//-->

</script>


<body onLoad="setTimeout(location.href='http://www.nieuwesite.be', '0')" >


De 301 redirect


Het is dus belangrijk te kiezen voor een goede redirect, dwz de 301 redirect. Omdat hij zo belangrijk is geef ik hier alle manieren om hem te bewerkstelligen in client-side script en programmeertalen. Daarna geef ik de mogelijkheden om het in de apache server in te stellen in de .htaccess en een alternatieve mogelijkheid met de CNAME.


PHP 301 Redirect voorbeeld


header("HTTP/1.1 301 Moved Permanently");

header("Location: http://www.nieuwdomein.be/nieuwedir/nieuwe-pagina.htm");

exit();


ASP 301 Redirect voorbeeld (VBScript)


<%@ Language=VBScript %>

<%

Response.Status="301 Moved Permanently"

Response.AddHeader "Location", "http://www.nieuwdomein.be/nieuwedir/nieuwe-pagina.asp"

response.end

%>


ASP 301 Redirect voorbeeld (JScripit)


<%@ Language=VBScript %>

<%

Response.Status="301 Moved Permanently"

Response.AddHeader "Location", "http://www.nieuwdomein.be/nieuwedir/nieuwe-pagina.asp"

response.end

%>


ASP .NET 301 Redirect voorbeeld (c#)


<script runat="server">

private void Page_Load(object sender, System.EventArgs e) {

Response.Status = "301 Moved Permanently";

Response.AddHeader("Location","http://www.newdomein.be/");

}

</script>


Cold Fusion 301 Redirect voorbeeld (CFM)


<.cfheader statuscode="301" statustext="Moved permanently">

<.cfheader name="Location" value="http://www.nieuwdomein.be/">


JSP / Java Servlets / Java 301 Redirect voorbeeld (Java)


<%

repsonse.setStatus(301);

response.setHeader( "Location", "http://www.nieuwdomein.be/" );

response.setHeader( "Connection", "close" );

%>


CGI / Perl 301 Redirect voorbeeld


#! /usr/bin/perl

use cgi;

my $q = cgi->new();

print $q->redirect(

-location => 'http://www.newsite.com/nieuwe-pagina.cgi',

-status => 301,

);


Als je te maken hebt met html-pagina's bestaat er toch de mogelijkheid om de soort redirects te implementeren. Je kan immers in de .htacces de html pagina's ook laten interpreteren als scripting pagina's zodat ze geparsed worden. Hiervoor gebruik je dan volgende regels in de .htaccess:


AddType application/x-httpd-php .html

AddType application/x-httpd-php .htm


301 Redirect in de htaccess


Een mooie en krachtige manier om een redirect te doen is in de .htaccess. We hebben de .htaccess reeds eerder gezien in het stuk over domeinnamen en subomeinen en het herschrijven van url's met mod rewrite.


Als je beschikt over Apache en mod_rewrite is geinstalleerd, dan kan je de redirect inderdaad mooi daar zetten ipv in de broncode van de pagina's. De syntax van de redirect in de htaccess (heb je geen mod rewrite voor nodig) is als volgt:


Redirect /uwdirectory http://www.nieuwdomein.told/nieuwedirectory


Maar de default waarde geeft een 302, en zoals we reeds eerder gezien hebben willen we zeker geen 302 redirect. Je kiest dus best een van de volgende varianten:


Redirect permanent /one http://www.nieuwdomein.be/two

Redirect 301 /two http://www.nieuwdomein.be/other


Zo ben je er zeker van dat Apache een 301 zoekmachine vriendelijke redirect teruggeeft. Je kan zoals we gezien hebben met die mod rewrite ook de url's herschrijven en bijvoorbeeld .php bestanden hernoemen naar .html bestanden. Je kan met mod rewrite nog veel meer dan met de gewone redirect in de htaccess. Maar als je geen bevoegdheden hebt om de mod rewrite te installeren kan je zo al verder. Wanneer je een domein wilt forwarden naar een nieuw domein kan je deze code gebruiken met mod rewrite:


Options +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTP_HOST} ^newdomain\.com

RewriteRule ^(.*)$ http://www.nieuwdomein.be/$1 [R=permanent,L]


301 Redirect mbv de CNAME


Een laatste manier om een redirect te bewerkstelligen is dmv het CNAME veld op de server. Deze CNAME wordt meestal gebruikt als alias voor een subdomein dat ergens anders gehost is. Een voorbeeld is wanneer www.domeinnaam.be wordt doorverwezen naar domeinnaam.be. In Apache is de server respons voor een dergelijke redirect 301, dus kan je de CNAME in principe gebruiken als zoekmachine-vriendelijke redirect. Mijn ervaring is dat dit inderdaad goed werkt.


Je kan natuurlijk alleen subdomeinen doorverwijzen met de CNAME. Verder is dit geen echte methode voor beginnende webontwikkelaars. Bij een slechte configuratie van de CNAME kan je zelfs in een oneindige lus raken of kan er voor zorgen dat je mails niet meer aankomen. Daarom is het gebruik van een CNAME eigenlijk niet zo aangewezen. Het wordt dan ook meestal enkel gebruikt wanneer een subdomein verwijst naar een nieuw domein.

Geen opmerkingen: