· kaynak Hacker News – Front Page (hnrss.org)
Sunucu tarafındaki kurallar, bir blogun tarayıcı User-Agent trafiğinin yüzde 74,5'ini insan kategorisinden çıkarıyor
Bir blog yazarı istekleri yalnızca sunucu tarafı sinyalleriyle — ASN ağ verisi ve Fetch Metadata başlıklarıyla — sınıflandırdı ve 372 tarayıcı User-Agent isteğinin 277'sini, yani yüzde 74,5'ini insan kategorisinden çıkardı.

Ölçümün ortaya çıkardığı
Hacker News'in ana sayfasında görünen, gkoreli.com'da yayımlanan bir blog yazısı, okuyucuları botlardan ayırmak için yalnızca edge'de görülebilen sinyallerle, JavaScript tabanlı herhangi bir tespit olmadan yapılan bir denemeyi anlatıyor. Yazar siteyi bir Cloudflare Worker üzerinden sunuyor ve uygun her başarılı sayfa GET'ini ağ verisi ve istek başlıklarını kullanarak sınıflandırıyor.
Öne çıkan rakam şu: ölçüm penceresi boyunca tarayıcı User-Agent taşıyan 372 isteğin 277'si bu kurallar tarafından Tarayıcılar kategorisinden çıkarıldı — yüzde 74,5. En büyük tek neden başlık anomalileri değil, ağ kaynağıydı. 3 Eylül'de sona eren 72 saatlik bir log örneğinde, 844 başarılı sayfa GET'inden 430'u gerçek sayfa gezinmelerine benziyordu ama barındırma ağlarından geliyordu. En büyük küme, 374 istekle, Chrome Mobile 114 olduğunu iddia eden tek bir Google Cloud istemcisine atfedildi ve tarayıcı kuralının uyguladığı her başlık kontrolünü geçti.
Başlık kontrolleri tek başına da bir miktar trafik yakaladı: ağ kurallarının bulut üzerinden taşıdığını sınıflandırdığı 60 istek, yine de tarayıcı kuralının gerektirdiği gezinme başlıklarını — Sec-Fetch-Mode: navigate ve Sec-Fetch-Dest: document — taşıyordu.
Yazar saymaya neden başladı
Soruşturma, iki sayaç arasındaki uyumsuzlukla başladı. 2 Eylül'de sona eren yedi UTC günlük dönemde, tarayıcı-UA sayacı 1.209 sayfa olayı ve 578 günlük istemci tanımlayıcısı kaydederken, dönen Cloudflare Web Analytics panosu 113 sayfa yüklemesi ve 52 ziyaret gösteriyordu. Yazar karşılaştırmanın temiz olmadığını belirtiyor: günlük istemci tanımlayıcısı bir ziyaret değildir, zaman pencereleri farklıydı ve betik tabanlı pano /stats rotasını içeriyordu.
Tek tek istekler toplamlardan daha tuhaftı. Mobil olarak sınıflandırılan bir istemci aynı saniye içinde 31 farklı sayfayı çekerken, 164 tarayıcı-UA sayfa gözleminin 156'sı referans olmadan geldi. Yazı, bu tür olguların tek başına otomasyon kanıtı olmadığını vurguluyor; yazar da tam bu yüzden iki sayıdan birine güvenmek yerine bir sınıflandırıcı kurmaya yöneldi.
Sınıflandırıcı nasıl çalışıyor
Kurallara dört girdi besliyor: Cloudflare'ın her bağlantıya eklediği otonom sistem numarası, Fetch Metadata başlıkları, Accept ve Accept-Language başlıkları ile User-Agent dizgesi. Bir istemci ASN'sini yeniden yazamaz; ancak siteye başka bir ağ ya da proxy üzerinden ulaşabilir. User-Agent ise istenildiği gibi taklit edilebilir. Sonuçlar, seçili başlıklar ve sınıflandırma gerekçeleri Cloudflare'ın D1 veritabanında saklanıyor; prefetch'ler, /stats rotası, API rotaları ve sayfa olmayan yanıtlar sayaç dışında tutuluyor.
İki sıralama kararı işin çoğunu yapıyor. Birincisi, özenle derlenmiş barındırma ağıları listesindeki istekler, gezinme başlıkları mevcut olsa bile, herhangi bir tarayıcı biçimi testi çalışmadan önce bulut tarayıcısı olarak etiketleniyor. İkincisi, modern bir motor — Chromium 76+, Firefox 90+ veya Safari/iOS 16.4+ — iddia eden ama Fetch Metadata içermeyen bir istek HTTP istemcisi olarak değerlendiriliyor; daha eski ya da okunamayan iddialar ise eski tarayıcı kategorisine düşüyor.
Denetim, yazarın kendi araçlarındaki hataları da yakaladı: Accept kontrolü bazı geçerli başlıkları yanlış ele alıyordu ve daha yeni kayıtlarda bir ağ-kökeni işaretçisi eksikti. İkisi de onarıldı.
Kanıtın bittiği yer
Yazı, Tarayıcı sayısının küçülmesinin gerçek okuyuculuğu kanıtlamadığını açıkça belirtiyor. Tamamlanmış iki UTC günü boyunca, geriye kalan 95 tarayıcı sınıflı HTML gözlemi, 14 Cloudflare Web Analytics sayfa yüklemesiyle hâlâ uyuşmuyordu. Yazara göre Cloudflare, betik engelleyicilerin ve tarayıcı ya da ağ kayıplarının beacon'un sayfa yüklemelerini kaçırmasına yol açabileceğini belgeliyor; bir betik otomatik bir tarayıcının içinde de eşit biçimde çalışabilir — yani iki sayaç da gerçek değer değildir. Saklanan dokuz imza doğrulaması belirli imzalayıcıları — tarayıcıları (crawler) ve kasıtlı testleri — tanımlıyor ama bir sayfayı okuması için bir asistana başvuran insanlar hakkında hiçbir şey söylemiyor.
Derlenen barındırma listesi ayrıca birkaç paylaşımlı servis ve tüketici VPN ağını dışarıda bırakıyor ve ters maliyeti kabul ediyor: bazı otomasyon, listenin kapsamadığı ağlardan gelecek. Ve bir bulut tarayıcısı bir insan için faydalı bir iş yapıyor olabilir; bu yüzden böyle bir trafik çöpe atılmak yerine kaydedilmiş ve görünür durumda kalıyor. Daha önceki iki altı doğrulama eşiği desteklenmediği için geri çekildi ve yazıdan çıkarıldı.
Neden önemli
Küçük bir kişisel bloga gelen tarayıcı User-Agent isteklerinin kabaca dörtte üçü bot sinyalleri taşıyorsa, tarayıcı UA'larını okuyucularla eşitleyen site analizleri kitleleri büyük olasılıkla abartıyordur — ve bu çarpıklık doğrudan reklam ekonomisine ve bir panodan alınan her karara akıyor. Yöntem sayı kadar önemli: ASN verisi ve Fetch Metadata sunucu tarafında, JavaScript'siz, parmak izi almadan ve gizlilik maliyeti olmadan edinilebiliyor; bu da proxy arkasındaki herhangi bir site için bu tür bir ölçümü ucuzca tekrarlanabilir kılıyor. Dürüst uyarılar — tek bir küçük site, kısa pencereler, gerçek okuyuculuk iddiası yok — bunu bir sayım değil başlangıç noktası yapıyor; ama otomatik gezinmenin ve yapay zekâ asistanlarının web trafiğindeki payının arttığı bir anda, iyi belgelenmiş bir başlangıç noktası.
- #web-analytics
- #bots
- #cloudflare-workers
- #fetch-metadata
- #traffic-measurement