ASP.NET SEO Dostu Url Yapımı (URL Rewrite with Global asax File)

Merhabalar, size kendi yaptığım .NET sitelerinde kullandığım url rewrite yönteminden bahsedeceğim. URL Rewrite yöntemi web sitelerinizin dinamik içeriğe sahip sayfalarının google tarafından indexlenebilmesi için kullanılan bir yöntemdir. Dinamik sayfanızda eğer parametre olarak değişken gönderiyorsanız .aspx?id=241 yada .aspx?yazi=Q3CZ28FF gibi bunları url içine /seo-dostu-url-241.html içeriğinizi içeren bir url verebiliriz.
Arama motorları için en önemli kriterlerden biri olan url yapılandırması sayesinde web sayfanızda bulunan içerik url gibi farklı bir sayfaymış gibi görünür. Bu sayede sitenizi daha fazla kullanıcıya ulaştırmanız mümkündür. Dilerseniz ASP.NET ile bir uygulama yapalım .

Öncelikle Visual studio ile bir web uygulaması açıyoruz. açtığımız uygulamaya Default.aspx sayfasının yanına urunler.aspx adlı başka bir sayfa daha ekliyoruz. urunler.aspx sayfamıza Default.aspx sayfamızdan veri göndermek için aşağıdaki kodları sayfamıza oluşturuyoruz.

<a href="/administrator/urunler.aspx?id=1">Visual Studio C#</a>
<a href="/administrator/urunler.aspx?id=2">Microsoft SQL Server</a>
<a href="/administrator/urunler.aspx?id=3">ASP.NET Dersleri Kitabı</a>
<a href="/administrator/urunler.aspx?id=4">PHP ve MYSQL Dersleri</a>
<a href="/administrator/urunler.aspx?id=5">Microsoft Office Kullanım Klavuzu</a>

Bu şekilde birkaç link oluşturduk. Amaç mantığı anlayabilmek. Şimdi de urunler.aspx sayfamıza gidip gelen değerlere göre işlem yapalım. 

<%
if (Request.QueryString["id"] != null)
{   
if(Convert.ToInt32(Request.QueryString["id"]) == 1)
{
Response.Write("Visual Studio C#");
}
else if(Convert.ToInt32(Request.QueryString["id"]) == 2)
{
Response.Write("Microsoft SQL Server");
}
else if(Convert.ToInt32(Request.QueryString["id"]) == 3)
{
Response.Write("ASP.NET Dersleri Kitabı");
}
else if(Convert.ToInt32(Request.QueryString["id"]) == 4)
{
Response.Write("PHP ve MYSQL Dersleri");
}
else if(Convert.ToInt32(Request.QueryString["id"]) == 5)
{
Response.Write("Microsoft Office Kullanım Klavuzu");
}
}
%>

 

Evet id değişkeni ile gelen değere göre işlemler yaptık. Bunu veritabanı ile de yapabilirsiniz.  Şimdi de bu işlemleri bir de url rewrite ile yapalım. urunler.aspx sayfamızda bir şey yapmamıza gerek yok. Default.aspx sayfasında bulunan linklerimizi elden geçirmemiz gerekmekte. Linkler için ben şöyle bir fonksiyon kullanıyorum.







public string urlolustur(string id, string urun_adi)
{
string temp = "";
temp = urun_adi.ToLower();
temp = temp.Replace("-", "");
temp = temp.Replace(" ", "-");
temp = temp.Replace("ı", "i");
temp = temp.Replace("ö", "o");
temp = temp.Replace("ü", "u");
temp = temp.Replace("ç", "c");
temp = temp.Replace("ğ", "g");
temp = temp.Replace("'", "");
temp = temp.Replace("&", "-and-");
temp = temp.Replace("ş", "s");
temp = temp.Replace("#", "sharp");
return temp + "-" +id +".html";
}

bu fonksiyona gönderdiğimiz değer ile bizim ürün adımız url formatına uygun bir şekle dönüşecektir. Bu fonksiyonu Default.aspx.cs içine yazdıktan sonra Default.aspx sayfamızdaki linkleri de fonksiyon ile seo ya uygun hale getiriyoruz. Linkelerimizin son hali aşağıdaki gibidir.

<a href="<%# urlolustur("1","Visual Studio C#")%>"></a>
<a href="<%# urlolustur("2","Microsoft SQL Server")%>"></a>
<a href="<%# urlolustur("3","ASP.NET Dersleri Kitabı")%>"></a>
<a href="<%# urlolustur("4","PHP ve MYSQL Dersleri")%>"></a>
<a href="<%# urlolustur("5","Microsoft Office Kullanım Klavuzu")%>"></a>

Bu şekilde sayfamızdan Code sayfasına erişip fonksiyonu kullanmış oluyoruz. Bu işlemin çalışabilmesi için Page load kısmına aşağıdaki kodun yazılması gerekmektedir. 

protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}

bu işlemden sonra sayfamızdaki linkler seoya göre oluşturulmuş oldu. artık Visual Studio C# linkine geldiğinde adres olarak visual-studio-csharp-1.html adresine yönlenecektir. Şimdi sistemimizin visual-studio-csharp-1.html adresine gelindiğinde nasıl bir çözümleme yapması gerektiğini anlatmamız gerekmektedir. Bunun için önceliklik olarak uygulamamamız bir adet Global application class sayfası eklememiz gerekmektedir. Eğer empty project seçmediyseniz zaten Global.asax otomatik olarak dizininize gelecektir.

Sonraki hareket olarak global.asax içine Application_BeginRequest eventı altına aşağıdaki kodları yazıyoruz.

protected void Application_BeginRequest(object sender, EventArgs e)
{
string adres = Request.RawUrl; //url yi aldık
if (System.IO.Path.GetExtension(adres) == ".html") // eğer url adresi html ise işlem yap arama motorları html dosyaları sever
{
string[] parcalar = System.IO.Path.GetFileNameWithoutExtension(adres).Split('-'); //uzantı olmadan adresi parçalara ayır.
if (parcalar.Length > 1)
{
int dizi_uzunluk = parcalar.Length; // adres kaç parçadan oluşuyor
Context.RewritePath("~/urunler.aspx", "", "id=" + parcalar[dizi_uzunluk-1], true);  //urunler.aspx içine id olarak son elemanı gönder.
}
}
}

Bu kodlar en basitinden bize bir url rewrite yapmayı gösterdi . Kendiniz algoritma yeteneğiniz ile istediğiniz şekilde url parçaları oluşturabilirsiniz.

17562

(22) Yorum

Güzel anlatımınız için teşekkürler Peki urunler.aspx i sayfasında url deki id yi nasıl çekiyoruz ?

01/01/2015 00:00Cevapla

Merhaba, id yi çekmek için get metodunu kullanmanız yeterli. Sayfa içerisinde int id = Request.QueryString["id"] ile verinizi alabilirsiniz. Tabi bunu mu sordunuz onu tam anlayamadım.

01/01/2015 00:00Cevapla

Seo konusunda çok faydalı bir teknik olmuş ne zamandır bunu yapmayı araştırıyordum çok teşekkürler sizin sayenizde yapabildim gerçekten çok teşekkürler.

01/01/2015 00:00Cevapla

Kodlama bilmeyenler için daha kolay bir yöntem yok mu

01/01/2015 00:00Cevapla

Merhaba, asp.net ile url rewrite işlemini bu ve bunun gibi birkaç şekilde çözümleyebiliriz. Fakat kodlama bilmeyenler için zaten bu yöntemi kullanmak ekstrem bir durum. Yine de daha detaylı anlatabilirseniz yardımcı olmaya çalışırım.

01/01/2015 00:00Cevapla

aynısını yaptım ancak, HTTP Hatası 404.0 - Not Found Aradığınız kaynak kaldırılmış, adı değiştirilmiş ya da geçici olarak kullanım dışı. hatası alıyorum yardımcı olur musunuz.

01/01/2015 00:00Cevapla

url için yukarıdaki mantığa benzer bir url yönlendirme uyguluyorum fakat bir önceki sayfaya geri dönmek istediğimizde bazen hata mesajları çıkıyor. sizin makalenizdeki ni en kısa zamanda denemek isriyorum.. makaleniz için teşekkürler

01/01/2015 00:00Cevapla

Localhost'da HTTP Error 404.0 - Not Found hatası veriyor. IIS yüzünden mi kaynaklanıyor acaba ?

01/01/2015 00:00Cevapla

Merhaba, eğer web siteniz localhost üzerinde çalışabiliyorsa (aspx) bu sorunun nedeni IIS değildir. Global.asax yönlendirmeleri ile yaptığınız yönlendirmeleri kontrol edin. Büyük ihtimal sorun oradadır. Global.asax ile yönlendirdiğiniz sayfa bulunamıyordur. Veya Global.asaxı hiç kullanmamışsınızdır.

01/01/2015 00:00Cevapla

Yukarıda yapılanların aynısını yaptım Global.asax kullanmamam söz konu değil. herşeyi ile aynı ama 404 hatası alıyorum.

01/01/2015 00:00Cevapla

Hepsini harfien yaptım ama çalışmadı neden olmuş olabilir? Normal localhost'ta çalışıyor ama host'a atınca çalışmıyor.

01/01/2015 00:00Cevapla

merhaba ben çalıştırdım ama farklı bir sıkıntı doğru. global.asax url yi farklı bir klasörde gösterdiği için. resimler gözükmüyor bunu nasıl çözeriz. örnek: www.domainadi.com/sanalKlasorAdi/burasi-url-roting.aspx resimler yok :(

01/01/2015 00:00Cevapla

teşekkür ederim. çok işime yaradı.

01/01/2015 00:00Cevapla

çok işime yaradı. şimdi ben burada sonundaki .html leri kaldırıp kendim u7 şeklindebiterek de yapabiliyorum. çok sağolun hocam.

01/01/2015 00:00Cevapla

Hocam visual studio 2010 da gloabal asax cs neden yok

01/01/2015 00:00Cevapla

Merhaba, visual studio'da eğer bir web application açtıysanız global.asax da onunla birlikte gelir. Eğer açtığınız şey bir empty web application ise global.asax ı kendiniz eklemeniz gerekir. Eğer global.asax'ı bir kere eklediyseniz ya da otomatik eklendiyse bir daha eklenemez silinmesi gerekir. Solution Explorer kısmından kontrol ederseniz orada global.asax'ı görmeniz lazım.

01/01/2015 00:00Cevapla

aspnet ile yaptığım siteler hep google'da alt sıralarda çıkıyordu. Seo urlyi de yapamıyordum. Sizin sayfanız denk gelmiştim googleda ararken şimdi googledan az çok gelen oluyor siteme. Gerçekten teşekkür ederim.

01/01/2015 00:00Cevapla

Bende buradaki işlem sayesinde baya trafik çekmeye başladım. sağolasın hocam.

01/01/2015 00:00Cevapla

Merhaba.Peki bu olayı sadece ürünler için değilde katgori ve diğer sayfalar içinde kullandığımızı varsayarsak ne yapmamız lazım.Örneğin --Ürünler --Kategoriler --Sayfalar isiminde 3 adet sayfamız ve hepsine aynı işlemi uygulamak istiyoruz.Buna ilaveten sayfamız Türkçe/İngilizce/Almaca kodları nasıl düzenlemek gerekir ? Teşekkürler..

01/01/2015 00:00Cevapla

Merhaba, bununla ilgili bir güncelleme yayınlayacağım. Sizi bilgilendiririm yayınladığımda. İyi günler.

01/01/2015 00:00Cevapla

Merhaba! öncelikle yazınızdan dolayı teşekkürler, kodları kendime göre uyarlayarak localde sorunsuz çalıştırdım fakat hostingde bir türlü çalıştıramadım Hostin olarak godaddy de paylaşımlı bir hosting kullanıyorum. Global.asax daki dosya ismi kısmına dikkat ediyorum doğru yazdığımı düşünüyorum fakat 404 hatası veriyor neden olabilir?

01/01/2015 00:00Cevapla

Merhaba, ben de godaddy kullanıyorum. Aspnet ayarları ile ilgili bir durum olabilir. Aspnet versiyonu (.net framework,classic-integrated) gibi ayarları bir deneyin. Bir de default web language c# yapın. Sorun tamamen hosting ayarları ile ilgili ve çözülebilir .

01/01/2015 00:00Cevapla

Yorumlar