ASP.NET’te Meta Tag’ların dinamik yüklenmesi

C#, VB.NET, ASP.NET Add comments

Bir html sayfası hakkında bilgi içeren, özetini sunan, hangi temel sözcükler üzerinde durduğunu bildiren, sayfanın ne zaman ve kimin tarafından hazırlandığını gösteren etiketlere meta tag denilir. Bir sayfaya ait üst veriler olarak tanımlanan meta tag etiketleri, description, keywords, author, classification, copyright, robots gibi değerlerden oluşur. Aşağıda, bu sayfanın örnek meta tagları bulunmaktadır;


Meta tagları ziyaretçiler için deÄŸil daha çok arama motorlarının o sayfayı doÄŸru ve kolayca analiz etmesi için düzenleriz. SEO(Search engine optimization – Arama motoru optimizasyonu) uygulamalarında en önemli iÅŸlemlerinden biri de sitedeki sayfaların meta taglarının güncellenmesidir. Hazırladığımız site veya sayfaların arama motorları tarafından kolayca indekslenmesi ve aramalarda üst sıralarda çıkması için anahtar kelime ve ifadeleri doÄŸru yerde etkili kullanmamız gerekmektedir. Google’a spideri olan freshbot robotu, sayfanın güncellenme sıklığına göre sitemize gelip sitede herhangi bir güncellemenin olup olmadığını denetler(Google dance). Bu süre zarfında siteye yeni içeriklerin girilmesi hem sitenin hitini artıracak hem de search engineler tarafından yeniden indekslenmesi saÄŸlanacaktır. Bu güncellemeyi meta taglarından baÅŸlatmamız daha doÄŸru olacaktır. Fakat çoÄŸu zaman bu kısa sürede sayfanın meta taglarını güncelleme imkanı bulamadığımız için veya sayfayı güncelleyip ftp ile yeniden host sunucusuna göndermeye erindiÄŸimiz için bu iÅŸi dinamik hale getirmek daha kolay bir çözüm olacaktır. .NET 2.0 doÄŸrudan sayfanın meta taglarına eriÅŸmemize imkan verir. Framework 2.0′ta bulunan System.Web.UI.HtmlControls.HtmlHead sınıfı aracılığıyla o sayfanın header kontrollerine eriÅŸebiliriz. Yine aynı ÅŸekilde Page nesnesinin Title property’si aracılığıyla her sayfanın Title bilgisini de dinamikleÅŸtirebiliriz.
Bu dinamik bilgileri bir veritabanından okumak işi daha da kolaylaştıracaktır.

protected void Page_Load(object sender, EventArgs e)
{
    string Keywords="Veritabanından gelen liste";
    string Description = "Veritabanından gelen açıklama";
    string Title = "Ahmet Kaymaz - Bu sayfaya özel başlık";
    //Keywords için bir meta tag nesnesi oluşturalım.
    HtmlMeta Meta = new HtmlMeta();
    //Meta tag nesnesine name ve content niteliklerini ekleyelim
    Meta.Attributes.Add("name", "keywords");
    Meta.Attributes.Add("content", Keywords);
    //Bu meta tagı sayfanın header listesine ekleyelim
    Header.Controls.Add(Meta);

    //Description için yeni bir meta tag nesnesi oluşturalım.
    Meta = new HtmlMeta();
    //Meta tag nesnesine name ve content niteliklerini ekleyelim
    Meta.Attributes.Add("name", "description");
    Meta.Attributes.Add("content", Description);
    Header.Controls.Add(Meta);

    //Sayfanın başlığını güncelle
    Page.Title = Title;

}//Page_Load
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	Dim Keywords As String = "Veritabanından gelen liste"
	Dim Description As String = "Veritabanından gelen açıklama"
	Dim Title As String = "Ahmet Kaymaz - Bu sayfaya özel başlık"
	'Keywords için bir meta tag nesnesi oluşturalım.
	Dim Meta As HtmlMeta = New HtmlMeta()
	'Meta tag nesnesine name ve content niteliklerini ekleyelim
	Meta.Attributes.Add("name", "keywords")
	Meta.Attributes.Add("content", Keywords)
	'Bu meta tagı sayfanın header listesine ekleyelim
	Header.Controls.Add(Meta)

	'Description için yeni bir meta tag nesnesi oluşturalım.
	Meta = New HtmlMeta()
	'Meta tag nesnesine name ve content niteliklerini ekleyelim
	Meta.Attributes.Add("name", "description")
	Meta.Attributes.Add("content", Description)
	Header.Controls.Add(Meta)

	'Sayfanın başlığını güncelle
	Page.Title = Title
End Sub

Bu işlemden sonra sayfanın meta bilgileri şu şekilde oluşmuş olacaktır.





Buradaki html kontrollerini kullanabilmek için System.Web.UI.HtmlControls sınıfını sayfaya import etmeyi unutmamalıyız.

Bu iÅŸi daha da geliÅŸtirerek sayfayı çağıran ziyaretçi, Googlebot(Google’ın arama robotu) ise ona özel title ve meta taglar sunabiliriz.

22 Responses to “ASP.NET’te Meta Tag’ların dinamik yüklenmesi”

  1. Necmi Kayıkcı Says:

    Hocam Allah(c.c.) razı olsun.Çok güzel bilgilendirme yazısı.Yalnız HtmlMeta() objesini sürekli oluşturmadan bir kere oluşturup seri halinde hepsini ekleyemezmiyiz.Örn:keywords için ayrı,description için ayrı değil de tek bir obje ve hepsini eklesin.Belki bir döngü ile olur gibi geliyo bana ama çok uğraşamadım vakit sıkıntısı nedeniyle bi sorayım dedim.Cevaplarsanız ne ala cevaplamazsanızda sağolun.

  2. Ahmet Kaymaz Says:

    Necmi bey,

    Bir meta tag elementi, bir HtmlMeta nesnesine denk geldiği için her meta tag elementi için nesneyi create etmek zorundasınız. Belki koleksiyon mantığıyla veya aşağıdaki gibi public bir metod tanımlayarak daha az satırla bu işi yapabilirsiniz.

    public class GenelIslemler{
    	 public static void MetaTagEkle(Page Sayfa, String Ad, String Aciklama){
    		HtmlMeta meta = new HtmlMeta();
    		meta.Name = Ad;
            meta.Content = Aciklama;,
    		(HtmlHead)Sayfa.Header.Controls.Add(meta);
    	 }
    }

    Bu metodu, meta taglarını düzenlemek istediğimiz sayfanın Load() metodunda çağırmamız yeterli olacaktır.

    GenelIslemler.MetaTagEkle(this.Page, "Title", "C# VB.NET SQL Server Oracle örnek ve kodları");
    GenelIslemler.MetaTagEkle(this.Page, "Author", "Ahmet Kaymaz");
  3. Burcu Says:

    Merhaba, benim meta tagların dinemik yüklenmesi ile ilgili bir sorum olacaktı. Sayfanın title, keywords ve description biligilerini cs tarafında atadığım değişkenlerden şu şekilde alıyorum.

    title>
    meta name=”Description” content=”" />
    meta name=”Keywords” content=”" />

    meta tagları bu şekilde ayarlayınca kendi bilgisayarımda değerleri sayfa yüklendikten sonra sourceda alabiliyorum. Ancak siteyi servera yükleyip dışardan erişmeye çalıştığımda ise ne baslık bilgisi görünüyor ne de keyword ve description bilgileri. Bunların görünmesini nasıl sağlarım. Yardımcı olursanız sevinirim.

    İyi Günler…

  4. Ahmet Kaymaz Says:

    Burcu Hanım,

    bahsettiğiniz c# kodları bana ulaşmadı. Yeniden yazabilirseniz belki yardımcı olabilirim.

  5. Murat Topçu Says:

    Meta tag değilde mesela bir tabloya hücre eklemek istesem yada herhangi bir html tagini özellikle server taraflı çalışmayan tagları düzenlemek istesem nasıl yapabilirim?

  6. Ahmet Kaymaz Says:

    İstemci tarafında HTML belgesi içinde herhangi bir düzenleme yapmak için VbScript, JavaScript gibi Client Side Script kullanmanız gerekir. ÖrneÄŸin sayfanın title’ni deÄŸiÅŸtirmek için
    <script language="javascript">
    document.title="C# örnekleri";
    </script>

    Aynı ÅŸekilde belgedeki Table, Tr, Td, a, span, div, img gibi html elementlerine eriÅŸmek için bu elementlerin ID bilgisi parametre alınarak "document.getElementById()" metodu kullanılabilir. Bu metodla elde edilmiÅŸ olan elementin property’leri(attribute’leri) kolaylıkla deÄŸiÅŸtirilebilir.

  7. Osman Says:

    Merhaba Ahmet Bey,
    Öncelikle bu çok faydalı bilgiler için teşekkür ederim. Ancak kafama takılan bir noktayı sormak istiyorum. Asp.Net 2.0 la birlikte gelen masterPage sayfalarında bu işlemi nasıl yapabiliriz.

    Bildiğiniz gibi masterPage sayfaları bir çok sayfaya giydirilmiş bir biçim gibi düşünülüp meta etiketleri bu alanda bulunuyor.

  8. Ahmet Kaymaz Says:

    Merhaba Osman Bey,

    .aspx sayfalarının MasterPage içerisinde olmasının bir farkı yok. Nihayetinde bu sayfalar, MasterPage sınıcının altında bir kontrol olduÄŸu için ve ContentPlaceHolder bileÅŸeni içerisindeki sayfadan master page’e eriÅŸilebildiÄŸi için bir kontrolün property’si set edilir gibi meta taglar kolayca deÄŸiÅŸtirilebilir. Master Page’in genel prototipi aÅŸağıdaki gibidir.
    <%@ Master Language="CS" %>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Untitled Page</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
    </div>
    </form>
    </body>
    </html>

    Bunun içerisine Urun.aspx sayfasını eklediÄŸimizi düÅŸünelim. Urun.aspx.cs dosyasından master.FindControl() yordamıyla ilgili alana eriÅŸilebilir. Fakat bu iÅŸin daha doÄŸru yöntemi olarak aÅŸağıdaki gibi bir satırla sayfanın Title alanı güncellenebilir. ASP.NET otomatik olarak master içerisinde de olsa o sayfanın baÅŸlığını deÄŸiÅŸtirir.

    Page.Header.Title = "C# ile ilgili örnekler"

  9. veysel Says:

    merhaba, en son bahsettiğiniz konuya ek bir soru sormak istiyorum. master page içinde olan bir form elemanı kullanmak için master.FindControl() ile bir kopyasını alıp çalışabiliriz. en azından öyle görünüyor. peki masterpage de bulunan bir elemana contentte bulunan başka bir form elemanındaki bilgiyi yada .vb içinden bir bilgiyi nasıl gönderebiliriz?
    yani: aynı masterpage’i kullanan 5 farklı aspx var diyelim. her birisi,kendisi çalıştığında masterpage de bulunan bir form elemanına bilgi göndermek için ne yapmalı. textbox örnek olabilir.
    şimdiden teşekkürler.

  10. Ahmet Kaymaz Says:

    Merhaba Veysel Bey,

    aslında istediğiniz şey önceki mesajda yazılmış. Eğer yanlış anlamadıysam alt sayfadan master sayfasındaki bir kontrole erişmek istiyorsunuz. Bunun için Master.FindControl() yordamını kullanmanız yeterlidir. Aynı şekilde eğer master sayfasından alt sayfadaki bir kontrole erişmek istiyorsanız master sayfasında ContentPlaceHolder1.FindControl() yordamını kullanabilirsiniz. Buradaki ContentPlaceHolder1 ifadesi, master page içerisinde alt sayfaların konulacağı yer tutucusunun adıdır. Örneği alt sayfadaki txtMusteri isimli bir TextBox kontrolünü set edelim.
    ((TextBox)ContentPlaceHolder1.FindControl(“txtMusteri”)).Text = “Müşteri Adı Ne Olsun”;

    Bu arada yeri gelmiÅŸken söyleyelim, Önce master page içerisindeki kontroller oluÅŸur ardından alt sayfaki kontroller oluÅŸur. Daha sonra önce alt sayfanın Page_Load eventi tetiklenir ardından master page’in Page_Load eventi tetiklenir.

  11. Mahmut Says:

    Hocam bu 3,5 da çalışmıyor.Acaba 3,5 için bir kod varmı?

  12. Ahmet Kaymaz Says:

    Mahmut,

    tam olarak hangi kodun çalışmadığını yazabilirsen daha iyi yardımcı olabilirim ama bu sayfada verilmiÅŸ kodların 3.5 için bir farklılığı olduÄŸunu sanmıyorum. Çünkü konuyla ilgili 3.5′ta herhangi bir deÄŸiÅŸiklik olmadı.

  13. Hasan Kaya Says:

    Düz bir HTML sayfası yazıp HEAD içerisine META DATA’ları yazmakla, bir aspx sayfası oluÅŸturup, Master Page kullanıp META DATA’ları dinamik olarak oluÅŸtumanın google bot’u için bir farkı varmı? Veya farklı bot’ların sayfayı indexlemesi için bir fark teÅŸkil edermi?

    T&eÅŸekkürler…

  14. Ahmet Kaymaz Says:

    Google gibi arama motorları kurallara göre yazılmış olan düz html sayfalarını daha kolay indekslemektedir. Metadata bilgisinin dinamik mi yoksa statik mi düzenlendiğini Google anlamayacağı sayfa güncellenmiş havası vermek için dinamik yapmanız daha faydalı olacaktır. Ama bu değişiklik yeterli olmayacaktır ayrıca sayfanın SEO kurallarına göre düzenlenmiş olması da önemlidir.

  15. Hasan Kaya Says:

    SEO kurallarına göre düzenlenmiş den kasdedilen nedir? Search yaptım ve sitenizle konuyla ilgili bir makale bulamadım. Önerebileceğiniz mümkünse türkçe kayan var mı?

    TeÅŸekkürler…

  16. Ahmet Kaymaz Says:

    SEO (Search Engine Optimization – Arama Motoru Optimizasyonu) ile ilgili seochat.com sitesini iyi bir kaynak olarak kullanabilirsiniz. Bu sitede google bot özelliklerini, pagerank belgelerini, keywork ile ilgili ipuçları bulabilirsiniz. Türkçe kaynak olarak Google’deki aramalarda denk gelmiÅŸtim. Onlar da sizin yararlı olabilir. SEO bu blogun konusu olmadığı için makale bulamamışsınızdır. Sadece ilgimi çeken bir konu olduÄŸu için sizin yönlendirmeye çalıştım.

  17. Ramazan ARSLANTÜRK Says:

    Merhabalar,

    Öncelikler, bilgiler için teşekkür ederim. Aşağıdaki kodu denedim. Fakat, Türkçe karakterler bozuk geliyor. Sebebi nedir acaba? Bir de this.Master.Page.Title komutunu üste de koysam alta da koysam, title en altta geliyor.

    Teşekkür ederim.

    AddMetaTag(“keywords”, “ekincioglutoys.com, oyuncak, oyuncax, AhÅŸap EÄŸitici Ürünler, …”);

    AddMetaTag(“description”, “ekincioglutoys.com EkincioÄŸlu Toys – Oyuncak Dünyası | Ekincioglu Toys – World of Kids”);

    AddMetaTag(“author”, “Deltasoft.com.tr E-Ticaret Sitesi”);

    AddMetaTag(“Robots”, “index, follow”);

    AddMetaTag(“Language”, “TR”);

    AddMetaTag(“verify-v1″, “1XAAiX59vqPQoCLaGlC+C2uHRyXauDxf4oedmXzjCGM=”);

    this.Master.Page.Title = “Oyuncak Dünyası – ekincioglutoys.com”;

  18. Ahmet Kaymaz Says:

    Türkçe karakter sorununun birkaç nedeni olabilir. web.config içerisinde aşağıdaki satırları ve meta-tag bölümüne de <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> satırını yazdığınızda karakterler doğru kodlanmışsa sorun çıkmayacaktır.

    <globalization
    culture="tr-TR"
    uiCulture="tr"
    requestEncoding="iso-8859-9"
    responseEncoding="iso-8859-9"/>

    Title alanının nerede çıkacağı Master Page içerisindeki HEAD etiketi altındaki TITLE etiketine bağlıdır. Örneğin aşağıdaki ifadede title bilgisini set ettiğinizde diğer tagların üstünde görünür.
    <head id="Head1" runat="server">
    <title>Untitled Page</title>
    </head>

    EÄŸer master page içerisinde HEAD » TITLE etiketi yoksa doÄŸal olarak sayfanın kontrollerini ekleyecek ardından Title gibi property’leri set edecektir.

  19. omerce Says:

    Hocam eline sağlık çok işime yaradı.

  20. Eren Says:

    Öncelikle yazınız için teÅŸekkürler, gerçekten faydalı bilgiler veriyorsunuz. Benim de yukarıda sorulanlara benzer bir sorunum var. MasterPage’de yazdığım meta taglarını bu MasterPage’i kullanan bir sayfada deÄŸiÅŸtirmek istedim ama “NullReferenceException” hatası alıyorum, oluÅŸturduÄŸum meta elementi boÅŸ görünüyor. Yardımcı olursanız sevinirim.

    HtmlMeta meta = new HtmlMeta();
    meta.Name = “keywords”;
    meta.Content = anahtarkelimeler;
    this.Header.Controls.Add(meta);

  21. Ahmet Kaymaz Says:

    MasterPage içerisindeki head etiketinin runat=server özellikli olduğundan emin miyiz. Tam olarak hangi satırda hata veriyor.

  22. Hakan hacıislamoğlu Says:

    meta tagları bir türlü satır başından başlamıyor..ne yapmam gerekiyor.

Leave a Reply


5 − = 3

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS GiriÅŸ