MVC SEO RSS entegrasyonu

  • MVC SEO RSS entegrasyonu

Perşembe, 21.02.2019 23:14  |   MVC  |   barisgelebek  |   2


MVC SEO RSS entegrasyonu

RSS (Really Simple Syndication) web içeriği abonelik formatıdır.

MVC için SEO - RSS

Kullanıcılar sitelerden güncel içerik almak isterler. Sitede yayınlanan RSS aboneliği site içeriğini takip ederler. Arama motorları ise site değişikliklerini takip etmek için site haritaları ve site beslemelerini kullanırlar. Peki, MVC ile geliştirdiğimiz sitemize web içerik besleme özelliğini nasıl bütünleştirebiliriz?

RSS Nedir ?

RSS (Really Simple Syndication) web içeriği abonelik formatıdır. RSS içeriği sabit bir xml yapısıdır. <rss> tagları arasında sitede yer tüm içeriği sunabilmektesiniz. Site haritası'na (sitemap.xml) göre çok daha gelişmiş ve detaylı bir veri yapısına sahiptir. 

RSS ve .NET

Bu kadar gelişmiş bir veri yapısını .NET ortamında nasıl yöneteceksiniz. Üstelik veri yapısı benzerde olsa atom gibi farklı bir  abonelik formatı daha  vardır. Tüm bu farklı besleme formatlarını destekleyen bir besleme kaynağı oluşturma aracına ihtiyacımız var. .NET yer alan SyndicationFeed sınıfı bu ihtiyacımızı karşılamaktadır.  SyndicationFeed nesnesi oluşturup site içeriğinizi feed.items altına doldurarak kendi besleme kaynağınızı oluşturabilirsiniz.

[class]


public SyndicationFeed CreateFeed()

    {
        var pages = _pageRepository.Query();

        var feed = new SyndicationFeed(

        _settingRepository[SiteSettingKey.SiteTitle],

         _settingRepository[SiteSettingKey.SiteSlogan],

         new Uri(_settingRepository[SiteSettingKey.SiteUrl]));

        feed.Categories.Add(new SyndicationCategory("Blog"));

        feed.Language = "tr-TR";

        feed.Copyright = new TextSyndicationContent(

        string.Format("{0} {1}", DateTime.Now.Year, _settingRepository[SiteSettingKey.SiteTitle]));

        feed.LastUpdatedTime = DateTime.Now;

        feed.Authors.Add(

        new SyndicationPerson

        {
            Name = _settingRepository[SiteSettingKey.SiteTitle],

            Email = _settingRepository[SiteSettingKey.Email]

        });

        var feedItems = new List<SyndicationItem>();


        foreach (var item in pages)

        {

            var sItem =

           new SyndicationItem(

            item.Title,

            null,  /*content*/

                                   new Uri(string.Format("{0}/{1}/{2}/{3}",

           _settingRepository[SiteSettingKey.SiteUrl],

           item.Published.Year,

           item.Published.Month,

           item.Slug)))

           {

               Summary = new TextSyndicationContent(item.Summary),

               Id = item.Slug,

               PublishDate = item.Created

           };

            sItem.Links.Add(

            new SyndicationLink

            {

                Title = item.Title,

                Uri =

            new Uri(string.Format("{0}/{1}/{2}/{3}",

           _settingRepository[SiteSettingKey.SiteUrl],

           item.Published.Year,

           item.Published.Month,

           item.Slug)),

                Length = item.ContentHtml.Length,

                MediaType = "html"

            });

            feedItems.Add(sItem);

        }

        feed.Items = feedItems;

        return feed;

    }

 

Yukarıdaki örnekte bir besleme kaynağı (feed) oluşturmuş olduk. Besleme kaynağı içerisine sitenin başlığı, URL bilgisi, dil bilgisi, yazar bilgisi gibi birçok bilgi eklenmiştir. Daha sonra sitede bulunan sayfalar feed içerisine eklenmiştir. RSS içerisine hem içeriğin özetini hem de içeriğin linkini ekledik. Böylece sitemize ait içeriği webde paylaşabilecek duruma geldik.

RSS ve MVC

RSS içeriğimiz tamam. Sonraki adım bu içeriği MVC sitemizde yayınlamak olacak. Oluşturduğumuz RSS içeriği kendi formatına sahip.  Browsera geri dönen değerin RSS formatına sahip olduğunu söylememiz gerekiyor. Böylece kullanıcı RSS içeriğini düzgün şekilde görüntüleyebilsin.


[class]

 

public class SyndicationFeedResult : ContentResult     {         public SyndicationFeedResult(SyndicationFeed feed)         {             using (var memstream = new MemoryStream())             using (var writer = new XmlTextWriter(memstream, System.Text.Encoding.UTF8))             {                 feed.SaveAsRss20(writer);                 writer.Flush();                 memstream.Position = 0;                 Content = new StreamReader(memstream).ReadToEnd();                 ContentType = "application/rss+xml";             }         }     }

 

Yukarıdaki kod bloğunda MVC ContentResult sınıfından türettiğimiz SyndicationFeedResult sınıfı  vardır. SyndicationFeedResult sınıfı içerik olarak, .NET’e ait SyndicationFeed nesnesini RSS  formatında serialize etmektedir. Veri içeriğinin Rss formatında olduğunu söylemektedir.  Tüm RSS içeriğini CreadFeed() ile oluşturduk ve RSS içeriğini istemciye uygun formatta ulaştıracak SyndicationFeedResult sınıfnı yazdık. Bir Action metot içinde site beslememizi paylaşabiliriz.


[class]

public SyndicationFeedResult Feed()         {             var feed = CreateFeed();             return new SyndicationFeedResult(feed);         }

 

Sonuç

RSS ve Atom gibi web içerik besleme yapıları gelişmiş veri yapıları ile çok detaylı bir şekilde içerik paylaşmamıza olanak sağlamaktadır. Bu gelişmiş veri yapısı ve farklı veri formatları ile uğraşmadan .NET SyndicationFeed sınıfını kullanarak içerik paylaşımı yapabilirsiniz. MVC ile SyndicationFeed sınıfını bütünleştirmek için yeni bir ActionResult sınıfını yazmalısınız. Özelleşmiş ActionResult sınıfınız içerik tipini RSS olarak ayarlayıp SyndicationFeed içeriğini döndürmelidir.

AYRICA FAYDALI BULDUYSANIZ AŞAĞIDAKİ LİNK ARACILIĞI İLE BANA BİR KAHVE ISMARLAYABİLİRSİNİZ.

https://www.patreon.com/barisgelebek


Yorumlar
Barış Gelebek 03.11.2018
En kısa zamanda paylaşacağım.

Salih Uçan 31.05.2018
Ne yaptıysam çalışmadı. Kaynak kodları var mı? İndirsek !


Yorum Yazınız:
Arama