Url Rewriting - Arama motoru dostu sayfa isimleri

Tarih 14 Ocak 2010 Perşembe, 01:52 | Etiket(ler) Asp.Net, SEO

Yine merhaba, bugünlerde teknik yazı yazma aşkıyla doldum ve yeni bir yazıyla karşınızdayım. Bu sefer hepimizin kulağının aşina olduğu fakat değişik metodları bulunan Url Rewriting konusunda bir yazı yazı hazırladım. Web üzerinde şöyle bir araştırma yaptığınızda konu üzerine yazılmış oldukça güzel makaleler mevcut. Ben kendi uyguladığım yöntemi anlatmak istiyorum. Peki neden Url Rewriting tekniği kullanmalısınız ? Herşeyden önce kullanıcıların aklında kalacak adresler oluşturmak ve arama motorları tarafından daha iyi indexlenmek fikri bile yeterli. Url Rewriting'i aslında siteniz üzerinde var olmayan bir adresi, fiziksel olarak başka bir dosyaya yönlendirmek olarak basitçe tanımlayabiliriz. Ben http://www.urlrewriting.net/ adresinde ikamet eden kütüphaneyi kullanmayı tercih ediyorum.

Hemen örneğimize geçelim ve işe bu adresteki UrlRewritingNet_20.zip dosyasını indirerek başlayalım. İndirdiğiniz zip dosyasını açın ve içinden çıkan UrlRewritingNet.UrlRewriter.dll dosyasını Bin dizinimize kopyalayalım ve referans olarak projemize dahil edelim. Aynı zamanda zip dosyasının içinde güzel bir yardım dökümanı da mevcut.

İkinci etapta web.config dosyamızda yapmamız gereken ayarlamalardan başlayalım. <configSections> altına ekleyelim.
<configSections>>
<section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
</configSection>
<system.web> node'u altında bulunan <httpModules> node'una şunu ekleyelim ve httpModule olarak tanıtalım.
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
Web.config dosyamıza sonra geri dönmek üzere kaydedelim. Adreslerimizi oluşturmak için kullanacağımız bir class oluşturup aşağıdaki fonksiyonu ekleyelim.
Public Shared Function AD(ByVal gelen As String) As String
    gelen = gelen.Replace("'", "")
    gelen = gelen.Replace(""", "")
    gelen = gelen.Replace("&", "")
    gelen = gelen.Replace("<", "")
    gelen = gelen.Replace(">", "")
    gelen = gelen.Replace("<br />", "")
    gelen = gelen.Replace("«", "")
    gelen = gelen.Replace("»", "")
    gelen = gelen.Replace("ç", "c")
    gelen = gelen.Replace("ö", "o")
    gelen = gelen.Replace("ğ", "g")
    gelen = gelen.Replace("ü", "u")
    gelen = gelen.Replace("ş", "s")
    gelen = gelen.Replace("ı", "i")
    gelen = gelen.Replace("Ç", "C")
    gelen = gelen.Replace("Ö", "O")
    gelen = gelen.Replace("Ğ", "G")
    gelen = gelen.Replace("Ü", "U")
    gelen = gelen.Replace("Ş", "S")
    gelen = gelen.Replace("İ", "I")
    gelen = gelen.Replace("é", "e")
    gelen = gelen.Replace(":", "")
    gelen = gelen.Replace(";", "")
    gelen = gelen.Replace(".", "")
    gelen = gelen.Replace(",", "")
    gelen = gelen.Replace("'", "")
    gelen = gelen.Replace(Chr(34), "")
    gelen = gelen.Replace("^", "")
    gelen = gelen.Replace("#", "")
    gelen = gelen.Replace("+", "")
    gelen = gelen.Replace("$", "")
    gelen = gelen.Replace("%", "")
    gelen = gelen.Replace("/", "")
    gelen = gelen.Replace("{", "")
    gelen = gelen.Replace("}", "")
    gelen = gelen.Replace("(", "")
    gelen = gelen.Replace(")", "")
    gelen = gelen.Replace("[", "")
    gelen = gelen.Replace("]", "")
    gelen = gelen.Replace("=", "")
    gelen = gelen.Replace("!", "")
    gelen = gelen.Replace("?", "")
    gelen = gelen.Replace("*", "")
    gelen = gelen.Replace("_", "-")
    gelen = gelen.Replace("@", "")
    gelen = gelen.Replace("€", "")
    gelen = gelen.Replace("~", "")
    gelen = gelen.Replace("<", "")
    gelen = gelen.Replace(">", "")
    gelen = gelen.Replace("|", "")
    gelen = gelen.Replace("&", "")
    gelen = gelen.Replace(" ", "-")
    gelen = gelen.Replace("----", "-")
    gelen = gelen.Replace("---", "-")
    gelen = gelen.Replace("--", "-")
    gelen = Left(gelen, 200)
    Dim uzunluk As Integer = Len(gelen)
    If Right(gelen, 1) = "-" Then
        gelen = Left(gelen, uzunluk - 1)
    End If
    gelen = gelen + ".aspx"
    Return gelen
End Function
Son olarak adreslerimizi nereye yönlendireceğimizi ayarlamak için web.config dosyamıza geri dönelim ve </system.web> bitiminden hemen sonra şöyle bir ayarlama yapalım.
<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="default.aspx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
    <rewrites>
      <add name="Yonlendirme"
      virtualUrl="^~/Icerik/(.*)/(.*).aspx"
      rewriteUrlParameter="ExcludeFromClientQueryString"
      destinationUrl="~/Icerik.aspx?ID=$1&Sayfa=$2"
      ignoreCase="true" />
    </rewrites>
</urlrewritingnet>
En can alıcı noktamız buydu. Gördüğünüz gibi Icerik/***/***.aspx gibi gelen bir isteği Icerik.aspx?ID=*** adresine yönlendir gibi bir desen kullandık. Desenimizdeki (.*) lar gelecek olan dinamik değişkenleri tanımlamamızı sağlıyorlar. İlk (.*) ID değerini simgelediği için $1 olarak, ikincisi ise sanal dosyamızın adını temsil edeceği için $2 olarak tanımlandılar. Daha fazla dinamik değişken tanımlamak sizin elinizde sırasıyla $1, $2, $3, $4 olarak bu parametreleri alabilirsiniz. Bu işlem Icerik.aspx?ID=12 şeklindeki bir linki Icerik/12/Dosyamin-ismi-bu.aspx gibi bir linke çevirmemize yardımcı olacak. Gelelim kullanımına

Default.aspx dosyamıza şu kodları :
Gerçek link : <a href="Icerik.aspx?ID=12&Sayfa=Dosyamın ismi bu">Icerik.aspx?ID=12&Sayfa=Dosyamın ismi bu</a>
<br /><br />
Yönlendirme yapılmış link : <a href="Icerik/12/<%=AD("Dosyamın ismi bu")%>">Icerik/12/<%=AD("Dosyamın ismi bu")%></a>
Icerik.aspx dosyamıza şu kodları yapıştıralım :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ID As String = Request.QueryString("ID")
    Dim Sayfa As String = Request.QueryString("Sayfa")
    Response.Write("Gelen ID Değeri : " & ID & "")
    Response.Write("<br />")
    Response.Write("Gelen Sayfa değeri : " & Sayfa & "")
End Sub
Ve projemizi çalıştıralım. Artık kullanıcı ve arama motoru dostu linklerimiz var. Burada dikkat etmemiz son nokta sayfalarımızı sanki bir klasör içindeymiş gibi çağırdığımızda imaj ve linklerimizin adreslerini verirken http://www.sitenizinadresi.com/imajklasorunuz/imaj.jpg gibi vermek. Aksi halde o klasör içerisinde link ve imajlarınızı arayacaktır ve bulamayacaktır.

Projenin çalışan halini buradan indirebilirsiniz



Yorumlar

Tarih 17 Eylül 2010 Cuma, 18:34 | Yazan Cenk SARI

Teşekkürler Emre,

tabii ki göstermeyebilirsin. Veritabanına "seo-url" diye bir alan oluşturup makalenin adını AD fonksiyonu ile dönüştürüp "makale-adi" seklinde girersin, gelen sayfa değerini bu alan ile karşılaştırsın. Fakat bu durumda makale adı herhangi bir şekilde aynı olursa sadece birini gösterir.

Tarih 17 Eylül 2010 Cuma, 15:28 | Yazan Emre SULAR

Merhaba cenk makalen çok iyi klavyene rahmet:)) Fakat bir şey sorucam
ordaki linkte icerik/12/makale-adi.aspx görünüyor orda id değerini göstermeyebilirmiyiz? yani icerik/makale-adi.aspx gibi ben denedim herhangi bir hata vermedi ama id değerini $12 gibi gösterdi servera attığımız da bir sorun oluşurmu bu durumdan dolayı ?

Tarih 21 Ocak 2010 Perşembe, 22:06 | Yazan Selman Mert

MVC nin gözünü seveyim. Bildiğim kadarıyla bu işler Framework 4.0 ile çok daha kolaylaşacakmış.
Yorum yazın

Capthca Karakterleri kutuya giriniz
Kodu değiştir...


Geri Dön   |   Ana Sayfaya Dön