Hi,
ich habe folgende Quelle genutzt um suchmaschinenfreundliche URLs zu erstellen mittels URL-Routing.
URL Routing with ASP.NET 4 Web Forms
Page.GetRoutUrl gibt einem ja anhand von Parametern eine suchmaschinenfreundliche URL zurück. Die Sache ist nur die: Wenn der Parameter Leerzeichen enthält, wird daraus richtigerweise ein "%20" gemacht, damit die Browser damit auch was anfangen können. z.B. seite.de/rotes%20Auto/
Kann ich die URLs aus SEO-Sicht so lassen oder sollte ich selbst noch handanlegen und z.B. Leerzeichen, Sondernzeichen und Umlaute ersetzen, damit die URL "lesbarer" wird? z.B. seite.de/rotes-Auto/ (Leerzeichen durch Bindestrich ersetzt)
Was gefällt Google und Co und dem Benutzer lieber?
In Firefox wird die URL mit Leerzeichen angezeigt in der Adressleiste. In IE9 und Chrome wird der %20-Platzhalter verwendet.
Aus Benutzersicht würde ich die URLs anpassen (fragt sich nur, wie du das anstellen willst - du brauchst ja auch den "Rückweg", damit deine Actions die Parameter verarbeiten können). Also Bindestriche statt Leerzeichen.
Google behandelt Bindestriche wie Leerzeichen. Unterstriche werden allerdings als "richtiger Buchstabe" (nicht als Leerraum) interpretiert.
Salute ravel
Leerzeichen gibt es so nicht in der Url, ausser das korrekt codierte %20 vom IE.
Ich würde - wie es so üblich ist - Bindestriche verwenden um nicht nur Leerzeichen, sondern auch Sonderzeichen (Umlaute, Symbole, ...) Url-freundlich zu machen.
Machen kannst du das einfach gesagt, indem du die Links die generiert werden, sowie das was erwartet wird, durch eine Funktion laufen lässt.
Bspw.:
public static string GetCleanUrl(string dirtyUrl) {
if (dirtyUrl == null)
return String.Empty;
string allowedChars = "abcdefghijklmnopqrstuvwxyz1234567890-_";
dirtyUrl = dirtyUrl.ToLower();
dirtyUrl = dirtyUrl.Replace("\x00e4", "ae");
dirtyUrl = dirtyUrl.Replace("\x00fc", "ue");
dirtyUrl = dirtyUrl.Replace("\x00f6", "oe");
dirtyUrl = dirtyUrl.Replace(" ", "-");
StringBuilder cleanUrl = new StringBuilder();
int i = 0;
int length = dirtyUrl.Length;
while (i < length) {
char c = dirtyUrl[i];
if (allowedChars.IndexOf(c) > -1) {
cleanUrl.Append(c);
}
i++;
}
return cleanUrl.ToString();
}
Das wäre jetzt ein Whitelist-Verfahren, ziemlich simpel aber ausreichend.
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011