Leesbare URL-rewrites voor SEO
Vriendelijke, goed-beschrijvende, korte, foutloze URLs staan aan de basis van bereikbaarheid van pagina's. Als je CMS nu URLs genereert op basis van user-input, dan zul je altijd zien dat er ineens rare Word-tekens in je URLs terechtkomen. Nu kun je alles wat geen ([0-9a-z-_]) is automatisch verwijderen, maar dan krijg je wellicht hele lelijke URLs die onleesbaar zijn (voorbeeld: föhn wordt dan 'fhn' in plaats van 'fohn'. Welke versie is beter leesbaar?) Hoe los je dat op?
Daar is een vrij eenvoudige oplossing voor: in plaats van alle tekens die niet voor mogen komen te verwijderen, kun je ze ook herschrijven, zodat ze nog steeds leesbaar blijven. Met onderstaande functie kan dat.
p.s.: plustekens worden bij mij eruit gefilterd. Vervang [plusteken] door een plusteken in de code.
PHP functie
Ik *weet* dat deze functie traag is en dat het sneller kan. Zie voor een snellere variant de suggestie van iermand die zich bezighoudt met aanbiedingen in de comments. Waar het mij om gaat is dat je hier een vrij compleet overzicht ziet. Een voorbeeld. Ter inspiratie.
/*
* sanitize string om als URL te gebruiken
*/
function sanitize($str) {
// afhankelijk van je lezerspubliek kies je een te prefereren vervanging
// bijvoorbeeld: Frans
$str = str_replace(array('À', 'Â', 'à', 'â'), 'a', $str);
$str = str_replace(array('É', 'È', 'Ê', 'Ë', 'é', 'è', 'ê', 'ë'), 'e', $str);
$str = str_replace(array('Î', 'Ï', 'î', 'ï'), 'i', $str);
$str = str_replace(array('Ô', 'ô'), 'o', $str);
$str = str_replace(array('Ù', 'Û', 'ù', 'û'), 'u', $str);
$str = str_replace(array('Ç', 'ç'), 'c', $str);
// Duits
$str = str_replace(array('Ä', 'ä'), 'ae', $str);
$str = str_replace(array('Ö', 'ö'), 'oe', $str);
$str = str_replace(array('Ü', 'ü'), 'ue', $str);
$str = str_replace('ß', 'ss', $str);
// Spaans
$str = str_replace(array('Ñ', 'ñ'), 'n', $str);
$str = str_replace(array('Á', 'á'), 'a', $str);
$str = str_replace(array('Í', 'í'), 'i', $str);
$str = str_replace(array('Ó', 'ó'), 'o', $str);
$str = str_replace(array('Ú', 'ú'), 'u', $str);
// alles wat niet alfanumeriek is eruit filteren, vervangen door spatie
$str = preg_replace('/[^a-z0-9_-]/i', ' ', $str);
// alfanumeriek karakters lowercase maken
$str = strtolower($str);
// spaties vervangen door dash
$str = preg_replace('/\ [plusteken]/', '-', $str);
// teveel dashes vervangen door 1
$str = preg_replace('/\-$/', '', $str);
$str = preg_replace('/^\-/', '', $str);
return $str;
}.NET
Ik kreeg ook nog deze .NET class toegemaild, die ruwweg hetzelfde doet, maar dan in .NET: zie github
Interessant?
Lees dan ook eens meer artikelen over seo, webdesign, ...
Reacties
door Bart, 2011 05 23
Ben je nu ondertussen 't artikel aan 't aanpassen of begin ik dement te worden? :P
door Bart, 2011 05 23
Ik lees nu pas "Voor de programmeurs onder ons". Wat mij betreft, als je voorbeelden geeft, doe 't dan netjes. Mensen die 't willen gebruiken moeten 't of nu zelf refactoren of ze gebruiken deze code zo direct en da's niet netjes :P
Voortaan disclaimers maar bovenaan zetten, dan heb ik niet gelijk de neiging om brakke code te corrigeren :P
door Bart, 2011 05 23
Je site eet m'n code op.
zoiets dus:
$arr = array('b' => 'a', 'a' => 'b', 'e' => 'f');
$str = "bae";
echo $str . "\n";
foreach ($arr as $key => $value)
$str = str_replace($key, $value, $str);
echo $str . "\n";
door Bart, 2011 05 23
Misschien is 't handiger om de waardes die je wilt vervangen in een array te stoppen ze deze zo te vervangen:
'a', 'a' => 'b', 'e' => 'f');
$str = "bae";
echo $str . "\n";
foreach ($arr as $key => $value)
$str = str_replace($key, $value, $str);
echo $str . "\n";
?>
Wat is MONLOG
Sinds 2002 is MONLOG het weblog van Ramon Eijkemans, freelance SEO-gun for hire.
Dit weblog bevat how-to's, mijmeringen, soms wat humor. Het gaat vrijwel altijd over SEO. Ik herhaal geen nieuws. Het doel van dit weblog is om jou van praktische en doordachte informatie te voorzien!
En dan nog dit: guestpostings zijn welkom! Mail me als je je ei kwijt wil op dit goed rankende podium.
Laatste comments
Ola Wilco, long time no speak ;) Notes.app zit ook in iCloud...
21.02.2012 door Ramon Eijkemans op Mac OS X SEO software
Oh, en http://raventools.nl/ werkt niet.. :)
21.02.2012 door Wilco op Mac OS X SEO software
Leuk overzicht! Kende Patterns nog niet dus bedankt! :-)
...
21.02.2012 door Wilco op Mac OS X SEO software
@Aartjan: ik heb hetzelfde met 'lekker kontje' :)...
25.11.2011 door Ramon Eijkemans op Ranken op Banaan
Bij mij is 'banaan' toevallig al jaren het zoekwoord waar ik...
23.11.2011 door Aartjan van Erkel op Ranken op Banaan
Gewoon maken waar vraag naar is. Dat is zo oud als de weg...
22.11.2011 door Thomas op Ranken op Banaan
Een banaan natuurlijk :)
09.11.2011 door Ramon Eijkemans op Ranken op Banaan
In welk tineu zien we jou terug binnenkort?
09.11.2011 door Emiel op Ranken op Banaan
@Simme @Navin proost! :)
07.09.2011 door Ramon Eijkemans op Vakantie!
Zo maak je mij wel erg jaloers :)
05.09.2011 door Navin Poeran op Vakantie!


door Ramon Eijkemans, 2011 05 23
@Bart: deze versie beter? Dit is degene die ik zelf gebruik. Is nog zonder de arrays, maar heel makkelijk uit te breiden en te ordenen, ook voor verschillende talen en zo