Cumartesi, Ekim 22, 2011

crawlajax

ara motorlarının arası javascript ve ajax ile hiç iyi olmamıştır. HTML ve verinin aynı kaynaktan sunuluyor olmasından hiç hazetmeyen bir insan olarak SEO konusu çoğu zaman uygulama mimarisini belirlerken elimi kolumu bağlamıştır.

neyse ki google sonunda bu probleme şöyle bir çözüm sundu:

http://code.google.com/web/ajaxcrawling/docs/getting-started.html

eğer URL'inizde hashbang kullanırsanız, google hashbang'ten sonrasını alıp _escaped_fragment_ parametresiyle sunucunuza gönderiyor ve döndüğünüz cevabı indeksleyebiliyor.

sunucunuzda bir tarayıcı motoru kullanarak yazılmış veya HTML birim testleri için tasarlanmış araçlarla sayfanın hashbang'li adresini tarayıcıdan açmışcasına işliyorsunuz ve elde ettiğiniz DOM XML'ini cevap olarak basıyorsunuz.

google bunun için de htmlunit'i önermiş. yalnız bizim uygulamamız biraz ağır bir javascript uygulaması olduğundan HTML'in sunucuda işlenmesi çok uzun sürüyor ve performans problemlerine yol açıyordu.

bu noktada, performans konusunda, kullanılan araçtan bağımsız 3 tavsiyem olacak:
  • CSS renderi iptal edin ve CSS dosyalarına istek yapmadığınızdan emin olun.
  • resim, flash vs. isteklerini iptal edin.
  • sunucudan yaptığınız isteklerde kendinize özel bir user agent belirleyin, bu şekilde javascript tarafında isteğin googlebot isteği olduğunu farkedebilir, ve gereksiz işlemlerin önüne geçebilirsiniz (facebook ve google analytics istekleri gibi, bunlar sayfanın işlenme süresini oldukça olumsuz etkiliyor).
performans problemleri yaşanınca canlı sayfa işlemeye alternatif olarak, önden tüm siteyi dolaşıp sitenin DOMunun anlık bir görüntüsünü kaydetme ve googlebot geldiğinde statik içerik sunma yoluna yöneldik.

bu tarafta sayfanın işlenmesi işi için phantomjs'den faydalandık, sitenin dolaşımı için de kısa bir python kodu yazdık:


uygulama şu an sadece bizim ihtiyaçlarımızı görecek şekilde yazıldı, lütfen kendi ihtiyaçlarınız için projeyi çatallamaktan çekinmeyin.

ajax ve seo anahtar kelimeleri ile arama yaptığımda bir çok öneri bulabiliyorum ama çalıştırılmaya hazır, ürün haline getirilmiş bir şey bulamadım. bu projenin buradaki boşluğu dolduracağını umut ediyorum.

2 yorum:

  1. http://crawljax.com/ adsresindeki uygulama senin yaptigina benziyor mu?

    YanıtlaSil
  2. yok benzemiyor :)

    neden adinda "crawl" lafi geciyor bilmiyorum ama o proje sayfa taramasi yapmaktan ziyade, birim test yazarken kullanilsin diye tasarlanmis. crawlajax'i yazmadan once incelemistim kendisini.

    crawlajax'in amaci ise cok daha basit, google bot icin sitenizin html snapshot'ini uretiyor.

    fazlasini da yapmasini istemiyorum. yani url'lerinizde hashbang ("#!") kullanmiyorsaniz crawlajax'i da kullanamazsiniz.

    girdi sitenizin hashbang'li urli, cikti da tum sitenizin dom'unun kaydedilmis oldugu bir dizin, sitenizi statik olarak dolasmaniza i

    bunu hedefleyen ve yapan bir proje yok bildigim kadariyla.

    YanıtlaSil