Asp.net mvc ile geliştirdiğim uygulamalarda seo konusuna geldiğimde karşılaştığım bir sorunu da meta etiketlerinin açıklamalarının dinamik olarak oluşturmaya çalıştığımda karşıma çıkar karakter sorunuydu. Bu sorunu, HTML encoding yüzünden yaşadığımı düşünüyorum.
<!DOCTYPE html> <html lang="tr"> <head> <title>@ViewBag.Title</title> <meta name="description" content="@(MvcHtmlString.Create(ViewBag.Description))"/>
Normalde meta description içerisinde “sürü” yazmalıydı ama yazmıyor işte.
Bu sorunu düzeltmek için meta description kısmında küçük bir değişiklik yaparak şu şekle getirdiğimde sorun ortadan kalkıyor.
<meta name="description" content="@(Html.Raw(ViewBag.Description))"/> ve sonuç aşağıdaki gibidir. <meta name="description" content="sürü" />
Aslında burada karşılaştığımız sorun razor view engine tarafından alınmış bir güvenlik önlemi. Yani bir kullanıcı, sayfamınız yorum kısmına sürekli alert veren bir javascript kodu yazdığında, bu yorum Html tarafında direk render edilirse, sayfa her açıldığında kullanıcıların karşısına alert veren bir pencere çıkacaktır.
Bu tarz javascript ataklarını önleyebilmek için, helper sınıfları ve metodları kullanılır genelde. Örneğin yukarda kullanılan Html.Raw metodu yardımı ile bu içeriğin ne olduğunu bildiğimizi belirtiyor ve html olarak render edilmesini istiyoruz.
Aslında kıllanabileceğimiz bir kaç tane yöntem var. Şu şeklide sıralayabiliz.
1- <meta name="description" content="@(ViewBag.Description)"/> 2- <meta name="description" content="@(MvcHtmlString.Create(ViewBag.Description))"/> 3- <meta name="description" content="@(new MvcHtmlString(ViewBag.Description))"/>
Bu yöntemlerin hepsinin temelinde yatan IHtmlString arayüzünün ToHtmlString() metodudur.
Tekrar görüşmek ümidiyle.