torsdag den 20. december 2012

SEO venlig URL til ASP.NET MVC3 + MVC4


Jeg har jo haft lidt problemer med at nogle af mine links havde problemer når de kom op på serveren.
Fx har jeg en Controller som har Action metoden Index til at vise grundsiden, og stort set alle andre actions er deres egne sider.
Dette er for at opnå strukturen
/UdviklerCV/Kompetencer
/{Controller}/{Action}/

Og selv samme Action har så også mulighed for input til at give denne struktur
/UdviklerCV/Kompetencer/HTML5

/{Controller}/{Action}/{Input}

Åbenbart på grund af dette får jeg en fejl med at når jeg forsøger at linke til /UdviklerCV så bliver linket lavet med /Index på så den ser sådan her ud /UdviklerCV/Index.

Min løsning indtil videre er at selv lave mine URL'er så jeg kan sikre de passer til SEO som jeg ønsker det.

Der skal overholdes dette:
  • Slutte med "/"
  • Ingen "Index/" til sidst
  • Ingen "Index" til sidst
Derfor har jeg lavet min egen lille metode til at hjælpe med det som skal overholde disse regler.

public static string ToFriendlyURL(string urlToEncode)


{

//urlToEncode = (urlToEncode ?? "").Trim().ToLower();

StringBuilder url = new StringBuilder(urlToEncode);

//Fjern "/Index" og "Index" til sidst

if (url.ToString().ToLower().EndsWith("index/")

url.ToString().ToLower().EndsWith("index"))

{

//Check for "/index"

int indexOfText = url.ToString().ToLower().IndexOf("index/");

if (indexOfText >= 0)

url = url.Remove(indexOfText, (url.Length-indexOfText));



//Check for "index"

indexOfText = url.ToString().ToLower().IndexOf("index");

if (indexOfText >= 0)

url = url.Remove(indexOfText, (url.Length-indexOfText));



}



if (!url.ToString().EndsWith("/"))

url.Append("/");



//Replace illegal characters

url = url.Replace("C#", "CSHARP");

url = url.Replace("c#", "csharp");

url = url.Replace("#", "-");

url = url.Replace("&", "-");

url = url.Replace(".", "-"); //er "." dårligt for SEO fordi den tror det bliver extension?

url = url.Replace(" ", "-");



return url.ToString();

}
Bruges sådan her:
PersonalURLHelper.ToFriendlyURL(Url.Action("Index", "EmptyTest"))
//.PersonalURLHelper.ToFriendlyURL(Url.Action("Index", "EmptyTest") + "/InDex/");


Så nu glæder jeg mig til at se om det vil virke når det kommer på produktion også.

Ingen kommentarer:

Send en kommentar

Kan du lide mit indlæg, har en kommentar, forslag eller andet på hjerte så skriv venligst