Konu Başlıkları
Yükleniyor...

Sayfalama mı, 'Tümünü Görüntüle' mü: Listelemede Doğru Karar

Sayfalama ve Tümünü Görüntüle: sınır, tercih hatırlama ve SEO

Uzun listeyi bölmek çoğu zaman zorunludur, ama bölmenin kendisi bir çözüm değil. Sayfalama kullanıcıyı listenin başında tutar, 'Tümünü Görüntüle' kararı ona bırakır. Hangisinin doğru olduğu estetik bir tercih değil; listenin ne için tarandığına bağlı.

Sayfalama neyi çözer, neyi çözmez

Sayfalama iki şeyi çözer: sayfanın ağırlığını ve ekrandaki karmaşayı. Çözmediği şey erişilebilirlik. 500 ürünlük bir kategoriyi 24'erli sayfalara böldüğünde 21 sayfan olur ve listenin son üçte biri pratikte kimsenin görmediği bir alana düşer. Yani sayfalama, sıralama ölçütünü sessizce en kritik tasarım kararı haline getirir. Sayfa 1'de ne varsa katalog odur.

Buradan çıkan sonuç şu: kullanıcı tek bir şey arıyorsa (bir model, bir beden, bir tarih) çözüm sayfalama değil, filtre ve arama. Sayfalama ancak liste zaten anlamlı bir sıraya girdikten sonra devreye girer.

Teknik tarafta da bedeli var. OFFSET 4800 LIMIT 24 tipi bir sorguda veritabanı 4824 satır üretip 4800'ünü atar; derin sayfalar ilk sayfadan kat kat pahalıdır. Ben bu yüzden derin sayfalamayı genelde offset yerine keyset ile çözerim: son görülen kaydın sıralama anahtarını taşıyıp WHERE (created_at, id) < (:son_tarih, :son_id) ile devam etmek, sayfa numarası kaybettirir ama sabit maliyet kazandırır. Sonsuz kaydırma ve "daha fazla yükle" düğmesi zaten sayfa numarası kullanmıyor, oraya birebir oturur.

'Tümünü Görüntüle' nerede kırılır

Bir listeyi tek ekranda görmek isteyen kullanıcı azınlık değil. Karşılaştırmalı seçim yapılan kategorilerde (mobilya, çiçek, hediyelik, kumaş) insan tek tek ürüne değil, bütünün görüntüsüne bakarak karar verir. Sayfa değiştirmek bu karşılaştırmayı böler.

Sınır ise ürün sayısıyla değil, ağırlıkla belirlenir. Kaba bir eşik vermek gerekirse 100-200 kalemin üstünde tek sayfa toplama başlar; ama asıl ölçüt görsel sayısı ve toplam transfer boyutudur. 300 metinsel satırı tek sayfada vermek sorunsuzdur, 120 ürün kartını 400 KB'lık görsellerle vermek mobilde felakettir. Kararı verirken ürün adedine değil, o sayfanın kaç istek ve kaç megabayt ettiğine bak. Lazy loading sınırı yukarı çeker, ortadan kaldırmaz.

Tercihi hatırlamak, ama URL'i bozmadan

Kullanıcı bir kez 100'lük görünümü seçtiyse bir sonraki kategoride de onu bulmalı. Buraya kadar tartışmasız. Sorun uygulamada: tercihi sadece çereze yazıp sunucuda çereze göre farklı liste basarsan aynı URL iki farklı çıktı verir. Bu hem paylaşılan bağlantıyı bozar hem de tarayıcı ve CDN önbelleğini yanıltır.

Doğrusu tercihi URL'e yansıtmaktır: ?adet=100. Çerez ya da localStorage yalnızca "kullanıcının son seçimi neydi" bilgisini tutar ve kullanıcı listeye çıplak bağlantıyla geldiğinde onu tercih ettiği parametreye yönlendirir. Böylece her görünümün kendi adresi olur, tercih de kaybolmaz.

Seçeneği de sayfanın kendi içinde, listenin hemen üstünde veya altında sun. Ayarlar menüsüne saklanan sayfa boyutu, olmayan sayfa boyutuyla aynı şeydir. İki anlamlı değer yeter: varsayılan bir sayı ve "tümü". 10/20/50/100/200 şeklinde uzayan kutular karar maliyetini artırmaktan başka bir işe yaramaz.

Varsayılanı ciddiye al

Kullanıcıların büyük kısmı bu ayara hiç dokunmaz. Yani sayfa başı adet aslında bir seçenek değil, senin verdiğin karardır; seçenek onu değiştirmek isteyen küçük gruba açılan kapıdır. Varsayılanı belirlerken "kaç ürün sığar" değil, "ilk ekranda kaç ürün görünmeli ki kullanıcı listenin devam ettiğini anlasın" sorusunu sor. Satır sonunda yarım kalan bir kart, listenin bittiğini sanmaktan iyidir.

SEO tarafında güncel durum

Sayfalanmış listelerle ilgili en yaygın hata eski tavsiyeleri uygulamaya devam etmek. rel="next" ve rel="prev" etiketleri Google tarafından indeksleme sinyali olarak kullanılmıyor; 2019'da bunu açıkça duyurdular. Zararı yok, faydası da yok.

İkinci hata: 2., 3., 4. sayfaların canonical'ını 1. sayfaya ya da "tümünü görüntüle" sayfasına vermek. Bu, o sayfalardaki ürünlerin bağlantı yoluyla keşfedilmesini engeller. Her sayfalanmış sayfa kendi kendisinin canonical'ı olmalı, başlık ve açıklamada sayfa numarası ayırt edici olarak geçmeli.

Site haritasına gelince, filtre ve sıralama kombinasyonlarından doğan URL'leri oraya koyma. Bunlar sonsuz sayıda üretilebilen, içeriği tekrar eden adreslerdir; tarama bütçesini yer. Site haritasında ürünün ve kategorinin kendisi bulunmalı, o kategorinin 47. sayfası değil.