﻿
{"id":1346,"date":"2013-01-31T15:32:16","date_gmt":"2013-01-31T15:32:16","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1346"},"modified":"2019-02-08T21:22:00","modified_gmt":"2019-02-08T21:22:00","slug":"mvc-meta-tag-yazimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvc-meta-tag-yazimi\/","title":{"rendered":"MVC Meta Tag Yaz\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>\u0130ster Asp.NET ister PHP gibi farkl\u0131 alanlarda web projeleri \u00fczerinde \u00e7al\u0131\u015f\u0131n.Ama bu farkl\u0131 platformlar\u0131n en \u00f6nemli ortak noktalar\u0131ndan birisi de, SEO(Arama Motoru Optimizasyonu)&#8217; dur.Bu yaz\u0131m\u0131zda MVC&#8217;de SEO temelleri olan Meta Tag yaz\u0131m\u0131n\u0131 g\u00f6rece\u011fiz.<br \/>\n<!--more--><br \/>\nE\u011fer \u015fuanda bu yaz\u0131y\u0131 okuyorsan\u0131z, &#8220;bu herif yazacak bi\u015fey bulamad\u0131, yazm\u0131\u015f olmak i\u00e7in yaz\u0131yor&#8221; diye d\u00fc\u015f\u00fcn\u00fcyor olabilirsiniz.Evet ben olsam b\u00f6yle d\u00fc\u015f\u00fcn\u00fcrd\u00fcm :). Ancak konumuz bir MVC projesinde veritaban\u0131ndaki Meta taglar\u0131n\u0131 Html&#8217;de &lt;meta..&gt; taglar\u0131 aras\u0131nda g\u00f6stermekten ibaret de\u011fil.Asl\u0131nda \u00f6nceki bir yaz\u0131mda(<span style=\"font-size: x-small;\">biraz konudan bahsettikten sonra o yaz\u0131n\u0131n linkinide verece\u011fim<\/span>) anlatm\u0131\u015f oldu\u011fum bir mevzuya tekrardan de\u011finece\u011fim.Demek ki, bana g\u00f6re MVC&#8217;de dikkat edilmesi gereken bir nokta var.Bende bunu \u0131srarla sizlere sunuyorum.San\u0131r\u0131m bir ka\u00e7 farkl\u0131 durumla da ayn\u0131 konu \u00fczerinde kar\u015f\u0131la\u015faca\u011f\u0131z \ud83d\ude42<\/p>\n<p>Her neyse..<\/p>\n<p>\u015eimdi bu durum neymi\u015f ondan bahsedeyim.E\u011fer beni takip ediyorsan\u0131z \u00f6nceki yaz\u0131lar\u0131mdan bu durumu belki an\u0131msars\u0131n\u0131z \ud83d\ude09<\/p>\n<p>Projemizde bulunan her sayfa i\u00e7in bir Meta Tag g\u00f6sterilmesini istiyorum.\u015eimdi en zahmetli i\u015f ne olacakt\u0131r.Her defas\u0131nda Controller&#8217;\u0131m\u0131z da tetiklenmi\u015f Action metodumuza gidip, veritaban\u0131ndaki ilgili tablodan Meta bilgilerini \u00e7ekip, View katman\u0131nda bunlar\u0131 Meta etiketleri aras\u0131na yazd\u0131rmak olacakt\u0131r.<\/p>\n<p>Tabi her Action metodumuz da teker teker meta etiketlerini \u00e7ekece\u011fimize bu i\u015flemi yapacak bir Attribute yazaca\u011f\u0131z.Bu Attribute sayesinde bir Session olu\u015fturulacakt\u0131r ve Meta bilgileri bir kere \u00e7ekildikten sonra her kullan\u0131c\u0131 i\u00e7in g\u00f6z\u00fckecektir.<\/p>\n<p>Yani bir kere sistem ad\u0131na bir Session de\u011feri \u00fcretilecek ve bu Session i\u00e7inde Meta bilgileri tutulacakt\u0131r.Bu Session&#8217;dan da sitemize giren her kullan\u0131c\u0131n\u0131n talebi i\u00e7in, View katman\u0131nda meta etiketleri g\u00f6sterilecektir.<\/p>\n<p>Herkes i\u00e7in ortak bir i\u015flem olaca\u011f\u0131ndan dolay\u0131, StringDictionary s\u0131n\u0131f\u0131ndan \u00fcretilen bir nesne sayesinde bu Session nesnesi tek seferde herkes i\u00e7in \u00fcretilecektir.<\/p>\n<p>MVC\u2019de LanguageSessionControl Attribute&#8217;u Yazmak ba\u015fl\u0131kl\u0131 yaz\u0131m\u0131 incelerseniz e\u011fer, bu konuyla yap\u0131s\u0131 paralel boyuttad\u0131r.(<span style=\"font-size: x-small;\">Yukar\u0131da bahsetti\u011fim yaz\u0131m bu<\/span>)<\/p>\n<p>\u0130\u015fte benim \u00fczerine durdu\u011fum nokta da budur.Sitemizde ki t\u00fcm kullan\u0131c\u0131lar i\u00e7in olu\u015fturulabilen ortak bir de\u011fer ve bu yap\u0131y\u0131 bir Attribute tarz\u0131nda kullanabilmemiz.Ne kadar g\u00fczel \u00f6yle de\u011fil mi? \ud83d\ude42<\/p>\n<p>Evet art\u0131k pratik bilgi \u0131\u015f\u0131\u011f\u0131nda hareket edelim.\u015eimdi bu anlatt\u0131klar\u0131m\u0131z\u0131 programatik olarak \u00f6zetleyelim.Tabi \u00f6ncelikle, veritaban\u0131m\u0131zda &#8220;MetaTable&#8221; ad\u0131nda bir veritaban\u0131 ve i\u00e7inde Meta bilgilerimizin tutacak olan tablo ve kolonlar mevcuttur.(<span style=\"font-size: x-small;\">Tablo ad\u0131 MetaEtiketleri-Kolonlar description ve keywords<\/span>)<\/p>\n<p>\u015eimdi Attribute&#8217;umuzu yazal\u0131m.Ben Attribute&#8217;un ad\u0131na &#8220;MetaEtiketleriAttribute&#8221; ismini veriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MetaEtiketleriAttribute : ActionFilterAttribute\r\n    {\r\n        public static StringDictionary MetaSession = new StringDictionary();\r\n        public override void OnActionExecuting(ActionExecutingContext filterContext)\r\n        {\r\n            VeriTabaniDataContext Veri = new VeriTabaniDataContext();\r\n            if (MetaSession.Count == 0)\r\n            {\r\n                MetaEtiketleri Meta = Veri.MetaEtiketleris.SingleOrDefault();\r\n                MetaSession.Add(\"keywords\", Meta.keywords);\r\n                MetaSession.Add(\"description\", Meta.description);\r\n            }\r\n            base.OnActionExecuting(filterContext);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da ki kod yap\u0131s\u0131n\u0131 incelerseniz e\u011fer, static yap\u0131da olan, StringDictionary tipinden bir MetaSession isminde nesne olu\u015fturmu\u015f olduk.\u0130\u015fte bu nesne sayesinde herkes i\u00e7in tek ve ortak bir Session de\u011feri olu\u015fturmu\u015f oluyoruz.<\/p>\n<p>OnActionExecuting metodu ise, bildi\u011fimiz gibi, bu Attribute&#8217;un tan\u0131mland\u0131\u011f\u0131 Action metoduna \u00e7al\u0131\u015fma talebi geldi\u011fi anda, bu metod \u00e7al\u0131\u015fmaktad\u0131r.Daha sonra Action metodu \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, Meta taglar\u0131m\u0131z veritaban\u0131nda \u00e7ekilim StringDictionary nesnemize eklenmektedir.Yani her kullan\u0131c\u0131 i\u00e7in bir kere bu nesneye \u00e7ekilmektedir.<\/p>\n<p>Bu Attribute&#8217;umuz sitemizin Meta Taglar\u0131n\u0131 \u00e7ekip, Html k\u0131s\u0131mda gerekli etiketlerinde yay\u0131nlamam\u0131za yar\u0131yor.MVC mimarisinin i\u015fleyi\u015f prensibi, \u00f6nce Controller \u00e7al\u0131\u015f\u0131r daha sonra View katman\u0131.Eee haliyle \u00f6nce \u00e7al\u0131\u015facak olan Controller&#8217;da biz bu Attribute&#8217;u \u00e7al\u0131\u015ft\u0131ral\u0131m.Yani hangi Controller&#8217;da Meta etiketlerini \u00e7a\u011f\u0131rmak istiyorsak, bu yazd\u0131\u011f\u0131m\u0131z Attribute ile o Controller&#8217;\u0131 i\u015faretlemeliyiz.<\/p>\n<p>Mesela ben &#8220;Home(Controller)&#8221; ismindeki Controller s\u0131n\u0131f\u0131m\u0131z\u0131 bu Attribute ile i\u015faretliyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MetaEtiketleri]\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            ViewData&#x5B;\"Message\"] = \"Welcome to ASP.NET MVC!\";\r\n            return View();\r\n        }\r\n        public ActionResult About()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;MetaEtiketleriAttribute&#8221; ad\u0131ndaki Attribute&#8217;umuzla &#8220;Home(Controller)&#8221; ismindeki Controller s\u0131n\u0131f\u0131n\u0131 i\u015faretledik.Bundan sonra bir kullan\u0131c\u0131 Index ya da About ismindeki Action metodlar\u0131 tetiklerse, Attribute&#8217;umuz \u00e7al\u0131\u015facakt\u0131r.Sonra Action metod \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<p>Art\u0131k sayfalar\u0131m\u0131z da, StringDictionary tipinden olu\u015fturulan Session nesnemizde tutulan Meta de\u011ferlerini, gerekli etiketlerinin aras\u0131na yazabiliriz.View katman\u0131nda &#8220;Home&#8221; klas\u00f6r\u00fc i\u00e7erisindeki &#8220;Index&#8221; isimli sayfaya a\u015fa\u011f\u0131daki gibi d\u00fczenleme yap\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;meta name=&quot;description&quot; content='&lt;%: MetaEtiketleriAttribute.MetaSession&amp;#91;&quot;description&quot;&amp;#93; %&gt;'&gt;\r\n    &lt;meta name=&quot;keywords&quot; content='&lt;%: MetaEtiketleriAttribute.MetaSession&amp;#91;&quot;keywords&quot;&amp;#93; %&gt;'&gt;\r\n<\/pre>\n<p>&#8220;MetaEtiketleriAttribute&#8221; isimli s\u0131n\u0131f\u0131m\u0131zda zaten bir sat\u0131r meta de\u011feri \u00e7ekip, StringDictionary tipinden olan MetaSession nesnemize atam\u0131\u015ft\u0131k.Haliyle MetaSession nesnemizden Indexer yard\u0131m\u0131yla anahtar s\u00f6zc\u00fcklerini yazarak de\u011ferlerine ula\u015fabiliyoruz.<\/p>\n<p>\u015eimdi veritaban\u0131m\u0131z da &#8220;MetaEtiketleri&#8221; tablosuna, bir sat\u0131r veri girelim.<\/p>\n<p>E\u011fer sayfam\u0131z\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rsak, kaynak kodlar\u0131nda a\u015fa\u011f\u0131daki gibi sonu\u00e7 g\u00f6rece\u011fiz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-meta-tag-yazimi.html\/metaetiketleri\" rel=\"attachment wp-att-1348\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1348\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/MetaEtiketleri.png\" alt=\"MetaEtiketleri\" width=\"456\" height=\"26\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/MetaEtiketleri.png 456w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/MetaEtiketleri-300x17.png 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/a><\/p>\n<p>Evet art\u0131k yaz\u0131m\u0131z\u0131n sonuna gelmi\u015f bulunmaktay\u0131z.Ancak son noktay\u0131 koymadan \u00f6nce bu makale de \u00fczerinde durdu\u011fum noktay\u0131 son kez \u00f6zetlemek istiyorum.MVC projelerinde bir i\u015flemi her kullan\u0131c\u0131 i\u00e7in ve her Action metod da s\u00fcrekli yapt\u0131rmak yerine, tek sefer de, her kullan\u0131c\u0131 i\u00e7in ortak de\u011ferler olu\u015fturmay\u0131 g\u00f6rm\u00fc\u015f olduk.Meta Tag konusu \u00fczerinde bu nazik konuyu peki\u015ftirmi\u015f olduk.<\/p>\n<p>Faydalanman\u0131z dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>\u0130ster Asp.NET ister PHP gibi farkl\u0131 alanlarda web projeleri \u00fczerinde \u00e7al\u0131\u015f\u0131n.Ama bu farkl\u0131 platformlar\u0131n en \u00f6nemli ortak noktalar\u0131ndan birisi de, SEO(Arama Motoru Optimizasyonu)&#8217; dur.Bu yaz\u0131m\u0131zda MVC&#8217;de SEO temelleri olan Meta Tag yaz\u0131m\u0131n\u0131 g\u00f6rece\u011fiz.<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[343,283,344,342],"class_list":["post-1346","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-meta-tag","tag-mvc","tag-onactionexecuting","tag-stringdictionary"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1346"}],"version-history":[{"count":1,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1346\/revisions"}],"predecessor-version":[{"id":10382,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1346\/revisions\/10382"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}