Dynamische urls herschrijven voor zoekmachines

Veel content management systemen maken gebruik van dynamische urls zonder zich te bekommeren om de gevolgen hiervan voor de vindbaarheid van de website. Zoekmachines kunnen in veel gevallen niet met dynamische url ´s omgaan. Zelfs zoekmachine Google prefereert statische boven dynamische url ´s. In dit artikel leest u meer over het herschrijven van dynamische url ´s naar statische url ´s op basis van Apache ´s mod_rewrite en .htaccess bestanden.

Apache en het herschrijven van dynamische url ´s voor zoekmachines
Apache is een open source webserver veelal gebruikt in combinatie met MySQL databases en PHP als programmeertaal. Content management systemen gebaseerd op PHP en MySQL databases kennen, evenzoveel als op andere databases en programmertalen gebaseerde CMS-en overigens, veelal het gebruik van dynamische urls.

Apache ´s servermodule mod_rewrite wordt doorgaans gebruikt om deze dynamische url ´s om te bouwen naar statische url ´s. Een voorbeeld:

-------- RewriteRule ^index.html$ homepage.html

"^index.html$" is een reguliere expressie. "^" staat voor het begin en "$" het einde van een string. De punt "." in een reguliere expressie is een meta symbool (wildcard) en kan voor elk willekeurig karakter staan. Indien u een ‘harde’ punt ‘.’ wenst te gebruiken zult u deze vooraf dienen te laten gaan door een backslash. Het volgende voorbeeld is iets ingewikkelder:

RewriteRule ^(.*)/(.*)/(.*)/(.*)$ shop.cgi?$1=$2&$3=$4

Deze regel herschrijft de url: < http://www.uwdomeinnaam.nl/shop.cgi?cat=cars&product=bmw >
naar: < http://www.uwdomeinnaam.nl/cat/cars/product/bmw >

Door deze oplossing kunt u statische urls aanmelden bij de zoekmachines zonder dat de dynamische werking van in dit geval het .cgi script (dat in dit voorbeeld content ophaalt uit een database) verloren gaat. Bovenstaande voorbeelden zijn te gebruiken met de standaardmogelijkheden die mod_rewrite van Apache u biedt.

Herschrijven van urls met verschillende tags naar verschillende webpagina ´s
Het wordt een stuk ingewikkelder als u dynamische url ´s met meerdere tags wenst te herschrijven en redirecten naar verschillende statische url ´s. Onderstaande voorbeelden leggen deze procedure in detail uit.

In dit voorbeeld gaan we uit van een drietal per per click (zoekmachine advertising) campagnes in bijv.Yahoo Search Marketingprecision match programma. In de adminsectie vanYahoo Search Marketingzult u normaliter drie urls definiëren en voorzien van speciale tags. Voorbeelden:

* http://www.uwdomeinnaam.nl/?ov1
* http://www.uwdomeinnaam.nl/?ov2
* http://www.uwdomeinnaam.nl/?ov3

Naast het feit dat we bezoekers willen tracken willen we ook speciale landingspagina ´s instellen voor de bezoekers. Om dit te bewerkstelligen maken we de volgende regels aan in .htaccess:

RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{QUERY_STRING} ^ov1$ RewriteRule ^$ /product1.html [L] RewriteCond %{QUERY_STRING} ^ov2$ RewriteRule ^$ /product2.html [L] RewriteCond %{QUERY_STRING} ^ov3$ RewriteRule ^$ /product3.html [L]

Deze code maakt gebruik van de rewrite condities door de querystring te analyseren, bijvoorbeeld alles na het ‘?’ karakter. De volgende regel:

RewriteCond %{QUERY_STRING} ^ov1$

bestaat uit de onderstaande drie onderdelen:

Directive: "RewriteCond" TestString: "%{QUERY_STRING}" CondPattern: "^ov1$"

TestString is een servervariabele. CondPattern is een reguliere expressie. "^" staat voor het begin en "$" voor het einde van de string. Logischerwijs moet de querystring exact overeenkomen met ‘ov1’ en niets anders. ‘ov11’ zou in dit voorbeeld dan ook niet werken. De volgende regel:

RewriteRule ^$ /product1.html [L]

zal de dynamische url "^$" herschrijven naar de statische url "/product1.html".

De reguliere expressie "^$" komt overeen, als er geen bestandsnaam in de url is opgenomen.Dit is het geval voor de onderstaande url ´s:

http://www.uwdomeinnaam.nl/?ov1 http://www.uwdomeinnaam.nl/?ov2
http://www.uwdomeinnaam.nl/?ov3

Immers, we hebben hier te maken met een url zonder bestandsnaam waarna direct een variabele volgt. Een url als http://www.uwdomeinnaam.nl/page1.html?ov1 zou niet overeenkomen met hetgeen gedefinieerd in de htaccess file. De [L] flag stopt het herschrijven van een url zodra aan en conditie is voldaan.

Kortere url ´s realiseren met Apache ´s mod_rewrite
We kunnen een nog kortere url realiseren als we gebruik maken van de zogenaamde backreferences. Dit gaat als volgt.

RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{QUERY_STRING} ^ov(1)$ [or] RewriteCond %{QUERY_STRING} ^ov(2)$ [or] RewriteCond %{QUERY_STRING} ^ov(3)$ RewriteRule ^$ /product%1.html? [L]

Door de brackets in "ov(1)" toe te voegen zal de waarde binnen de brackets in een variabele worden opgeslagen. Deze variabele kan vervolgens worden hergebruikt voor andere doeleinden.

In het voorgaande voorbeeld (nummer 2) RewriteRule ^(.*)/(.*)/(.*)/(.*)$ shop.cgi?$1=$2&$3=$4 werkten we al met deze backreferences. In dit voorbeeld waren de variabelen "$1", "$2", etc.

Als u gebruik wenst te maken van de variabelen uit een RewriteCond entry in de volgende RewriteRule, dienen de variabelen te voldoen aan de volgende syntax "%1", "%2", etc.

In de expression "/product%1.html?": zal het "?" karakter aan het einde tot gevolg hebben dat de querystring uit de eerste url overgebracht wordt op de nieuwe url. Dit zou de volgende resultaten opleveren:

Oude url: http://www.uwdomeinnaam.nl/?ov1
Nieuwe url: http://www.uwdomeinnaam.nl/product1.html?ov1

Zoals u kunt zien wordt ‘?ov1’ toegevoegd aan de nieuwe url, hetgeen niet wenselijk is. We dienen het vraagteken idealiter dan ook weg te halen.

Dynamische urls herschrijven met Windows IIS
Het bovenstaande gaat over het herschrijven van dynamische url ´s naar statische url ´s met behulp van Apache ´s mod_rewrite module. Indien u geen gebruik maakt van Apache maar bijvoorbeeld IIS op een Windows machine, kunt u het herschrijven van url ´s via IIS ´s beheeromgeving instellen.

Meer informatie over het zoekmachinevriendelijk maken van content management systemen leest u in het artikel "Hoe zoekmachinevriendelijk is uw content management systeem?"

Workshops zoekmachine-optimalisatie en zoekmachine-adverteren
Wilt u zelf aan de slag met zoekmachine-optimalisatie of het adverteren in zoekmachines via advertetnienetwerken als Google Adwords? Schrijf u dan in voor de workshop zoekmachine-optimalisatie of de workshop Google Adwords / zoekmachine-adverteren. Deze interactieve maatwerk workshops worden zowel op basis van open inschrijving als incompany gegeven.