Bestaande URLs optimaliseren
Zoals ik er al eerder op hamerde, is het belangrijk om goede keywords in je URL te hebben die aansluiten bij de inhoud van de betreffende URL. Het zaak dat je de links in je websites aanpast zodat overal een geoptimaliseerde URL gebruikt wordt.
Ik zit in de luxe positie dat bij het laden van een webpagina alle data eerst volledig wordt geparsed, en pas als alle data (met succes) is verwerkt wordt deze in 1x ge-output naar de bezoeker. Dit bood mij de mogelijkheid om vlak voor het outputten van deze data alle URLs in de data te analiseren en te optimaliseren.
Wat ik doe is alle URLs opsporen in de data, en deze te vervangen met de geoptimaliseerde versie. Belangrijk is dat we a.d.h.v. de oude URL kunnen bepalen wat de geoptimaliseerde URL zou moeten zijn. Je zou hiervoor bepaalde keys in je QUERY string kunnen opsommen. Maar gezien het doel optimaliseren is, en deze keys mogelijk niet optimaal genoeg zijn, neem ik daar geen genoegen mee.
Ik gebruik (misbruik) daarom 1 key met een vaste naam uit de QUERY string, die ik gereserveerd heb voor dit doel. De naam die ik gebruik is '&seo=' (Search Engine Optimalisation), maar dit kan in principe elke naam zijn. Liefst gebruik je er 1 waarvan je kunt verwachten dat je die nooit ergens anders voor wilt gebruiken. Zo zou je als key misschien ook '&google=' kunnen gebruiken.
Belangrijk om te beseffen is dat deze KEY dus totaal geen verder doel heeft in de URL dan optimalisatie. Het is enkel opgenomen voor het optimaliseren, net als dat je metatags opneemt in je pagina neem je een dergelijk label op in de URL.
Een tag die ik vaak gebruik is 'view'. Deze definieert doorgaans een 'subpagina' binnen een module. Omdat ik de waarde van deze tag interessant acht voor de zoekmachine neem ik deze ook op in de geoptimaliseerde URL (zie code). Merk op dat deze VIEW optioneel moet blijven.
URLs ombouwen ZONDER query optimalisatie
URLs worden omgebouwd zodat ze de volgende structuur krijgen: http://www.domeinnaam.tld/[iets-minder-belangrijke-keywords]/[view].php?querystring
URLs worden als volgt vertaald:
Was: index.php?page=zoeken&view=resultaten&keyword=fiets&seo=belangrijke-trefwoorden
Wordt: http://www.domeinnaam.tld/belangrijke-trefwoorden/resultaten.php?page=zoeken&view=resultaten&keyword=fiets
Was: index.php?page=zoeken&keyword=fiets&seo=belangrijke-trefwoorden
Wordt: http://www.domeinnaam.tld/belangrijke-trefwoorden/?page=zoeken&view=resultaten&keyword=fiets
Was: index.php?page=zoeken&view=resultaten&keyword=fiets
Wordt: http://www.domeinnaam.tld/resultaten.php?page=zoeken&view=resultaten&keyword=fiets
Was: index.php?page=zoeken&keyword=fiets
Wordt: http://www.domeinnaam.tld/?page=zoeken&keyword=fiets
URLs ombouwen MET query optimalisatie
URLs worden omgebouwd zodat ze de volgende structuur krijgen: http://www.domeinnaam.tld/[iets-minder-belangrijke-keywords]/key0/val0/key1/val1/key2/val3/
Merk op dat als het de key 'seo' niet bestaat in de oorspronkelijke URL, deze wordt vervangen door een standaard waarde. Ik gebruik het liefst de ~ (tilde) als NULL karakter, maar je zou hier ook een default waarde kunnen opgeven.
URLs worden als volgt vertaald:
Was: index.php?page=zoeken&view=resultaten&keyword=fiets&seo=belangrijke-trefwoorden
Wordt: http://www.domeinnaam.tld/belangrijke-trefwoorden/page/zoeken/view/resultaten/keyword/fiets/
Was: index.php?page=zoeken&keyword=fiets&seo=belangrijke-trefwoorden
Wordt: http://www.domeinnaam.tld/belangrijke-trefwoorden/page/zoeken/keyword/fiets/
Was: index.php?page=zoeken&view=resultaten&keyword=fiets
Wordt: http://www.domeinnaam.tld/~/page/zoeken/view/resultaten/keyword/fiets/
Was: index.php?page=zoeken&keyword=fiets
Wordt: http://www.domeinnaam.tld/~/page/zoeken/keyword/fiets/
Voor dit alles gebruik ik de volgende code:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Tools to uptimize URL's
function optimizeUrls($sContent, $sDomainRoot = false)
{
$matches = array();
if($sDomainRoot)
{
$expr = '/(?:"' . escapeRegex($sDomainRoot) . 'index\.php(?:[^"]*)")|(?:\'' . escapeRegex($sDomainRoot) . 'index\.php(?:[^\']*)\')|(?:\'index\.php(?:[^\']*)\')|(?:"index\.php(?:[^"]*)")/';
}
else
{
$expr = '/(?:\'index\.php(?:[^\']*)\')|(?:"index\.php(?:[^"]*)")/';
}
preg_match_all($expr, $sContent, $matches);
for($i = 0; $i < sizeof($matches[0]); $i++)
{
$sQuote = substr($matches[0][$i], 0, 1);
$sOldUrl = substr($matches[0][$i], 1, -1);
$sNewUrl = optimizeUrl($sOldUrl, $sDomainRoot, true); // Geef FALSE als de querystring niet geoptimaliseert hoeft te worden
// echo '<b>' . $sOldUrl . '</b><br>' . $sNewUrl . '<br><br><br>';
$sContent = str_replace(($sQuote . $sOldUrl . $sQuote), ($sQuote . $sNewUrl . $sQuote), $sContent);
}
return $sContent;
}
function optimizeUrl($sUrl, $sDomainRoot = false, $bOptimizeQuerystring = true)
{
$sResult = '';
$aArguments = array();
// Strip domain path
if($sDomainRoot)
{
$sResult = $sDomainRoot;
if(strcasecmp(substr($sUrl, 0, strlen($sDomainRoot)), $sDomainRoot) === 0)
{
$sUrl = substr($sUrl, strlen($sDomainRoot)); // Slice domainpath
}
}
// Strip 'index.php?'
$sUrl = substr($sUrl, strlen("index.php?"));
// Get each key/val pair
$args = explode("&", $sUrl);
for($i = 0; $i < sizeof($args); $i++)
{
$arg = explode("=", $args[$i]);
$key = strtolower(trim($arg[0]));
$val = '';
if(sizeof($arg) > 0)
{
$val = trim(urldecode($arg[1]));
}
$aArguments[$key] = $val;
}
if(array_key_exists("seo", $aArguments) && (strcasecmp($aArguments["seo"], "") !== 0))
{
$sResult .= urlencode($aArguments["seo"]) . '/';
}
else
{
if($bOptimizeQuerystring)
{
$sResult .= '~/';
}
}
if($bOptimizeQuerystring)
{
foreach($aArguments AS $key => $val)
{
if((strcasecmp($key, "seo") !== 0) && (strcasecmp($key, "file") !== 0))
{
$sResult .= urlencode($key) . '/' . urlencode($val) . '/';
}
}
if(array_key_exists("file", $aArguments) && (strcasecmp($aArguments["file"], "") !== 0))
{
$sResult .= 'file/' . urlencode($aArguments["file"]);
}
}
else
{
if(array_key_exists("view", $aArguments) && (strcasecmp($aArguments["view"], "") !== 0))
{
$sResult .= urlencode($aArguments["view"]) . '.php';
}
$sResult .= '?';
foreach($aArguments AS $key => $val)
{
if(strcasecmp($key, "seo") !== 0)
{
$sResult .= urlencode($key) . '=' . urlencode($val) . '&';
}
}
$sResult .= substr($sResult, 0, -1); // Strip last '&'.
}
return $sResult;
}
// Escape Regular expression special characters
function escapeRegex($string)
{
// Escape special characters: \/[]()|?^.*+$
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("/", "\\/", $string);
$string = str_replace("[", "\[", $string);
$string = str_replace("]", "]", $string);
$string = str_replace("(", "\(", $string);
$string = str_replace(")", "\)", $string);
$string = str_replace("|", "\|", $string);
$string = str_replace("?", "\?", $string);
$string = str_replace("^", "\^", $string);
$string = str_replace(".", "\.", $string);
$string = str_replace("*", "\*", $string);
$string = str_replace("+", "\+", $string);
$string = str_replace("\$", "\\\$", $string);
return $string;
}
?>
Deze code zoekt alle URLs die voldoen aan de volgende syntax
- "index.php..."
- 'index.php...'
- "domeinroot/index.php..."
- 'domeinroot/index.php...'
Eventueel kun je zelf de optimizeUrl() aanpassen zodat deze nog beter aansluit bij jou wensen. Zo kun je bepaalde keys opnemen die verder naar voren worden geschoven in de url. Leef je uit..
Inhoudsopgave
- Tutorial: URL Optimalisatie voor zoekmachines
- Over zoekmachine optimalisatie
- De basis beginselen van URL optimalisatie
- De 'ideale' URL
- Bestaande URLs optimaliseren
- Geoptimaliseerde URLs vertalen
- Het totaal plaatje