Sitemap'ın öneminden ve nasıl üreteceğinizden daha önce bahsetmiştim (Dinamik sitemap.xml oluşturmak).

Sitemap.xml dosyanızı oluşturdunuz peki sonra?

Tabiki arama motorları servislerinin botları sitenize geldiğinde ilk olarak sitemap.xml'inizi bulmaya çalışacak, bulduğu zaman da site indeksini hızlıca çıkaracaktır. Fakat botlar sık sık sayfalarınızı gezse de sitemap.xml'inizi her zaman anlık olarak kontrol etmezler.

Arama motorlarının ping servisleri vardır ve bu servisleri kullanarak sitemap.xml'inizin güncellendiğini, hemen kuyruğa alınmasını istediğinizi belirtebilirsiniz. Bu uygulamayı birçok büyük web servisi, wordpress, blogger gibi blog hizmeti veren servisler, hatta kendi sunucunuza kuracağınız wordpress de bunu yapmaktadır.

Yeni bir içerik girildiği zaman sitenize yeni sayfalar eklenmiş, bazı varolan sayfaların da güncellenmiş olması anlamına gelmektedir. Arama motorlarının bu değişiklikleri hemen tarafamasını isterseniz az sonra anlatacağım ufak teknikle bunu yapabilirsiniz.

Ping servisleri

Arama motorlarının birçoğu ping servisini bir URL üstünden sitemap.xml dosyanızın adresini alarak yapar. Aslında bir çeşit kayıt olma işlemidir ama çok daha basit hali. Örneğin google'ın ping servisi
http://www.google.com/webmasters/sitemaps/ping?sitemap=
şeklindedir. Tabiki bu url'in sonuna sitenizin sitemap.xml dosyasının url'ini vererek bu adresi çağırmanız gerekir.

Şimdi kod üzerinde bir dizide popüler arama motorlarının ping servisleri ve yapılarını göreceksiniz. Zaten kodun yaptığı işi hemen anlayabilirsiniz. Basitçe sitemap.xml dosyanızı belirten urlleri "file" fonksiyonu ile almaya çalışıyoruz. Zaten bu url'ler ziyaret edildiği ve cevapları geldiği için bu servisler pinglenmiş olacak.
$services = array(
	'http://www.google.com/webmasters/sitemaps/ping?sitemap=

',

'http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=

',

'http://webmaster.live.com/ping.aspx?siteMap=

',

'http://www.bing.com/webmaster/ping.aspx?siteMap=

',

'http://submissions.ask.com/ping?sitemap=

'

); $mysitemapfile = 'http://mysite.com/sitemap.xml'; foreach($services as $service){ $url = str_replace('

', $mysitemapfile, $service);

@file($url); }
Hazırlayan : Mehmet Fatih YILDIZ
31 Aralık Perşembe ´09   —   13 Yorum
"Sitemap nedir önemi nedir" diyenler şuradan (Vikipedi: Site haritası) devam etsinler.

Şimdi gelelim öneminden çok üretilmesine. Basit bir xml aslında. Fakat eğer sürekli güncellenen yapıda bir siteniz var ise bu xml'i periyodik olarak yenilemeniz gerekir. Tabi ki yüzlerce sayfası olan bir sitede (örneğin blog) bu linklerin envanterini bir xml'de tutmak oldukça zor olacaktır.

Çoğu web uygulamasında sayfaların içerikleri veritabanında tutulan bilgilerin listelenmesi ve detay sayfalarından oluşmaktadır. Yazılar, Arşiv sayfaları, Fotograf sayfaları, Forumlar, forum konularının bulunduğu sayfalar vs. Bu sayfaları listeleyen/gösteren php dosyaları olduğunu düşünürsek sitemap.xml'i oluşturacak kodun bu içerikleri sadece adresleyerek listelemesini yapacak bir kod olduğunu söyleyebiliriz.

Bu içerikleri listeleyerek sadece o içeriklere ait sayfaların URL'lerini oluşturan bir php dosyası düşünün. Basitçe örnekleyeceğim.
Mesela forum adında bir tablonuz var ve bu forum'un site haritası için sadece URL'leri gerekli ve bunu oluşturan ufak bir kod vermek gerekirse :
// forum konularini veritabanindan alalim
$sorgu = mysql_query("select id from forum_konular order by tarih asc");

$forum_konu_adresleri = array();
while( $konu = mysql_fetch_assoc($sorgu) ){
	$forum_konu_adresleri[] = 'http://mfyz.com/?/konu/'. $konu[id] .'/';
}
bu kod, forum konularının sayfalarını URL dizisi olarak oluşturur. Yani 156 nolu forum konusuna erişilecek URLhttp://mfyz.com/?/konu/156/ şeklindeyse bu URL'i veritabanının yapısına göre oluşturduğunuzu düşünün.

Şimdi sitenizin diğer bölümlerini de bu URL listenize ekleyin. Bu liste 50.000 URL'e kadar olabilir, çünkü sitemap.xml dosyalarında en fazla 50.000 url indeksleyebilirsiniz.

Bütün url listenizi oluşturduğunuzda aşağıdaki yapıda bir XML oluşturmak için gerekli ufak php kodunu vereceğim.
Önce örnek bir sitemap.xml dosyasına bakacak olursak :
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fem14.tr.gg/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<url>
		<loc>http://www.mfyz.com/adres1</loc>
		<lastmod>2007-10-10</lastmod>
		<changefreq>daily</changefreq>
		<priority>0.9</priority>
	</url>
	<url>
		<loc>http://www.mfyz.com/adres2</loc>
		<lastmod>2007-10-10</lastmod>
		<changefreq>monthly</changefreq>
		<priority>0.5</priority>
	</url>
</urlset>
Burada urlset nodu içinde url elementini ve loc, lastmod, changefreq, priority alt elementlerini görebilirsiniz. Şimdi basitçe elinizde olan sitedeki tüm sayfaları belirten URL dizisini dönüp bu XML'i oluşturabiliriz.

Eğer veritabanınınzda bu sayfaların oluşturulma tarihleri gibi bir bilgi saklıyorsanız XML'de bunu belirtmeniz iyi olacaktır. Bundan önemlisi changefreq ve priority'dir. changefreq belirttiğiniz url'deki sayfanızın değişme sıklığını arama motoruna söyler. Arama motoru da o değişiklik sürecine göre o sayfayı o periyodda tarayacaktır. Priority de o sayfanın sitenizdeki içerik etkisini ifade edebilir. Mesela forum sitenizin asıl içeriği olmayabilir, ya da fotograflar sitenizin içeriğine çok etkisi olabilir ve 0-1 arasında yüzdelik belirtir gibi öncelik belirtebilirsiniz.

Şimdi bir URL dizisini sitemap.xml dosyasına çevirecek php koduna bakarsak :
// begin xml content
$XML_Content = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fem14.tr.gg/schemas/sitemap/0.9 '."\\n".
'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\\n";

foreach ($urllist as $url){
	// defaults
	$date     = date('Y-m-d');
	$freq     = 'monthly';
	$priority = '0.5';

	// setting values
	if( is_array($url) ){
		// custom params
		if( $url[date] )     $date     = $url[date];
		if( $url[freq] )     $freq     = $url[freq];
		if( $url[priority] ) $priority = $url[priority];
		$url = $url[url];
	}else{
		$url = $url;
	}

	// adding to xml content
	$XML_Content .= "\\t<url>\\n".
	"\\t\\t<loc>$url</loc>\\n".
	"\\t\\t<lastmod>$date</lastmod>\\n".
	"\\t\\t<changefreq>$freq</changefreq>\\n".
	"\\t\\t<priority>$priority</priority>\\n".
	"\\t</url>\n";
}

$XML_Content .= "</urlset>";
en son XML_Content değişkeninde sakladığınız içeriği
$file = fopen('sitemap.xml', 'w') ){
fwrite($file, $XML_Content);
fclose($file);
ile sitemap.xml dosyası olarak kaydedebilirsiniz. Bu işleri yaptırdığınız php dosyasını da sunucunuzun cron'una haftada veya ayda bir çalışacak şekilde ayarlarsanız site içeriğinizi düzenli olarak bu dosyada toplayabilirsiniz.

Siteye yeni bir içerik eklendiği zaman da bu betiğinizi tekrar çalıştırarak eklenen içeriği doğrudan sitemap.xml'inize ekleyebilirsiniz.

Google Webmaster Tools kullanarak bu sitemap.xml dosyanızı google botlarına düzenli kontrol etmesi için gönderebilir, google'ı pingleyerek bu dosyayı taramasını söyleyebilirsiniz. Arama motoru servislerini pinglemek ile ilgili konuyu başka bir yazıda anlatacağım.

Hazırlayan : Mehmet Fatih YILDIZ

Popüler Etiketler

twitter portfolio ie css3 support browser subversion svn url gimp apple macosx ui ux icons spam windows developer html bootstrap örnek kod php date sql diff social integration api service network blog internet statistics nedir mootools rss lifestream parse xml mfyz design framework mail newsletter subscription logo html5 code development while iphone doritos kampanya tytz wanda ipad firefox download object facebook connect box coding less css javascript cache htaccess apache xhtml job digital search google git version control deployment osx player chart applications free opengraph fql optimization pear mdb2 prepare execute injection tool mysql mssql pgsql imza signature link compile form radio style ios app store store in-app purchase purchase verification storekit itunes connect itunes server phpstorm jetbrains ide editor mobile table media wordpress dokuman plugin sitemap generator button jquery linux medya export app fstab ntfs oyun switch konsol terminal zaman language js textarea iOS session internet explorer startups xmlhttprequest ajax auth http icon ikon grafik banner calendar kitap tarih db database cms wireless sosyal istatistik graph share license lisans ubuntu workspace screen regex login webkit kontrol yapıları if query select browsers music www subdomain redirect crossdomain ruffles seo optimizasyon input analyse procedure widget meta ipucu proje howto nasıl tebrik web app pharma hack notebook laptop cookie kurulum insanlar route router mod_rewrite assets compiler on-the-fly open source