Page.MetaKeywords ve Page.MetaDescription

Tarih 19 Ocak 2010 Salı | Etiket(ler) Asp.Net, SEO | Yorumlar 1 yorum

Konuyla ilgili bir önceki yazımda (Response.RedirectPermanent ve 301 yönlendirmesi) bahsettiğim ve .Net Framework 4.0 ile gelen ve Page sınıfına eklenen arama motoru dostu Page.MetaKeywords, Page.MetaDescription özelliklerini ve kullanımlarını inceleyelim. Bildiğiniz gibi dinamik içerikli sayfalarda meta tagleri dinamik olarak gelen içeriğe göre şekillendirmek ve her sayfada içeriğe göre meta tag oluşturmak bizi arama motorlarında daha ulaşılabilir hale getiriyor ve üst sıralara yerleşmemizde önemli rol oynuyor. Arama motoru botları <head></head> tagları arasında yer alan bu meta taglara göre sitemizi kategorize ediyor. Bu bağlamda framework 4.0 birçok yeni özelliğin yanı sıra arama motoru dostu sayfalar (SEO - Search Engine Optimization olarakta telaffuz edilir.) oluşturmamızı sağlayan yeni özelliklerle hayatımıza girmeye hazırlanıyor ve yeni özellikleri şimdiden çok konuşuluyor. Arama motorlarının hayatımızdaki önemini burada anlatmaya gerek olduğunu düşünmüyorum zira artık arama motoru dostu sayfa oluşturmak bir gereklilik haline geldi.

Diğer yenilikler dışında bu yazımda Page.MetaKeywords ve Page.MetaDescription üzerinde duracağım. Herşeyden önce bu taptaze özellikler bizi satırlarca kod yazmaktan kurtarıyor. Adlarından anlaşılacağı gibi sayfamızda meta keyword ve meta description değerlerini programatik olarak kolayca düzenlemememize olanak sağlayan özellikler framework 4.0 öncesi şu şekilde kullanılırlardı.

Meta description eklemek için eski kullanım :
Dim metaDescription As New HtmlMeta
metaDescription.Name = "description"
metaDescription.Content = "Meta description içeriği buraya gelecek"
Page.Header.Controls.Add(metaDescription)
Çıktısı :
<meta name="description" content="Meta description içeriği buraya gelecek" />
Meta keywords eklemek için eski kullanım :
Dim metaKeywords As New HtmlMeta
metaKeywords.Name = "keywords"
metaKeywords.Content = "anahtar, kelimeler, buraya, gelecek"
Page.Header.Controls.Add(metaKeywords)
Çıktısı :
<meta name="keywords" content="anahtar, kelimeler, buraya, gelecek" />
Yeni kullanımları anlatmadan önce unutmadan söyleyeyim ki diğer tüm meta elemanlarını da yukarıdaki şekilde sayfanıza programatik olarak ekleyebilirsiniz. Gelelim yeni kullanımlara.

Page.MetaDescription kullanımı :
Page.MetaDescription = "Meta description içeriği buraya gelecek"
Page.MetaKeyword kullanımı :
Page.MetaKeywords = "anahtar, kelimeler, buraya, gelecek"
Veya
<%@ Page Language="VB"
CodeFile="Arsiv.aspx.vb"
Inherits="Arsiv"
Title="Cenk SARI / Blog"
Description="Meta description içeriği buraya gelecek"
Keywords="anahtar, kelimeler, buraya, gelecek"
%>
Tek satırlık kullanım eski kullanımdaki kod kalabalığını gerçekten yüksek ölçüde düzenliyor. Yeni sürümler hayatımızı kolaylaştırmaya devam ededursun darısı canonical'ın başına demekten kendimi alamıyorum.
Response.RedirectPermanent ve 301 yönlendirmesi

Tarih 18 Ocak 2010 Pazartesi | Etiket(ler) Asp.Net, SEO | Yorumlar 1 yorum

.Net Framework 4.0 ile gelen yeni özelliklerden biri Response.RedirectPermanent metodudur. Metodu anlatmaya başlamadan önce biraz ne işe yaradığından ve eski stilde bu işlemi nasıl yapabileceğimizden bahsedelim. 301 yönlendirmesi yapan bu metod kalıcı olarak taşınmış bir adresin yeni lokasyonunu arama motoru botlarına bildirmek için kullanılıyor. Normal olarak Response.Redirect ile yapılan yönlendirmeler, sayfa bilgisine "HTTP 302 Found – Temporary Redirect" (Bulundu - Geçici Yönlendirme) bilgisini eklemektedir. Tarayıcı yönlendirilen sayfadan akışına devam eder fakat bu mesajı gören (302 Found - Temporary Redirect) arama motoru botu sayfa izlemesine yönlendirilen sayfadan devam etmez. Geçici olarak yönlendirildiğini anlar. Bu da sitenizde aslında varolan ve Response.Redirect ile yönlendirilen bir sayfanın indexlenmemesine neden olabilir. Kalıcı olarak yeri değişen dökümanı arama motorlarına bildirmek için aslında "HTTP 301 Moved Permanently" (Kalıcı olarak yeri değişti) bilgisi göndermemiz gerekir.

.Net Framework 4.0 öncesinde bu tip durumlarda 301 yönlendirmesi yapmak için aşağıdaki kod bloğundan yararlanıyorduk. Bu kod arama motoruna sayfanın yerinin değiştiğini, eski sayfayı görmezden gelip aynı içeriğin yeni lokasyonda yer aldığını ve bu adresi indexlemesi gerektiğinini söylemek için kullanılıyor.
Private Sub PermanentRedirect(ByVal icerik As HttpResponse)
    icerik.Clear() 
    icerik.Status = "301 Moved Permanently" 
    icerik.RedirectLocation = "TasinanSayfa.aspx" 
    icerik.End()
End Sub
Ya da
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.Status = "301 Moved Permanently"
HttpContext.Current.Response.AddHeader("Location", "TasinanSayfa.aspx")
HttpContext.Current.Response.RedirectLocation = "TasinanSayfa.aspx"
Şeklinde kullandığımız bu metod, birazdan anlatacağım .Net Framework'ün arama motoru dostu sayfalar yapmamızı kolaylaştıran özelliklerinden bir tanesi Response.RedirectPermanent metodunun yaptığı işi yapıyor.

Response.RedirectPermanent metodu Response.Redirect ile aynı mantıkta çalışmasına rağmen yukarıda anlatmaya çalıştığım gibi HTTP 302 mesajı yerine HTTP 301 Moved Permanently mesajı gönderiyor ve dolaylı yoldan yaptığımız işi kolaylaştırıyor. 301 mesajını gören arama motoru botu gezinmeye yeni sayfadan devam ediyor ve yönlendirilmek istenen sayfalar indexlenmeye devam ediyor. Yapmamız gereken işlem sadece,
Response.RedirectPermanent("YeniSayfa.aspx")
.Net framework arama motoru dostu sayfalar yapmak için biçilmiş kaftan gibi gözüküyor ve bunun gibi birçok özelliği de kendisiyle birlikte getiriyor. Bunlardan biri yukarıda anlattığım gibi Response.RedirectPermanent. Bunun dışında Page.MetaKeywords ve Page.MetaDescription metodları da kullanımımıza sunulacak. Web sayfalarımıza gelen trafiğin büyük bölümünü oluşturan arama motorlarını göz ardı etmemek artık gereklilik halini alıyor. Daha sonraki yazılarda bu özelliklere de değineceğim.
Url Rewriting - Arama motoru dostu sayfa isimleri

Tarih 14 Ocak 2010 Perşembe | Etiket(ler) Asp.Net, SEO | Yorumlar 3 yorum

Yine merhaba, bugünlerde teknik yazı yazma aşkıyla doldum ve yeni bir yazıyla karşınızdayım. Bu sefer hepimizin kulağının aşina olduğu fakat değişik metodları bulunan Url Rewriting konusunda bir yazı yazı hazırladım. Web üzerinde şöyle bir araştırma yaptığınızda konu üzerine yazılmış oldukça güzel makaleler mevcut. Ben kendi uyguladığım yöntemi anlatmak istiyorum. Peki neden Url Rewriting tekniği kullanmalısınız ? Herşeyden önce kullanıcıların aklında kalacak adresler oluşturmak ve arama motorları tarafından daha iyi indexlenmek fikri bile yeterli. Url Rewriting'i aslında siteniz üzerinde var olmayan bir adresi, fiziksel olarak başka bir dosyaya yönlendirmek olarak basitçe tanımlayabiliriz. Ben http://www.urlrewriting.net/ adresinde ikamet eden kütüphaneyi kullanmayı tercih ediyorum.

Hemen örneğimize geçelim ve işe bu adresteki UrlRewritingNet_20.zip dosyasını indirerek başlayalım. İndirdiğiniz zip dosyasını açın ve içinden çıkan UrlRewritingNet.UrlRewriter.dll dosyasını Bin dizinimize kopyalayalım ve referans olarak projemize dahil edelim. Aynı zamanda zip dosyasının içinde güzel bir yardım dökümanı da mevcut.

İkinci etapta web.config dosyamızda yapmamız gereken ayarlamalardan başlayalım. <configSections> altına ekleyelim.
<configSections>>
<section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
</configSection>
<system.web> node'u altında bulunan <httpModules> node'una şunu ekleyelim ve httpModule olarak tanıtalım.
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
Web.config dosyamıza sonra geri dönmek üzere kaydedelim. Adreslerimizi oluşturmak için kullanacağımız bir class oluşturup aşağıdaki fonksiyonu ekleyelim.
Public Shared Function AD(ByVal gelen As String) As String
    gelen = gelen.Replace("'", "")
    gelen = gelen.Replace(""", "")
    gelen = gelen.Replace("&", "")
    gelen = gelen.Replace("<", "")
    gelen = gelen.Replace(">", "")
    gelen = gelen.Replace("<br />", "")
    gelen = gelen.Replace("«", "")
    gelen = gelen.Replace("»", "")
    gelen = gelen.Replace("ç", "c")
    gelen = gelen.Replace("ö", "o")
    gelen = gelen.Replace("ğ", "g")
    gelen = gelen.Replace("ü", "u")
    gelen = gelen.Replace("ş", "s")
    gelen = gelen.Replace("ı", "i")
    gelen = gelen.Replace("Ç", "C")
    gelen = gelen.Replace("Ö", "O")
    gelen = gelen.Replace("Ğ", "G")
    gelen = gelen.Replace("Ü", "U")
    gelen = gelen.Replace("Ş", "S")
    gelen = gelen.Replace("İ", "I")
    gelen = gelen.Replace("é", "e")
    gelen = gelen.Replace(":", "")
    gelen = gelen.Replace(";", "")
    gelen = gelen.Replace(".", "")
    gelen = gelen.Replace(",", "")
    gelen = gelen.Replace("'", "")
    gelen = gelen.Replace(Chr(34), "")
    gelen = gelen.Replace("^", "")
    gelen = gelen.Replace("#", "")
    gelen = gelen.Replace("+", "")
    gelen = gelen.Replace("$", "")
    gelen = gelen.Replace("%", "")
    gelen = gelen.Replace("/", "")
    gelen = gelen.Replace("{", "")
    gelen = gelen.Replace("}", "")
    gelen = gelen.Replace("(", "")
    gelen = gelen.Replace(")", "")
    gelen = gelen.Replace("[", "")
    gelen = gelen.Replace("]", "")
    gelen = gelen.Replace("=", "")
    gelen = gelen.Replace("!", "")
    gelen = gelen.Replace("?", "")
    gelen = gelen.Replace("*", "")
    gelen = gelen.Replace("_", "-")
    gelen = gelen.Replace("@", "")
    gelen = gelen.Replace("€", "")
    gelen = gelen.Replace("~", "")
    gelen = gelen.Replace("<", "")
    gelen = gelen.Replace(">", "")
    gelen = gelen.Replace("|", "")
    gelen = gelen.Replace("&", "")
    gelen = gelen.Replace(" ", "-")
    gelen = gelen.Replace("----", "-")
    gelen = gelen.Replace("---", "-")
    gelen = gelen.Replace("--", "-")
    gelen = Left(gelen, 200)
    Dim uzunluk As Integer = Len(gelen)
    If Right(gelen, 1) = "-" Then
        gelen = Left(gelen, uzunluk - 1)
    End If
    gelen = gelen + ".aspx"
    Return gelen
End Function
Son olarak adreslerimizi nereye yönlendireceğimizi ayarlamak için web.config dosyamıza geri dönelim ve </system.web> bitiminden hemen sonra şöyle bir ayarlama yapalım.
<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="default.aspx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
    <rewrites>
      <add name="Yonlendirme"
      virtualUrl="^~/Icerik/(.*)/(.*).aspx"
      rewriteUrlParameter="ExcludeFromClientQueryString"
      destinationUrl="~/Icerik.aspx?ID=$1&Sayfa=$2"
      ignoreCase="true" />
    </rewrites>
</urlrewritingnet>
En can alıcı noktamız buydu. Gördüğünüz gibi Icerik/***/***.aspx gibi gelen bir isteği Icerik.aspx?ID=*** adresine yönlendir gibi bir desen kullandık. Desenimizdeki (.*) lar gelecek olan dinamik değişkenleri tanımlamamızı sağlıyorlar. İlk (.*) ID değerini simgelediği için $1 olarak, ikincisi ise sanal dosyamızın adını temsil edeceği için $2 olarak tanımlandılar. Daha fazla dinamik değişken tanımlamak sizin elinizde sırasıyla $1, $2, $3, $4 olarak bu parametreleri alabilirsiniz. Bu işlem Icerik.aspx?ID=12 şeklindeki bir linki Icerik/12/Dosyamin-ismi-bu.aspx gibi bir linke çevirmemize yardımcı olacak. Gelelim kullanımına

Default.aspx dosyamıza şu kodları :
Gerçek link : <a href="Icerik.aspx?ID=12&Sayfa=Dosyamın ismi bu">Icerik.aspx?ID=12&Sayfa=Dosyamın ismi bu</a>
<br /><br />
Yönlendirme yapılmış link : <a href="Icerik/12/<%=AD("Dosyamın ismi bu")%>">Icerik/12/<%=AD("Dosyamın ismi bu")%></a>
Icerik.aspx dosyamıza şu kodları yapıştıralım :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ID As String = Request.QueryString("ID")
    Dim Sayfa As String = Request.QueryString("Sayfa")
    Response.Write("Gelen ID Değeri : " & ID & "")
    Response.Write("<br />")
    Response.Write("Gelen Sayfa değeri : " & Sayfa & "")
End Sub
Ve projemizi çalıştıralım. Artık kullanıcı ve arama motoru dostu linklerimiz var. Burada dikkat etmemiz son nokta sayfalarımızı sanki bir klasör içindeymiş gibi çağırdığımızda imaj ve linklerimizin adreslerini verirken http://www.sitenizinadresi.com/imajklasorunuz/imaj.jpg gibi vermek. Aksi halde o klasör içerisinde link ve imajlarınızı arayacaktır ve bulamayacaktır.

Projenin çalışan halini buradan indirebilirsiniz

We're in this together, we share the same skin!