Veysel Uğur KIZMAZ

Asp.Net FriendlyUrl ile SEO Uyumlu Link Oluşturma

03.06.2013Okunma Sayısı: 17402Kategori: ASP.NET

Asp.Net ile klasik URL Routing ve URL Rewrite ile SEO dostu link oluşturma işlemini gerçekleştirebiliyorduk. Bu işlemi Microsoft’un Asp.Net 4.0 ve 4.5 versiyonlarını destekleyen FriendlyURL kütüphanesini (Microsoft.AspNet.FriendlyUrls) kullanarak da gerçekleştirebiliriz.

Bu kütüphene ile örneğin

  • http://localhost:60380/Hakkimizda.aspx sayfasına artık http://localhost:60380/Hakkimizda linki ile erişebileceğiz.
  • http://localhost:60380/Urun.aspx?id=1 ürününe http://localhost:60380/Urun/Urun1 linki ile erişebileceğiz.

Bu işlem için web projeniz ya da web sitenizin solution’ına NuGet ile Microsoft Asp.Net Friendly URLs’i kurmanız gerekmektedir.

Kurulum işlemi tamamlandıktan sonra paket, App_Code > App_Start > RouteConfig.cs sınıfını oluşturuyor. Bu sınıf içerisinde SEO dostu URL oluşturma işlemi enable olarak tanımlanıyor (routes.EnableFriendlyUrls).

using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;
namespace ASP
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.EnableFriendlyUrls();
        }
    }
}

Route ayarlarının uygulama tarafından çalıştırılabilmesi için Global.asax’ta uygulama başladığında (Application_Start) tanımlamasını yapalım.

Global.asax

void Application_Start(object sender, EventArgs e)
{
    RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}

Yaptığımız işlemlerin uygulamamızı nasıl etkileyeceğini inceleyelim. Bu işlem için bir adet Master Page ve 4 adet sayfa ekleyelim:

  • MasterPage.master
  • Default.aspx (anasayfa)
  • Hakkimizda.aspx (hakkımızda sayfası)
  • Urunler.aspx (ürünlerin listelendiği sayfa)
  • Urun.aspx (ürün bilgisinin bulunduğu sayfa)

Masterpage içerisine anasayfa, hakkımızda ve ürünler sayfalarının linklerini FriendlyUrl’e uygun şekilde tanımlayalım:

  • http://localhost:60380/Default
  • http://localhost:60380/Hakkimizda
  • http://localhost:60380/Urunler

MasterPage.master

<body>
    <form id="form1" runat="server">
        <div>
            <a href="/Default">Anasayfa</a> | <a href="/Hakkimizda">Hakkımızda</a> | <a href="/Urunler">Ürünler</a>
        </div>
        <div>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            </asp:ContentPlaceHolder>
        </div>
    </form>
</body>

Projeyi çalıştırıp anasayfa ve hakkımızda linklerine tıkladığınızda URL’lerin sonunda .aspx uzantısının olmadığını göreceksiniz.

Linklerimizin bir kısmını SEO uyumlu hale getirdik. Şimdi ürünler sayfamızı açalım ve içine 3 adet ürün ekleyelim.

Urunler.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <a href="/Urun/Urun1">Ürün 1</a>
    <br />
    <a href="/Urun/Urun2">Ürün 2</a>
    <br />
    <a href="/Urun/Urun3">Ürün 3</a>
</asp:Content>

Ürün sayfamıza ise Urun.aspx sayfasında olduğumuzu belirtebilmek için “Ürün sayfası” metnini yazalım.

Urun.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    Ürün sayfası
</asp:Content>

Ürünler linkine tıklayıp sayfayı açınız.

Şimdi bir ürüne tıklayınız. Hangi sayfaya tıklarsanız tıklayın Ürün sayfası yazısını göreceksiniz. URL’in başında (http://localhost:60380’den sonraki bölümde) Urun linki yazdığından dolayı Urun.aspx’e yönlenmektedir.

Peki FriendlyURL’de hangi eleman ile işlem yapıldığını nasıl anlayacağız? (Farklı bir deyişle, ürün sayfasında hangi ürünün alındığı bilgisine nasıl erişeceğiz?)

Request.GetFriendlyUrlSegments(): Link içerisindeki segmentleri döndürür. Örneğin linkimiz http://localhost:60380/Urunler/Bilgisayar/Laptop1 olsun. Geri dönüş değeri olarak “Bilgisayar” ve “Laptop1” kayıtlarını IList<string> türünde geri döndürür.

Request. GetFriendlyUrlFileVirtualPath(): Hangi formun çalışmakta olduğu bilgisini döndürür. Örneğin linkimiz http://localhost:60380/Urunler/Bilgisayar/Laptop1 olsun. Geri dönüş değeri olarak “~/Urunler.aspx” kaydını döndürür.

Request. GetFriendlyUrlFileExtension(): Açılan formun uzantısı bilgisini döndürür. Sadece Asp.Net formlarıyla çalıştığı için html vb uzantıları geri döndürmez.

Değerleri görebilmek için Urun.aspx.cs’nin Page_Load eventına kayıtları yazıp değerlerine bakalım.

public partial class Urun : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        IList<string> segmentler = Request.GetFriendlyUrlSegments();
        string form = Request.GetFriendlyUrlFileVirtualPath();
        string uzanti = Request.GetFriendlyUrlFileExtension();
    }
}

Link: http://localhost:60380/Urun/Urun1

 

Yepyeni makalelerde görüşmek dileğiyle :)

Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com