﻿
{"id":2532,"date":"2014-03-12T21:42:09","date_gmt":"2014-03-12T21:42:09","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2532"},"modified":"2014-03-12T21:42:30","modified_gmt":"2014-03-12T21:42:30","slug":"asp-net-mvc-sitemap-yapimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-sitemap-yapimi\/","title":{"rendered":"Asp.NET MVC &#8211; SiteMap Yap\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>SiteMap(Site Haritalar\u0131) bir web sitenin arama motorlar\u0131na tan\u0131t\u0131m\u0131n\u0131 ve h\u0131zl\u0131 i\u00e7erik yay\u0131nlamas\u0131n\u0131 ger\u00e7ekle\u015ftirir.Site haritas\u0131 ilgili sitedeki yeni bir i\u00e7eri\u011fin an\u0131nda Google taraf\u0131ndan alg\u0131lanmas\u0131n\u0131 sa\u011flar ve arama sonu\u00e7lar\u0131na bunu yans\u0131t\u0131r.SEO a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck \u00f6nem arz eden SiteMap uygulamas\u0131 hakk\u0131nda Google&#8217;da olumlu bir bak\u0131\u015f a\u00e7\u0131s\u0131 sergilemektedir.SiteMap olan sitelerin sayfalar\u0131na eri\u015fim \u00f6nceli\u011fi tan\u0131nmaktad\u0131r.G\u00fcn\u00fcm\u00fczde kaliteli siteleri incelersek e\u011fer SiteMap olmazsa olmazlar\u0131ndand\u0131r.B\u00f6yle \u00f6nemli bir yap\u0131y\u0131 Asp.NET MVC mimarisiyle dinamik olarak nas\u0131l olu\u015fturabiliriz bu yaz\u0131m\u0131zda inceleyelim.<br \/>\n<!--more--><br \/>\n\u00d6ncelikle yaz\u0131m\u0131z\u0131 detayland\u0131rmadan \u00f6rneklendirmemizi &#8220;<em>Northwind<\/em>&#8221; veritaban\u0131nda &#8220;<em>Personeller ve Bolgeler<\/em>&#8221; tablolar\u0131n\u0131 kullanarak ger\u00e7ekle\u015ftirece\u011fimizi s\u00f6ylemekte fayda var.<\/p>\n<p>Bu makalenin amac\u0131 SiteMap(Site Haritas\u0131)&#8217;\u0131 Asp.NET MVC mimarisinde dinamik olarak nas\u0131l olu\u015fturabilece\u011fimizi g\u00f6stermektir.Programatik a\u00e7\u0131dan i\u015flevsel benzerlik g\u00f6steren RSS yap\u0131s\u0131 hakk\u0131nda yak\u0131n zamanda yazm\u0131\u015f oldu\u011fum <a href=\"http:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-rss-olusturma\/\" target=\"_blank\">Asp.NET MVC &#8211; RSS Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131ya benzer bir kod yaz\u0131m\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<p>Yukar\u0131daki belirtilen yaz\u0131y\u0131 incelerseniz e\u011fer RSS yap\u0131s\u0131n\u0131n XML tabanl\u0131 oldu\u011funu ve belirli bir taslak, \u015fablon ya da yap\u0131 diyebilece\u011fimiz modelden olu\u015ftu\u011funu g\u00f6receksiniz.<\/p>\n<p><strong>Benzer \u015fekilde SiteMap yap\u0131s\u0131da XML tabanl\u0131d\u0131r ve belirli bir model yap\u0131s\u0131ndad\u0131r.<\/strong><\/p>\n<p>Bu modeli a\u015fa\u011f\u0131daki gibi \u00f6rneklendirebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\n&lt;url&gt;\r\n  &lt;loc&gt; Link &lt;\/loc&gt;\r\n  &lt;lastmod&gt; Tarih &lt;\/lastmod&gt;\r\n  &lt;changefreq&gt; Frekans &lt;\/changefreq&gt;\r\n  &lt;priority&gt; \u00d6nem S\u0131ras\u0131 &lt;\/priority&gt;\r\n&lt;\/url&gt;\r\n&lt;url&gt;\r\n   ...\r\n&lt;\/url&gt;\r\n...\r\n<\/pre>\n<p>\u015eimdi s\u0131ras\u0131yla node&#8217;lardan bahsedelim.<br \/>\nurl : Her i\u00e7erik i\u00e7in bir url olu\u015fturulacakt\u0131r.<br \/>\nloc : Location anlam\u0131na gelmektedir.Sayfa linki buraya verilir.<br \/>\nlastmod : \u0130\u00e7eri\u011fin son g\u00fcncelleme tarihi buraya verilir.<br \/>\nchangefreq : Sayfan\u0131n g\u00fcncellenme periodu.Saatlik, g\u00fcnl\u00fck, haftal\u0131k ve ayl\u0131k olmak \u00fczere 4 parametre verebiliriz.<br \/>\npriority : SiteMap&#8217;ta yay\u0131nlanan i\u00e7erik bir yaz\u0131 ya da kategori vs.. gibi bi\u015fey olabilir.Buraya \u00f6nem ve \u00f6ncelik de\u011feri verilir.<\/p>\n<p>\u015eimdi bu yap\u0131lar\u0131 \u00f6\u011frendi\u011fimizi g\u00f6re Asp.NET MVC ile dinamik bir SiteMap olu\u015ftural\u0131m.<br \/>\nYapaca\u011f\u0131m\u0131z senaryoyu ufak bir \u00f6zetlemek gerekirse e\u011fer, Northwind veritaban\u0131 i\u00e7erisinde bulunan Personeller ve Bolgeler tablolar\u0131ndaki verilerin hayali sitemizde i\u00e7erik oldu\u011funu varsay\u0131yor ve bu tablolardaki veriler i\u00e7in SiteMap dosyas\u0131 olu\u015fturaca\u011f\u0131m.<\/p>\n<p>\u00d6rnek bir Asp.NET MVC projesi a\u00e7\u0131p ilk i\u015f olarak Model katman\u0131nda &#8220;.dbml&#8221; uzant\u0131l\u0131 dosya a\u00e7arak Northwind veritaban\u0131yla ba\u011flant\u0131s\u0131n\u0131 kurmak ve Personeller tablosunun Entity&#8217;sini Linq To SQL ile h\u0131zl\u0131ca olu\u015fturmakt\u0131r.<\/p>\n<p>&#8220;Home(Controller).cs&#8221; isminde bir Controller s\u0131n\u0131f\u0131 olu\u015fturup &#8220;Index&#8221; isimli Action metodunda SiteMap kodlar\u0131m\u0131z\u0131 yazal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            VeriTabaniDataContext Veri = new VeriTabaniDataContext();\r\n\r\n            Response.Clear();\r\n            \/\/Response.ContentTpye ile bu Action'\u0131n View'\u0131n\u0131 XML tabanl\u0131 olarak ayarl\u0131yoruz.\r\n            Response.ContentType = &quot;text\/xml&quot;;\r\n            XmlTextWriter xr = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);\r\n            xr.WriteStartDocument();\r\n            xr.WriteStartElement(&quot;urlset&quot;);\/\/urlset etiketi a\u00e7\u0131yoruz\r\n            xr.WriteAttributeString(&quot;xmlns&quot;, &quot;http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9&quot;);\r\n            xr.WriteAttributeString(&quot;xmlns:xsi&quot;, &quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;);\r\n            xr.WriteAttributeString(&quot;xsi:schemaLocation&quot;, &quot;http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9 http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\/siteindex.xsd&quot;);\r\n            \/* sitemap dosyam\u0131z\u0131n olmazsa olmaz\u0131n\u0131 ekledik. \u015eemas\u0131 bu dedik buraya kadar.  *\/\r\n\r\n            xr.WriteStartElement(&quot;url&quot;);\r\n            xr.WriteElementString(&quot;loc&quot;, &quot;http:\/\/blog.gencayyildiz.com\/&quot;);\r\n            xr.WriteElementString(&quot;lastmod&quot;, DateTime.Now.ToString(&quot;yyyy-MM-dd&quot;));\r\n            xr.WriteElementString(&quot;changefreq&quot;, &quot;daily&quot;);\r\n            xr.WriteElementString(&quot;priority&quot;, &quot;1&quot;);\r\n            xr.WriteEndElement();\r\n\r\n            \/\/Burada veritaban\u0131m\u0131zdaki Personelleri SiteMap'e ekliyoruz.\r\n            var s = Veri.Personellers;\r\n            foreach (var a in s)\r\n            {\r\n                xr.WriteStartElement(&quot;url&quot;);\r\n                xr.WriteElementString(&quot;loc&quot;, &quot;http:\/\/site.com\/PersonelAdi\/&quot; + a.Adi);\r\n                xr.WriteElementString(&quot;lastmod&quot;, DateTime.Now.ToString(&quot;yyyy-MM-dd&quot;));\r\n                xr.WriteElementString(&quot;priority&quot;, &quot;0.5&quot;);\r\n                xr.WriteElementString(&quot;changefreq&quot;, &quot;monthly&quot;);\r\n                xr.WriteEndElement();\r\n            }\r\n\r\n            \/\/Ayn\u0131 \u015fekilde burada da Bolgeleri SiteMap'e ekliyoruz.\r\n            var k = Veri.Bolgelers;\r\n            foreach (var b in k)\r\n            {\r\n                xr.WriteStartElement(&quot;url&quot;);\r\n                xr.WriteElementString(&quot;loc&quot;, &quot;http:\/\/site.com\/Bolge\/&quot; + b.BolgeID);\r\n                xr.WriteElementString(&quot;lastmod&quot;, DateTime.Now.ToString(&quot;yyyy-MM-dd&quot;));\r\n                xr.WriteElementString(&quot;priority&quot;, &quot;1&quot;);\r\n                xr.WriteElementString(&quot;changefreq&quot;, &quot;monthly&quot;);\r\n                xr.WriteEndElement();\r\n            }\r\n\r\n            xr.WriteEndDocument();\r\n            \/\/urlset etiketini kapatt\u0131k\r\n            xr.Flush();\r\n            xr.Close();\r\n            Response.End();\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer Asp.NET MVC mimarisinde SiteMap yap\u0131s\u0131n\u0131 dinamik olarak nas\u0131l yapm\u0131\u015f oldu\u011fumuzu alg\u0131lars\u0131n\u0131z.Tabi burada Northwind veritaban\u0131na g\u00f6re LINQ e\u015fli\u011finde bir dinamiklik kazand\u0131rd\u0131k.Siz size \u00f6zel bir veritaban\u0131nda istedi\u011finiz tarzda(<span style=\"font-size: x-small;\">mesela Ado.NET kullanarak<\/span>) veri i\u015flemlerini dinamikle\u015ftirip SiteMap&#8217;\u0131n\u0131z\u0131 olu\u015fturabilirsiniz.<\/p>\n<p>Projeyi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra g\u00f6r\u00fcnt\u00fcs\u00fc a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/SiteMap.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2540\" alt=\"SiteMap\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/SiteMap-240x300.png\" width=\"240\" height=\"300\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/SiteMap-240x300.png 240w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/SiteMap.png 446w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/><\/a><\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/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>SiteMap(Site Haritalar\u0131) bir web sitenin arama motorlar\u0131na tan\u0131t\u0131m\u0131n\u0131 ve h\u0131zl\u0131 i\u00e7erik yay\u0131nlamas\u0131n\u0131 ger\u00e7ekle\u015ftirir.Site haritas\u0131 ilgili sitedeki yeni bir i\u00e7eri\u011fin an\u0131nda Google taraf\u0131ndan alg\u0131lanmas\u0131n\u0131 sa\u011flar ve arama sonu\u00e7lar\u0131na bunu yans\u0131t\u0131r.SEO a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck \u00f6nem arz eden&#46;&#46;&#46;<!-- 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,345,234],"tags":[746,283,568,752],"class_list":["post-2532","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","category-xml","tag-asp-net-mvc","tag-mvc","tag-sitemap","tag-xml"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2532","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=2532"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2532\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}