Site İçi Arama: Ne Zaman Gerekir, Türkçede Neden Zorlaşır
Site içi arama, içerik hacmi belli bir eşiği geçen sitelerde menüden daha sık kullanılan gezinme aracına dönüşür. Ama her sitede gerekmez, gerektiği yerde de kurulumun çoğu yarım kalır: kutu vardır, arkasındaki sorgu Türkçeyi bilmez. Asıl mesele kutuyu koymak değil, sıfır sonuç oranını düşürmek.
Arama kutusu her sitede gerekmez
Sayfa sayısına dayalı eşikler, mesela 200 sayfayı geçtiysen arama koy tavsiyesi, ölçmesi kolay olduğu için tekrarlanıyor; gerçekte pek bir şey söylemiyor. Belirleyici olan başka: içeriğin birbirine ne kadar benzediği ve kullanıcının aradığı şeyi adlandırabilmesi. Kırk sayfalık bir API dokümantasyonunda arama menüden daha çok kullanılır, çünkü okuyucu tam olarak hangi fonksiyonu aradığını bilir. Üç yüz sayfalık kurumsal tanıtım sitesinde aynı kutuya kimse dokunmaz; ziyaretçi ne isteyeceğini bilmiyorsa yazacak kelimesi de yoktur.
Kutuyu koymak ucuz, arkasındaki dizini beslemek ve bakımını yapmak pahalı. Bir ay boyunca sorgu sayısını izle, ziyaretin binde birine bile denk gelmiyorsa arama kutusu o sitede yer kaplamaktan başka iş görmüyor demektir.
Varsayılan global arama olsun
Kapsam bazlı (scoped) arama, kullanıcının site yapısını bildiğini varsayar. Arama kutusunun var olma sebebi ise tam olarak bu varsayımın tutmaması. Ürün belgeleriyle blogu ayırt edemeyen biri yanlış bölümde arar, boş sonuç alır ve sitede aradığı şeyin hiç bulunmadığı sonucuna varır.
Kapsam daraltma yalnızca bölümlerin gerçekten ayrık olduğu yerlerde işe yarar: farklı ürünlerin ayrı dokümantasyonu, ayrı yıllara ait arşivler. Böyle bir yerde bile iki şart geçerli. Kutunun yanında hangi alanda arandığı yazacak, sonuç sayfasında da tüm sitede ara bağlantısı duracak. İkincisi yoksa kapsam daraltma kullanıcıyı kör noktaya hapseder.
Gelişmiş arama sayfası genelde ölü sayfadır
Operatörler konusundaki alışılmış tavsiye şu: ana kutuyu sade tut, AND/OR/NOT ile tarih ve kategori filtrelerini ayrı bir Gelişmiş Arama sayfasına taşı. İlk yarısı doğru, ikincisi pratikte çalışmıyor. O sayfaya kimse gitmiyor, çünkü arama yapan insan aklındaki kelimeyi yazıp sonuç bekliyor; form doldurmaya niyeti yok.
Filtreyi sorgudan önce değil sonra sun. Kullanıcı kelimesini yazar, sonuç listesinin yanında tarih, kategori ve içerik türü daraltmaları belirir; daraltmayı yapan kişi elindeki sonucu görerek karar verir ve kaç kaydın kaldığı anında bellidir. Operatör desteğine gelince, insanların önemli bir kısmı AND yazıp OR anlamını kastediyor, yani destek vermek yanlış sonucu meşrulaştırmak anlamına da geliyor. Sade bir kutu ve düzgün bir alaka sıralaması çoğu site için Boolean desteğinden fazlasını verir.
Türkçede sorgu farklı davranır
Arama kutusunun arkasına LIKE '%kelime%' koyma. İndeks kullanılamaz, tablo büyüdükçe sorgu doğrusal yavaşlar ve daha kötüsü, Türkçeyi hiç bilmez. Kullanıcı faturalarım yazdığında metindeki fatura kelimesi eşleşmez; ek kelimenin sonundadır ve alt dizi karşılaştırması kökü yakalamaz. Eklemeli bir dilde tek kök onlarca yüzey biçimiyle karşına çıkar, bu yüzden gövdeleme meselesi İngilizce sitelerdekinden çok daha erken devreye girer.
FULLTEXT indeksi hız tarafını çözer, ama varsayılanları kontrol et: InnoDB'de innodb_ft_min_token_size değeri 3'tür, yani ev, su, ad gibi iki harfli sorgular sessizce boş döner. MySQL'in yerleşik bir Türkçe gövdeleyicisi de yok; ya Elasticsearch'ün turkish analyzer'ı gibi bir katman kurarsın ya da sorguyu köke indiren basit bir ön işlem yazarsın.
Bir de büyük-küçük harf tuzağı var. mb_strtolower('İSTANBUL') çıktısı düz istanbul değildir, i harfinin üstüne ayrı bir birleşik nokta bırakır; aynı normalizasyondan geçmemiş sorguyla karşılaştırınca eşleşme kaçar ve hata da vermez. Dizine yazarken ve sorguyu çalıştırırken tek bir normalizasyon fonksiyonu kullan, ş/s, ı/i, ğ/g katlamasını da orada yap.
Sıfır sonuç bir hata sayfası değildir
Sonuç bulunamadı yazıp ekranı orada bırakmak kullanıcıyı sitenin dışına yollar. O ekranda yazım önerisi olmalı, sorgunun kelimelerinden biri düşürülerek yapılmış gevşek bir arama denenmeli, ilgili bölümün en çok okunan içerikleri gösterilmeli. Otomatik tamamlama da tam burada kazanıyor: kutuya yazarken çıkan öneriler sıfır sonuç ekranını baştan engellediği için, o ekranı sonradan güzelleştirmeye çalışmaktan hem ucuz hem etkili.
SEO katkısı sanılan yerde değil
Arama ve SEO yan yana anılınca akla ilk gelen şey arama sonuç sayfalarının da indekslenmesi oluyor. Doğrusu tersi. Arama motorları site içi sonuç sayfalarını kendiliğinden çoğalan, düşük değerli sayfalar sayar ve taranmalarının engellenmesini önerir. Filtre ve arşiv kombinasyonlarını sitemap'e doldurmak tarama bütçesini boşa harcar.
Asıl katkı sorgu kayıtlarında. Ziyaretçilerin kutuya yazdığı kelimeler, anahtar kelime araçlarından çıkan listelerden daha değerli, çünkü bunlar sitene zaten gelmiş insanların kendi kelimeleri. Sıfır sonuç dönen sorgular ise hazır bir içerik planı: sende aranan ama bulunamayan şeylerin listesi. Bu kaydı tutmuyorsan arama kutusunun SEO tarafında gerçekten hiçbir işi yok.