18 Şubat 2014 Salı

E-ticaret sitelerinin trafiğini arttıracak 100 SEO önerisi (Alıntı)

 E-ticaret sitelerinin trafiğini arttıracak 100 SEO önerisi


"E-ticarette rekabet her gün biraz daha çetinleşiyor. Yüz binlerce dolarlık bütçelerin savaştığı Adwords hesapları, yaratıcılığın sınırlarını zorlayan sosyal etkileşimler bir yana bu rekabet en önemli trafik kaynaklarından biri olan organik trafiği de etkiliyor.
Bir çok ürün yayıncısının tercih ettiği XML formatındaki ürünler çift sayfa ve içerik problemlerine sebep oluyorken, etkili olmayan e-ticaret yazılımları & site mimarileri,  halen 2009 yılından kalma taktikleri uygulamaya çalışan rekabetçiler sayesinde arama motoru sonuçlarında önplanda olmak tahmin edildiği kadar zor değil. Ülkemizde sadece SEO’ya yönelik sınırlı sayıda ajansın olması ve büyük ajansların yan ürün olarak bu danışmanlığı satmak için kurdukları küçük ekipler sebebiyle ajanslardan da tam randıman almak mümkün olmayabilir.
Bu noktada benim görüşüm, tüm start-up kurucularının ve şirket yöneticilerinin organik trafik konusunda bilinçlenmeleri ve kendi bilgi birikimleri doğrultusunda da buraya yatırım yapmaları yönünde. Günümüz rekabetçi dünyasında her start-up sahibi veya profesyonel yönetici, kendisini en kalıcı ve etkili trafiklerden birini sağlayacak SEO hakkında iyi kötü bir bilgi birikimine sahip olmalı. Bu durum sadece şirketlerin SEO’yu kendi içlerinde çözmeleri için değil, çalıştıkları ajanslarla ortak dili kullanabilmeleri ve onların yaptığı işleri takip edebilmek için de çok önemli. Lafı fazla uzatmadan, SEOzeo’daki tecrübelerimize göre şekillendirdiğimiz e-ticaret sitelerinin trafiğini arttıracak 100 SEO önerisini sizlerle paylaşalım! Bu yazıda mümkün mertebe site-içi SEO sınırlarında kalmaya çalıştım, fırsat olursa site-dışı SEO ve e-ticaret siteleriyle ilgili ayrı bir çalışma yapacağım.
10 farklı başlıkta incelediğimiz 100 ipucunu ve her ipucuna ilişkin detayları aşağıda bulabilirsiniz. Ayrıca yazıyı checklist mantığından çıkarıp, rehber haline getirebilmek için her madde hakkında kendi arşivimden çektiğim 100 farklı makaleyi sizin için linkledim. Aklınıza takılan ya da detaylı bilgi istediğiniz yerlerde, her yazının sağında bulunan soru eklerine tıklamanız yeterli olacaktır.

1) Hedeflerinizi ve Stratejinizi Belirleyin

Arama motoru optimizasyonuna başlarken, yol haritanızı en doğru biçimde çizebiliyor olmanız önemli. Uzun vadeli bir yatırım olan SEO, boş vakitlerinizi değerlendirerek büyük başarılar sağlayabileceğiniz bir pazarlama kanalı değil. Bu yüzden her şeyi en başından planlamak ve hedeflenen noktayı bilebilmek için mutlaka bir başarı kıstası koymak gerekiyor. İster kendi projenizi, ister bir müşterinizin projesini yönetin; iş dünyasının KPI (Key Performance Indicator) adını verdiği bu başarı kıstaslarına bağlı kalmanız çok önemli! Eğer bu işin gerçekten hakkını vermek istiyorsunuz, mutlaka İngilizce bilmeniz ve günceli takip etmeniz gerekiyor.
  • SEO’daki hedefleriniz ve beklentilerinizi net bir biçimde belirleyin. (nasıl?)
  • Size gerçekten özgür hareket alanı sağlayacak bir e-ticaret sağlayıcısıyla çalışın/taşının. (hangisi?)
  • Reel dünyadan farklı olarak SEO rekabetçilerinizin kimler olduğunu araştırın. (nasıl?)
  • Stratejinizi hangi doğrultuda ilerleteceğinizi kararlaştırın. (Whitehat/Greyhat/Blackhat) (hangisi?)
  • Google Webmaster Tools ve Google Analytics kurulumlarınızı tamamlayın. (nasıl?)
  • Kendi SEO’nuzu kendiniz yapacaksanız SEO araçları için ciddi bir bütçe ayırın. (ne kadar?)
  • Projenizin son tarihlerini kaçırmamak için bir proje yönetim yazılımı kullanın. (hangisi?)
seo-10

2) Anahtar Kelime & Pazar Araştırması

Hedeflerinizi iyi kötü kestirdiniz ve proje planınızı yapmaya başladınız! Peki ya gerçekten uğruna bunca emek vereceğiniz pazar buna değer mi? Bunu anlayabilmek için Google & Bing & Yandex gibi veri sağlayıcıları size bir çok veri sunuyor. Elbette bunları size organik trafikte harika başarılar yaratmanız için paylaşmıyorlar. Reklamverenler için hazırlanmış bu güzel alanlardan, biraz da SEO meraklılarının faydalanmasında sanırım bir sakınca yoktur. Eğer işi gerçekten ileri seviyeye taşırsanız, aylar sonra elde edebileceğiniz trafik hakkında tahminlerde dahi bulunabilirsiniz!
  • Hedef pazarınızla ilgili mümkün olduğu kadar fazla bilgi toplayın. (nasıl?)
  • Daha fazla anahtar kelimeye ulaşmak için Google Keyword Planner kullanın. (nerede?)
  • Yurtdışı pazarları için Bing & Yandex Keyword Tool araçlarından faydalanın. (nerede?)
  • Türkiye pazarına yeni giriş yapan araçlardan SEMrush’ın nimetlerinden faydalanın. (nerede?)
  • Yine yurtdışı pazarı için ücretli çözümlerden SEMrush ve Wordtracker’ı inceleyin. (nerede?)
  • Eğer video odaklı bir strateji izleyecekseniz Youtube Keyword Tool’u araştırın. (nerede?)
  • Etkili bir forecast için dünyadaki arama motoru tıklama oranlarını (CTR) öğrenin. (nasıl?)
  • İyi bir karar verin, kısa anahtar kelimelere değil long-tail kelimelere odaklanın. (neden?)
  • Hedeflediğiniz pazar hakkında sürekli bilgi sahibi olmak için sıralama takip yazılımı alın. (hangisi?)
seo-9

3) Site Mimarisi ve Bilgi Akışı

Hepimiz için web sitelerimiz harika kullanıcı deneyimi sunan efsane ürünler! Peki ya arama motorları bunu böyle görüyorlar mı? Bilgi akışını kullanıcılarınız için harika tasarladığınızı düşünüyor olabilirsiniz ama arama motorları bunu bu şekilde değerlendirmiyor olabilirler. Her sayfanın altına yazdığınız onlarca etiket bilgisi ziyaretçileriniz tarafından hiç tıklanmıyor ve değer görmüyorken arama motorları tarafından ciddiye alınmasını bekleyemezsiniz. Bu yüzden her şeyi kenara bırakıp, sitenize Google gözüyle bakın ve gereksiz her şeyi sitenizden çıkarın. Temizlik bittiği zaman aslında yaptığınız şeyin sadece arama motorları için değil, tüm kullanıcılar için de faydalı olduğunu göreceksiniz.
  • Etkili bir site mimarisi ve bilgi akışı için “link juice” terimini öğrenin. (nedir?)
  • Mümkün olduğunca yalın ve detaylardan uzak bir URL yapısı üzerinde çalışın. (neden?)
  • Aklınızdaki site mimarisini Lucid Chart ya da Balsamiq ile dijital ortamda kağıda dökün. (nasıl?)
  • Sitenize ait kategorileri ve diğer alanları subdomain yerine klasörlerle ayırmayı tercih edin. (nasıl?)
  • Flat site architecture mimarisini öğrenin ve e-ticaret sitenizde uygulamaya çalışın. (nedir?)
  • Kullanıcı aramaları sayfalarının Google tarafından indekslenmesini engelleyin. (neden?)
  • Kullanıcıların arayabileceği kelimeler için, kullanıcı dostu landing pageler yaratın. (nasıl?)
seo-8

4) Crawl Analizi ve Teknik Problemler

Bilgi mimarisini kurguladıktan sonra artık yola çıkmaya hazırız demektir! Aslında hayır. Daha yapılması gerekilen nice testler var. Siz tüm yapıyı kusursuz olarak kurguladığınızı düşünüyor olabilirsiniz ancak arama motoru örümcekleri bunu nasıl görüyorlar konusunda empati yapmanız gerekecek. İşte harika empati kuran biz SEO profesyonelleri bu duruma crawl analizi diyoruz. Crawl yazılımlarını kullanarak, sitenizde bir yazılımın dolaşmasını sağlıyorsunuz. Bu yazılımlar, tüm sayfayı Google’ın yaptığı gibi geziyor ve problemleri tespit ederek sizle paylaşıyor. Böylece projenizi yayına dahi almadan Google tarafından ne kadar ciddiye alınabileceğini kestirebilirsiniz. Harika bir yapı kurgulamak her zaman olduğu gibi sizin elinizde!
  • Site yapısını Google gözüyle incelemek için Screaming Frog benzeri crawl yazılımlarını kullanın. (nerede?)
  • Sitenizin Google tarafından taranıp taranmadığını anlamak için “site:alanadi.com” şeklinde arayın. (nasıl?)
  • 4XX hata kodlu sayfalara giden linkleri temizleyin ya da URL’ler için sayfalar yaratın. (neden?)


  • Her ihtimale karşın 404 sayfalarınızı kullanıcıyı doğru bilgiye ulaştıracak biçimde optimize edin. (nasıl?)
  • 5XX hata kodlu sayfaları sistem yöneticinizle paylaşıp problemleri çözmelerini isteyin. (neden?)
  • 302 yani geçici yönlendirme kodlu sayfaları, 301 yani kalıcı yönlendirmelerle değiştirin. (neden?)
  • Parametrelerle türeyen bir URL yapısı varsa, sonsuz sayfa döngüleri olmadığından emin olun. (nedir?)
  • Sayfaların yükleme hızlarını Pagespeed ile kontrol edin. 70′in altında ise mutlaka optimize edin. (nerede?)
  • Resimlerin adlarının ve alt etiketlerinin ürün ya da kategori ile eşleşip eşleşmeidğini kontrol edin. (neden?)
  • Sizle aynı sunucuda kötü komşu olarak bilinen zararlı siteler olup olmadığını kontrol edin. (nereden?)
  • Tüm iyileştirmeleri yaptıktan sonra mutlaka kontrol amaçlı bir crawl test daha kurgulayın. (neden?)
  • Yayına çıktıktan sonra GWT aracılığıyla sayfanızın crawl performansını inceleyin. (nereden?)
seo-7

  5) İçerik Problemleri

Teknik problemler sadece arama motorları için değil, kullanıcılar için de büyük bir problem yaratıyor. SEO’nun temel felsefesi gereği, hem arama motoru hem de kullanıcıları düşünmek zorundayız. Harika bir site yapısı kurguladık, hiç bir yerde hata bulmak dahi mümkün değil! Bu durum malesef arama motoru örümcekleri için yeterli değil. Örümcekler sayfada ne kadar rahat geziyor olursa olsun, onları besleyecek temel gıda maddesinin içerik olduğunu unutmamamız gerekiyor. Bu yüzden, hem arama motoru örümcekleri hem de kullanıcılarınız için içerik yönünde neler yapabileceğinizi anlatacağım:
  • Sayfaların değerini hem anahtar kelime hem kullanıcı deneyimi açısından zenginleştirin. (nasıl?)
  • Google tarafından üç nokta ile kısaltılmamış başlıklar için 70 karakter sınırının altında kalın. (neden?)
  • Daha yüksek bir tıklama oranı sağlamak için, değerlerini düzenleyin. (neden?)
  • Google tarafından üç nokta ile kısaltılmamak için, açıklamaları 150 karakterin altında tutun. (neden?)
  • Sayfalarınızda etiketleriyle başlıklandırmalar yapılıp yapılmadığını kontrol edin. (nasıl?)
  • Kullanıcı deneyimini unutmaksızın, başlıklarınızda hedef kelimelerinizi kullanın. (neden?)
  • Ana sayfanız için yaratıcı içerik alanları yaratmaya çalışın. SEOzeo’nun örneğini inceleyebilirsiniz. (neden?)
  • Kategori sayfalarınız için yaratıcı içerik alanları yaratın. SEOzeo’nun örneğini inceleyebilirsiniz. (neden?)
  • Aynı içeriği birden fazla sayfada tutmayın. Örnek: siteniz.com/apple/ipad4 ve siteniz.com/tablet/ipad4 (neden?)
  • Sitenizdeki içeriklerin orjinal olup olmadığını kontrol edin. Siteliner aracını kullanabilirsiniz. (nerede?)
  • İçerik yönünden en zayıf sayfalarınızı crawl sırasında tespit edip çözüm planları yaratın. (nasıl?)
  • Farklı renklerde/boyutlardaki ürünler ayrı sayfalar yaratıyorsa tek bir sayfaya canonical işaretleyin. (nasıl?)
  • Ürünleri fiyat/stok vb. parametrelere göre sıralayan sayfaları tek bir sayfaya canonical işaretleyin. (nasıl?)
  • Sayfalandırmanın olduğu alanlarda rel=prev/rel=next etiketlerini kullanın. Sayfaları Google’a tanıtın. (nasıl?)
  • Ürün karşılaştırma sayfalarını canonical işaretleyin. Örneğin: (iPhone 5 vs. Galaxy S4) + (Galaxy S4 vs. iPhone 5) (nasıl?)
  • Yazıcı çıktısını al vb. çift içerik problemi yaratan alanları canonical olarak işaretleyin. (nasıl?)
  • Bir blog yaratın. Sıkça aranan yani kullanıcının aradığı konularda kullanıcı dostu içerik yaratın. (mesela?)
  • Sitenin (www/non-www) ya da (HTTP/HTTPS) versiyonlarının doğru olanına yönlenmesini sağlayın. (neden?)
  • GWT’da yer alan parametreler bölümüne girerek Google’ın nasıl değerlendirmesi gerektiğini belirtin. (nasıl?)
seo-6

6) Dahili Linkleme Ağacı

Tüm site yapınız artık sorunsuz gezilebiliyor ve içerik yönüyle de zengin. Ancak bunu daha da mükemmel bir hale getirebilmek için Google’a içerikleri daha etkin biçimde sunmanız gerekiyor. Bu noktada dahili linkleme ağacı yapısını ele almalı ve geliştirmeliyiz. Genellikle hepimizin gözünden kaçan ancak kullanıcı deneyimi ve arama motoru dostu bir yapı yaratmak için olmazsa olmaz olan maddeleri derledik.
  • Ana navigasyon alanlarından çıkan linklerin, arama kelimeleriyle uyuşup uyuşmadığını kontrol edin. (mesela?)
  • Sayfalarınızda gereksiz link çıkışlarının varlığını denetleyin. Fazla olanları atın. (neden?)
  • Breadcrumb yapısını uygulayın ve ön yüzde schema.org’da tarif edildiği biçimde eklemeye çalışın. (nasıl?)
  • Ürün açıklamaları ve blogdan kullanıcı deneyimini gözeterek site içerisine linkler verin. (mesela?)
  • Çok fazla kategoriye sahip olabilir misiniz? Kategorilemeleri gözden geçirin, gereksizleri eleyin. (neden?)
  • Etiketleme taksonomisi gibi eski tip sayfaları gerekli olmadığı sürece yaratmaktan kaçının. (neden?)
  • Sayfada görünmeyen ancak kaynak kodda listelenen footer navigasyonları varsa bunları kaldırın. (neden?)
  • İlgili ürünleri mutlaka aynı sayfadan bağlantılayın. Örneğin: iPhone 4 ve iPhone 4 kılıfları. (neden?)
seo-5

7) Kullanılabilirlik

Arama motorlarını, doğru yönlendirip istedikleri içerikle buluşturduktan sonra, daha etkili biçimde bağlayabilmek için dahili linkleri inceledik. Tüm bunların sonucunda aslında temelde istediğimiz şey, kusursuz kullanıcı deneyimini oluşturabilmek. Bunun en önemli parçalarından birisi de kuşkusuz kullanılabilirlik! Hem arama motorlarının, hem de kullanıcıların sitenizde daha etkili zaman geçirmesi ve elbette daha fazla satın alma yapması için bazı detaylara dikkat etmemiz gerekiyor.
  • Kullanıcı dostu e-ticaret sitelerini inceleyerek kendi tasarımınız için ilham almaya çalışın. (nasıl?)
  • Site-içi aramanıza güvenmeyin. Kullanıcı olarak aradığınızı bulup bulamadığınızı kontrol edin. (ne önerirsin?)
  • XYZ kullanarak tasarımınız hakkında bağımsız kullanıcılardan görüş isteyin ve düzenlemeler. (nerede?)
  • AJAX/Flash/JS gibi arama motorlarınca çok daha zor okunan teknolojileri kullanmaktan kaçının. (neden?)
  • Bedensel engelliler ve görme engelliler için uygun bir kullanıcı deneyimi sağlamaya çalışın. (nasıl?)
  • Yazı içeren resimleri font-face / Typekit vb. teknolojilerle örümceklerce okunabilir bir hale getirin. (nasıl?)
  • Çalışmalarınızı bitirdikten sonra içeriğinizin görünüp görünmediğini SEO Browser’lar ile test edin. (nasıl?)
  • Crazyegg gibi ısı haritası sağlayan sistemlerle kullanıcınızın odaklandığı yerleri tespit edin. (nereden?)
  • Sosyal sinyallerden tam anlamıyla faydalanmak için paylaşım butonlarınızın konumunu tekrar değerlendirin. (nasıl?)
  • Yeni tasarımınız hakkında insanlardan geri bildirim alın. Kahve ısmarlayın, geri bildirim alın. (mesela?)
seo-4

8) Yardımcı SEO Enstrumanları

Arama motorlarına tamamen uyumlu bir siteyi neredeyse oluşturduk! Şimd bazı yardımcı enstrumanlar kullanarak, arama motorlarının sitemizi daha doğru tanımasını sağlayacağız. Bunun için SEO’nun temel mantığı olan kullanıcı deneyimini sağlamanın ötesine çıkan bazı teknik düzenlemeleri de yapmamız gerekecek. Böylece olması gereken en ideal yapıya ulaşabileceğiz.
  • Üye girişleri/kayıt olma sayfaları vb. değer içermeyen alanları robots.txt kullanarak engelleyin. (nasıl?)
  • Google Shopping servisi için gerekli olan RSS beslemesini yaratın. Uzun vadede fayda sağlayabilir. (nasıl?)
  • Mutlaka site haritaları yaratın ve Google & Bing Webmaster Tools aracılığıyla sistemlere yükleyin. (nasıl?)
  • Site haritalarının “priority” ve “changefreq” değerlerini bilgi mimarisine göre optimize edin. (neden?)
  • Resim/video/haber dikeylerinde içerik üretiyorsanız, ilgili site haritalarını mutlaka yaratın. (nasıl?)
  • Daha iyi bir tarayıcı uyumluluğu için HTML sayfa yapılarınızın W3C uyumluluğunu denetleyin. (nereden?)
  • Bir adım daha ileriye gitmek için CSS’lerin W3C uyumluluğunu kontrol edin. (nereden?)
  • Microdata ve schema teknolojilerini araştırın. En ince detayına kadar sitelerinize entegre edin. (nereden?)
seo-3

9) Uluslararası SEO

SEO için gerekli olan bir çok değişikliği tamamladık. Peki ya siteniz sadece bir dile ya da bir ülkeye hizmet etmiyorsa? Onlarca kopya içerik problemine ve tanınamayan sayfa yapılarına hazırlanmalısınız! Ancak Google bunları öngörerek bizler için bazı hazırlıklar yapmış. Aşağıda bahsettiğim ipuçlarını uyguladığınız sürece uluslararası SEO kampanyası için korkmanıza gerek kalmayacak.
  • Dil ayrımını hangi seviyede yapacağınıza karar verin. Örneğin: Alan adı/subdomain/klasör/parametre. (mesela?)
  • Eğer bir site için spesifik bir bölge hedefleniyor, Google Webmaster Tools’ta tanımlanmalıdır. (nasıl?)
  • Farklı dil ve bölgeler için hreflang yapısını kullanın. İlgili sayfalar için doğru adresleri tanımlayın. (nasıl?)
  • Farklı dil ve bölgeler için özel hazırlanan site haritalarını kullanın ve Google’a gönderin. (nasıl?)
  • Çevirilerin doğru olup olmadığını anlamak için uygun fiyata proofreading servislerinden faydalanın. (mesela?)
  • Her ülke sayfasından, diğer dildeki ülke sayfalarına bağlantıların yönlendiğinden emin olun. (nasıl?)
  • Aynı dili konuşan farklı ülkeleri hedefliyorsanız (ABD vs. Kanada) içerik özgünlüğünü tekrar düşünün. (mesela?)
seo-2

10) Başarının Ölçümlenmesi

SEOZEO’da inandığımız en temel değerlerden birisi de, ölçümlenmeyen bir şeyin asla geliştirilemeyeceğidir! Bu yüzden yaptığımız tüm çalışmalarda ölçümlemeyi esas olarak almaya çalışıyoruz. SEO başarısını SERP düzeyinde ve Analytics düzeyinde iki farklı biçimde ölçümleyebilirsiniz. Başarıyı ölçmek için doğru metrikleri ve araçları kullanmak çok önemli. Bu yüzden sizin için hazırladığımız listeyi incelemelisiniz.
  • Çalışma başından sonuna kadar hedeflerinizi takip edin. Gerektiği zaman pivot etmekte cesur olun. (nasıl?)
  • Genel SEO gidişatını izlemek için SearchMetrics’in SEO görünürlüğü değerlerini takip edin. (nereden?)
  • Rakiplerinizin SEO görünürlüğünü ulaşabileceğiniz potansiyelin sınırlarını keşfetmek için kullanın. (nasıl?)
  • SEO başarısını takip etmek için Positionly vb. sıralama takip yazılımlarını kullanın. (nereden?)
  • Link inşaası çalışmalarının etkililiğini ölçmek için Positionly’nin notlar bölümünden faydalananın. (nasıl?)
  • Anahtar kelimelerinizi mutlaka gruplandırın. Örneğin “dekorasyon” ve “dekorasyon_mobilya” gibi. (nasıl?)
  • Tüm sayfalarınızda Google Analytics entegrasyonunun yapıldığından olduğundan emin olun. (nasıl?)
  • Google Analytics veya Omniture ile sürekli olarak organik trafiğinizi takip edin. (nasıl?)
  • Daha etkili bir analiz ve takip için Universal Analytics’e geçiş yaptığınızdan emin olun. (nasıl?)
  • Organik trafiği takip ediyorken ilizyona kapılmamak için markanızla ilgili aramaları dışarıda tutun. (nasıl?)
  • PPC ile organik trafiğinizi karıştırmamak için Analytics ve Adwords hesaplarınızı bağlayın. (neden?)
  • Sitede kalma süresi, gezilen sayfa sayısını artırmayı ve hemen çıkma oranını azaltmayı hedefleyin. (neden?)
  • Analytics için e-ticaret kurulumun yapın. Siz de organik aramanın ne kadar kârlı olduğunu keşfedin! (nasıl?)"


Not: Dökümanı çok beğendiğim için tamamen yayınlıyorum. Kaynak Webrazzi sitesinden alınmıştır. Böyle güzel yazı için emeği geçenlere teşekkürler. Adres: http://www.webrazzi.com/2014/02/16/eticaret-trafigini-arttiracak-100-seo-onerisi/

19 Nisan 2013 Cuma

Türkiye'de kayıtlı iPhone'a Google Map indirmek


En son IOS güncellemesi ile Apple şirketi kendi harita uygulamasını sunmuştu. Yeni haritası ile konum bulmak oldukça zor. Apple'ın daha önce kullandığı Google Map uygulaması Türkiye Apple Store'a açık olmadığından,  browser ile Google Map açıp,  ulaşmak istediğim noktayı bulmaya çalışıyordum.  Bu zor durumdan kurtulmanın bir yolu olduğunu fark ettim ve sizinle de paylaşmak istedim.


İşlemimiz çok kolay, Çözüm: hesabımızın tanımlı olduğu ülke bilgisini "United States" olarak ayarlamak ve uygulamayı indirmek :). Fakat bu yöntemi  iPhone üzerinden denediğimizde,uygulamayı indirirken sorun oluyor. Bu değiştirme sürecini iTunes üzerinden denediğimde başarılı bir şekilde Google Map uygulamasını indirebildiğimizi gördüm :)  İndirdikten sonra tekrar ülke konumunu Türkiye yapabilirsiniz :) 

Adım adım ülke değişimi ve sonucu ;






Not: Ödeme türü olarak "None" seçelim.




iPhone'daki hali :)

8 Nisan 2013 Pazartesi

LoadLibraryEx failed on aspnet_filter.dll (ISAPI) (Error - Solution)

Localhost da aldığım bir hata ve çözüm yolu;

LoadLibraryEx çağrısı ISAPI "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll





Çözüm için;


INETMGR (IIS Manager) üzerinde "ISAPI Filters" kısmında ASP.NET_4.0.30319.0 dışındaki "4.0_" la başlıyan filter dll lerini silelim. (aşağıdaki sarı ile işaretli olanları.)



Ayrıca "ISAPI and CGI Restrictions" bölümünden aşağıdaki gibi v4.0.30319 için izin verilmiş olması gerekmektedir.


5 Nisan 2013 Cuma

Returning a value from a thread - .NET

Basit bir paket gönderme programında oluşturduğum thread ler içerisindeki iş fonksiyonlarından sonuçları asekron bir şekilde okumam için yazdığım dinamik sınıf aşağıdadır.

ThreadExecuter sınıfım Thread içersinde çalıştırılacak sınıf fonsiyonu ve sonunda değer döndürecek bir fonksiyon istemektedir.
 
 
    public class ThreadExecuter where T : class
    {
        public delegate void CallBack (T returnValue);
        public delegate T Method();
        private CallBack callBack;
        private Method method;

        private Thread t;

        public ThreadExecuter(Method _method, CallBack _callBack)
        {
            this.method = _method;
            this.callBack = _callBack;

            t = new Thread(this.Process);
        }

        public void Start() 
        {
            t.Start();
        }

        public void Abort()
        {
            t.Abort();
            callBack(null);
        }

        public void Join()
        {
            t.Join();
        }

        private void Process()
        {
            callBack(method());
        }
    }

Test ordamında kodumuzu deniyelim.

 
namespace Tester
{
    class Program
    {
        static void Main(string[] args)
        {
            #region [ Paket Data]
             ...
            #endregion

            for (int i = 0; i < 20; i++)
            {
                Packet packet = new Packet() { Data = data, Host = "www.google.com.tr", Port = 80, Id = i };
                SocketManager sm = new SocketManager() { packet = packet };

                ThreadExecuter te = new ThreadExecuter(sm.Send, writeScreen);
                te.Start();
            }

            Console.WriteLine("bitti.");
            Console.ReadKey();
        }

        private static void writeScreen(Packet p)
        {
            Console.WriteLine(p.Id + " - " + p.Status.ToString());
        }
    }
}
 

Eğer ki Join kullanarak gerçekleştirdiğimizde ;

 ThreadExecuter te = new ThreadExecuter(sm.Send, writeScreen);
                te.Start();
                te.Join();



7 Mart 2013 Perşembe

Register COM dll on windows 64-bit

Karşılaştığım ve biraz zamanımı alan sorundan bahsedeceğim. 32bit COM dll i, 64bit windows sunucu üzerinde IIS de ASP.NET projesini çalıştırdığımızda aşağıdaki hata ile karşılaşırız.

Retrieving the COM class factory for component with CLSID {...} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Aşağıdaki komut ile COM DLL i sisteme tanıtsanız bile, hata devam etmektedir.


c:\windows\system32\regsvr32.exe < filename >.dll

Sorunu çözmek için IIS - pool tarafında ufak bir işlem ile bu sorunu aşmanız mümkün. "Enable 32 bit applications" özelliğini aktifleştirmek gerekir. 



Sorunumuz böylece çözülmüş olacaktır ;)

iyi çalışmalar...

12 Ocak 2013 Cumartesi

Distinct : DataView.ToTable Vs Linq


Büyük veriler üzerinde işlem yaparken, kullandığımız yönteme çok dikkat etmeliyiz.

Projelerden birinde 350.000 satırlık veri kümesi üzerinde işlemler yapıp, düzenli bir veri modeline dönüştüreceğim. işlemler sırasında Distinct() işlemi uygulamam gerekmekteydi. 2 yöntem kullanarak işlemi gerçekleştirdim ve aralarındaki uçurum inanılmaz farklı çıktı.

Distinct -> DataView.ToTable Vs Linq

veri sayımız küçük olduğunda DataView.ToTable ile işlem yapmasında performanse çok sorun oluşturmuyor gibi. ama veri kümesi arttıkça inanılmaz bir yavaşlama söz konusu. bu yavaşlamayı en kolay linq ile kolaylıkla çözmekteyiz.

Performans test kodları ve sonuçları;


data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");
VS
data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();

Veri kümemizi oluşturma işlemi;
private static DataTable GenerateTable(int noOfRows, int modules)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Role", typeof(string));
    dt.Columns.Add("DC1", typeof(string));
    dt.Columns.Add("DC2", typeof(string));
    dt.Columns.Add("DC3", typeof(string));
    dt.Columns.Add("DC4", typeof(string));
    dt.Columns.Add("DC5", typeof(string));
    dt.Columns.Add("DC6", typeof(string));
    dt.Columns.Add("DC7", typeof(string));

    for (int i = 0; i < noOfRows; i++)
    {
        int id = i % modules;
        dt.Rows.Add(new object[] { id, "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString(), "Test" + id.ToString() });
    }
    return dt;
}

Performans hesaplama kısmı;
 
static void Main(string[] args)
{
    Display display = null;
    for (int i = 1; i < 1000; i += 100)
    {
        DataTable data = GenerateTable(1000 * i, 10 * i);

        display = new Display();

        sw.Start();
        DataTable distictData = data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");
        display.ItemsInfo = data.Rows.Count + "/" + distictData.Rows.Count;
        display._ToTable = sw.ElapsedMilliseconds;
        sw.Stop();

        sw.Restart();
        var result = data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();
        display._Linq = sw.ElapsedMilliseconds;
        sw.Stop();

        list.Add(display);
    }

    writeConsole();

    Console.ReadKey();
}
 
private static void writeConsole()
{
    Console.WriteLine("ItemCount/DistinctItem  |  DataView ToTable   |   Linq");
    foreach (Display d in list)
    {
        Console.WriteLine(string.Format("         {0}            |         {1}         |   {2}", d.ItemsInfo, d._ToTable, d._Linq));
    }
}

Sonuçlar milliseconds olarak verilmektedir.

Bunun dışında Microsoft un yayınladığı bir makale daha var. Genel performans için dikkat edilmesi gerekenler.

Performance Tips and Tricks in .NET Applications -> http://msdn.microsoft.com/en-us/library/ms973839.aspx