Merhabalar bu yazımızda asp.net url routing ile arama motoru dostu url yapıları oluşturmaya çalışacağız. Öncelikle url routing neden gerekli ondan bahsedelim. Yapılan araştırmalara göre sitenizi ziyaret eden kişilerin %90’ını, sitenize arama motorları yönlendirir. Bu yüzden arama motorlarında üst sıralarda olmak demek, sitenize çekeceğiniz kitlenin artması demektir. Eğer arama motorlarında üst sıralarda olmak istiyorsanız arama motoru optimizasyonunu yani SEO’yu iyi bilmek gerekir. Tabi üst sıralara çıkmak için birçok parametre mevcuttur fakat bugünkü konumuz url routing SEO’nun önemli bileşenlerinden biridir. Sitenize giren kişiler için adres çubuğunda yazan adresin önemi olmasa da, arama motorları için bu adres içinde geçen kelimeler sizi üst sıralara taşımada önemli rol oynar.
Aşağıda url routing yapılmış ve yapılmamış 2 adet adres çubuğu görünmektedir. İnceleyerek aradaki farkı görebilirsiniz.
Biz örneğimizi yemek tariflerinin yer aldığı bir site üzerinden anlatmaya çalışalım. Web sitemize öncelikle Add New Item diyerek global.asax dosyasını ekleyelim.
Dosya üzerinde aşağıdaki değişiklikleri yapalım. Url yapımızın nasıl olacağı kodların içindeki açıklama satırlarında yer alıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void Application_Start(object sender, EventArgs e) { RegisterRoutes(System.Web.Routing.RouteTable.Routes); } public void RegisterRoutes(System.Web.Routing.RouteCollection routes) { // Url yapımız şu şekilde olacak site.com/Tarifler/tarif-adi/{tarifid} // Bu yapıyla gelen hertürlü adresi Tarifdetay.aspx sayfamıza yönlendireceğiz. routes.MapPageRoute("MakaleRoute", "Tarifler/{tarifadi}/{tarifid}", "~/Tarifdetay.aspx"); } |
Global.asax dosyasını kaydedip kapatıyoruz.
Örneğimiz için en az 2 adet web formumuz olması gerekiyor.Birinci sayfamız Default.aspx anasayfamız diğeride yukarıdaki koddan anlaşılacağı üzere TarifDetay.aspx sayfamız.
Anasayfamızda veritabanından çektiğimiz tarifleri listemek için Listview, Gridview, Datalist gibi nesneler bulunabilir. Hangisinin bulunduğu önemli değil biz linkimizin bulunacağı Label’ı kaldırıp yerine Hyperlink ekliyoruz ve aşağıdaki gibi Hyperlink’i düzenliyoruz.
1 |
<asp:HyperLink ID="Label5" runat="server" NavigateUrl='<%# String.Format("~/Tarifler/{0}/{1}",KodOlustur(Eval("tarifadi").ToString()),Eval("tarifid").ToString()) %>' ><%# Eval("tarifadi") %></asp:HyperLink> |
Yukarıdaki kodu dikkatle inceleyin işin püf noktası bu kısımda.
Navigate Url Kısmında KodOlustur isminde bir fonksiyonumuz yer alıyor. Bu fonksiyon url içerisinde yer alan Türkçe karakterleri değiştiriyor ve boşluk karakterinin yerine – koyarak url yapımızı düzenliyor.
Kod oluştur fonksiyonumuzu Default.aspx.cs dosyamızın içerisine Form_Load event’ inden sonra ki kısma ekleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#region "Kod Oluştur" public static string KodOlustur(string Text) { try { string strReturn = Text.Trim(); strReturn = strReturn.Replace("ğ", "g"); strReturn = strReturn.Replace("Ğ", "G"); strReturn = strReturn.Replace("ü", "u"); strReturn = strReturn.Replace("Ü", "U"); strReturn = strReturn.Replace("ş", "s"); strReturn = strReturn.Replace("Ş", "S"); strReturn = strReturn.Replace("ı", "i"); strReturn = strReturn.Replace("İ", "I"); strReturn = strReturn.Replace("ö", "o"); strReturn = strReturn.Replace("Ö", "O"); strReturn = strReturn.Replace("ç", "c"); strReturn = strReturn.Replace("Ç", "C"); strReturn = strReturn.Replace("-", "+"); strReturn = strReturn.Replace(" ", "+"); strReturn = strReturn.Trim(); strReturn = new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9+]").Replace(strReturn, ""); strReturn = strReturn.Trim(); strReturn = strReturn.Replace("+", "-"); return strReturn; } catch (Exception ex) { throw ex; } } #endregion |
Şimdi ise yönlendirilen Tarifdetay sayfasında url ile gelen bilgiyi almakta. Sonrasını zaten biliyorsunuz sorgular vasıtasıyla veritabanından istenilen verilere ulaşabileceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (RouteData.Values["tarifid"] != null) { secim = RouteData.Values["tarifid"].ToString(); string komut = "select * from tarifler where tarifid='" + secim + "'"; string[] veri = vtislemleri.SatirCek(komut); //.....Devam eden kodlar } } } |
İlk bakıldığında karışık gibi gelebilir ama sayfanızın arama motorlarında üst sıralara çıkabilmesi için gerekli olan url routing işlemini en basit şekliyle anlatmaya çalıştım. Kolay gelsin.
Abi sitemde (CS0103: The name ‘KodOlustur’ does not exist in the current context) hata var nedir acaba çözümü?
Yukarıda belirttiğim Kod Oluştur fonksiyonunu aspx.cs uzantılı dosya içerisine ekleyin, sorun çözülecektir. Kolay gelsin.
hocam son olayı anlamadım tam olarak son resimde ne olcak biraz daha açık anlatabilirmisiniz
Son kod bloğunda linke tıklandıktan sonra yönlendirilen sayfada çalışacak kodlar var. Yemektarif sitesinde yüzlerce yemek tarifi bulunmaktadır. Bu tarifleri göstermek için ise tekbir sayfa (Tarifdetay.aspx) sayfası bulunuyor. Tarifdetay.aspx sayfası hangi tarifi göstereceğini ise linke tıkladığımızda ki site.com/Tarifler/tarif-adi/{tarifid} şeklindeki bağlantıda, tarifid verisine göre tarifi veritabanından sorgulayarak kullanıcıya gösteriyor.
Saolun hocam yaptım şimdi bu işlemden sonra bunları sitemap.xml klasörüne uygun bi şekilde atmak kaldı eğer böyle bir makale yazarsanız süper olur teşekkürler
bu sistem ile url lerde görüntü çirkinliği kaybolmuş oluyor ve arama motorunda üste çıkmak için çok faydası görülmektedir
Hocam, adres yapısı doğru şekilde çalışıyor ama sitenin tasarımı patladı. Css ve jquery dosya yollarını bulamıyor url yapısı değiştiği için. Onu nasıl düzeltiriz?
hoca ben bunu ürünler için kullandım ama yardımınza ihtiyacım var
ana sayfadan urunId ile gönderiyoruz urun sayfasına tamam burada sorun yok urun sayfası açılıyor lik istediğimiz gibi ama
Incorrect syntax near ‘=’. (SELECT dbo.Urunler.* FROM dbo.Urunler Where UrunId=)
böyle bir hata alıyorum düzeltemedim bir türlü
birde urunId ile çekmeden denedim önce resimlerin adı ve yolu görünüyor ama resimler çıkmıyor
repeater ile çekiyorum yardımcı olabilirseniz çok iyi olur hocam
Bunu uygularken css ve resim hatası alanlar dosyaların başına ‘/’ (tırnak işaretlerini silin) işaretini getirin sorununuz düzelecektir
hocam kodu uyguladım fakat veri tabanında şu hatayı veriyor
Gerekli bir veya daha fazla parametre için girilen değer yok.
yardımcı olursanız sevinirim.
sayfadaki dropdownlist1de seçim yaptığında seçim yaptığım verinin ID sine eşit seo addındaki taplodaki veriyi çekip adres çubuğuna yazdırmak istiyorum bunun kodunu paylaşmanız mümkünmü acaba.
Incorrect syntax near ‘=’.
hatası bir turlu çözemedım :S:S
Merhaba öncelikle çok teşekkürler çok yararlı oldu ayrıca bir sorum olacak. /Default.aspx yerine /Anasayfa yazılması için
routes.MapPageRoute(“”, “Anasayfa”, “~/Default.aspx”);
kodunu deniyorum ama işe yaramıyor bu konuda yardımcı olabilir misiniz?
tem bende calışıyor fakat şöyle bir sorun var localhost:12342/ürün/3/nike ürün id ve adını böyle alabiliyorum fakat açılan sayfada ürünüm var ürüne tıkalyınca şöyle bir şey oluyor localhost:12342/ürün/3/nikealtürünler/8 urlenin yanına url ekliyor bunun sebebi nedir nasıl düzelte bilirim norlmalde olması gereken localhost:12342/nikealtürünler/8 değil mi ?