Dinamik Bir ASP.NET Site İçin SEO Nasıl Yapılır?

SEO için birçok kriter var bu kriterlerin dökümanına arama motorlarının sitelerinden ulaşabilirsiniz. Kriterlerden biri sitenin wellformat yani hatasız HTML yapısına sahip olmasıdır ASP.NET'i kullandığınızda zaten bu kriteri sağlamış olursunuz.
Diğer ve önemli olan ise arama sonuçlarında tıklanma şansınızı artırmak. Bunun için sonuçlarda fazla link ile yer almak gerekir. URL'nin içindeki dosya yolunun çeşitli olması buna olanak sağlar.
www.site.com?UrunDetay.aspx?Id=1
şeklinde bir çok farklı içerik gösterilebilir ancak arama motoru bunu tek bir sayfa olarak algılar. Bunun yerine;
www.site.com/urundetay/cep-telefonlari/1/iphone5.html
gibi oluşturulan urller her birisi ayrı sayfa olarak algılanır. Bunun için URLRouting yapılır.
Global.asax dosyasında Application_Start handlerinde Route listesine şablon kayıt edilir;

scription">PHP- Kodu:
 void Application_Start(object senderEventArgs e)      {         RegisterRoutes(System.Web.Routing.RouteTable.Routes);     }      void RegisterRoutes(System.Web.Routing.RouteCollection Routes)     {         Routes.MapPageRoute("detay""urundetay/{kategori}/{id}/{urun}.html""~/Detay.aspx");     } 
Daha sonra bunlar:

description">PHP- Kodu:
<asp:HyperLink NavigateUrl='<%***nbsp;GetRouteUrl("detay", new {kategori = Eval("kategori_adı"), id=Eval("ürün_id"), urun=Eval("ürün_adı") }) %>' Text='<%***nbsp;Eval("ürün_adı") %>' runat="server" /> 
şeklinde kullanılır. Url Routing framework 4.0 dan sonra ki sürümlerde çalışır.

Bunlara ek olarak anasayfanı tek bir statik sayfa olarak yapmanı öneririm. Anasayfa statik olduğunda diğer dinamik iç sayfaların indexlenmeleri daha kolay olur. Botlar önce anasayfayı ve daha sonra iç sayfaları indexlemeye başlıyor.

Varsayalım ContactUs.aspx adında bir dosyamız var bunu açmak için www.domain.com/ContactUs.aspx şeklinde bir url gerekir. Biz bunu www.domain.com/iletisim.html şeklinde göstermek istiyoruz;

PHP- Kodu:
Routes.MapPageRoute("contactus""iletisim.html""~/ContactUs.aspx"); 

Bazen açılacak sayfaya değer(ler) göndermemiz gerekir. Bu değeri url de gönderirirz. Örneğin ASP.Net kategorisindeki blog postlarını listeletmek istiyoruz. Bunun için sorguda kullanmak üzere ASP.Net kategorisinin database ID sini urlye koyup yollarız.

www.domain.com/Categories.aspx?Id=1
O id yi alıp sorgumuzu çalıştırıp dönen sonuçları listeleriz. Ama ilk mesajımda anlattığım nedenden ötürü bunu;
www.domain.com/kategori/1
şeklinde göstermek istersek;

PHP- Kodu:

Routes
.MapPageRoute("kategori""kategori/{id]""~/Categories.aspx"); 
şeklinde hazırlıyoruz. Ama bu seo için yeterli olmayabilir, kategori adınıda urlye koyalım;

PHP- Kodu:
Routes.MapPageRoute("kategori""kategori/{id]/{name}.html""~/Categories.aspx"); 

Artık,
www.domain.com/kategori/1/asp.net.html
şeklindeki url nin rotası Categories.aspx e yönlenecek.
Kullanıcılara linki hazırlamak içinde GetRouteUrl methodunu kullanıyoruz. Kullanıcı tıklıyor sayfaya ulaşıyor.
Gittiği sayfada ise;

PHP- Kodu:
var _posts dbContext.Posts.Where(p=>p.CategoryId == RouteData.Values["Id"]).ToList(); 
şeklinde RouteData nın Values collectionundan veriyi alıp kullanıyoruz.