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

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

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 koddan sonra programı derledğimizde link ayrıştırmasını aşağıdaki resimdeki gibi yapmaktadır. 

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

13875 Görüntülenme sayısı
  1. Yorum Icon
    8/26/2017 5:26:26 AM#1Erdal

    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?

    Yorumu Cevapla
    • Yorum Icon
      8/26/2017 11:24:42 PMEnder Ariç

      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 .

  2. Yorum Icon
    6/11/2017 1:40:11 AM#2sshneo

    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..

    Yorumu Cevapla
    • Yorum Icon
      6/13/2017 9:14:56 PMEnder Ariç

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

  3. Yorum Icon
    4/4/2017 11:01:18 PM#3mehmet

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

    Yorumu Cevapla
    • Yorum Icon
      4/4/2017 11:03:48 PMENDER ARİÇ

      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.

  4. Yorum Icon
    4/4/2017 10:48:15 PM#4mehmet

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

    Yorumu Cevapla
  5. Yorum Icon
    12/31/2016 4:40:13 PM#5Ayfer Yazıcıoğlu

    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.

    Yorumu Cevapla
  6. Yorum Icon
    6/3/2016 4:22:50 PM#6Enes Akdemir

    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.

    Yorumu Cevapla
    • Yorum Icon
      8/2/2016 12:51:39 AMMetin Web Seo

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

  7. Yorum Icon
    5/13/2016 1:10:35 AM#7emin çolasan

    Hocam visual studio 2010 da gloabal asax cs neden yok

    Yorumu Cevapla
    • Yorum Icon
      5/23/2016 2:03:08 PMEnder Ariç

      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.

  8. Yorum Icon
    4/11/2016 4:50:44 PM#8muhammed topark

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

    Yorumu Cevapla
  9. Yorum Icon
    3/29/2016 10:04:51 AM#9adem gürbüz

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

    Yorumu Cevapla
  10. Yorum Icon
    2/7/2016 12:50:36 PM#10Eren

    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 :(

    Yorumu Cevapla
  11. Yorum Icon
    1/9/2016 7:46:54 AM#11Ayhan Keskin

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

    Yorumu Cevapla
  12. Yorum Icon
    9/3/2015 1:20:22 AM#12Hakan Can

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

    Yorumu Cevapla
    • Yorum Icon
      9/5/2015 3:05:26 AMEnder Ariç

      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.

    • Yorum Icon
      9/6/2015 3:08:01 AMHakan Can

      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.

  13. Yorum Icon
    7/19/2015 1:58:26 AM#13Beyhan Oğur

    Kodunuz da eksik var Asp Taglarini Kapatmamissiniz ayrica urlolstur 2 adet deger istiyor id ve urunadi saniyorum kod eksik kopyala yapistir yapilmis kodun dogrusunu verirseni cok faydali olacak. Teşekkurler ">Visual Studio C# ">Microsoft SQL Server ">ASP.NET Dersleri Kitabı ">PHP ve MYSQL Dersleri ">Microsoft Office Kullanım Klavuzu

    Yorumu Cevapla
    • Yorum Icon
      7/21/2015 11:58:20 AMEnder Ariç

      Değerli yorumunuz için teşekkür ederim. Gerekli düzenlemeler yapılmıştır.

  14. Yorum Icon
    7/18/2015 11:22:54 AM#14Ümit Uslucan

    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

    Yorumu Cevapla
  15. Yorum Icon
    7/16/2015 2:02:01 AM#15ahmetakin@msn.com

    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.

    Yorumu Cevapla
    • Yorum Icon
      7/16/2015 3:20:50 AMEnder Ariç

      Merhaba, http://enderaric.com/natro-hosting-url-yonlendirme-sorunu-(global-asax)-t73 adresinde natro hostingdeki sorun için bir çözüm yayınladım. iyi günler.

  16. Yorum Icon
    4/14/2015 3:42:25 AM#16Ayhan Çeken

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

    Yorumu Cevapla
    • Yorum Icon
      4/15/2015 9:21:13 AMEnder Ariç

      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.

BİR YORUM YAZIN

Bilgileriniz Güvende!E-Posta adresiniz ve diğer bilgileriniz kimseyle paylaşılmayacaktır.