PHP ile Arama Motoru Tespiti Nasıl Yapılır

PHP ile arama motoru tespiti, User-Agent ve DNS doğrulama, SQLite önbellek ve pratik kod örnekleriyle adım adım anlatım.

×

PHP ile Arama Motoru Tespiti Nasıl Yapılır

Web sitenizin trafiğini anlamanın en kestirme yollarından biri, ziyaretçilerin bir arama motoru botu mu yoksa gerçek bir kullanıcı mı olduğunu tespit etmektir. PHP ile Arama Motoru Tespiti Nasıl Yapılır sorusunun cevabı, hem performans optimizasyonu hem de SEO stratejinizi keskinleştirmeniz için kritik önemdedir. Doğru tespitle sayfa önbellekleme stratejilerinizi ayarlayabilir, useragent tespiti üzerinden isabetli veri toplayabilir, hatta botlar için gereksiz maliyet yaratan ağır scriptleri devre dışı bırakabilirsiniz. Bu yazıda, pratik kod örnekleri, php crawler yazarken yaklaşım önerileri, veriyi kalıcılaştırmak için sqlite kullanımı ve güvenilir bot doğrulama teknikleriyle uçtan uca bir rehber bulacaksınız.

Arama motoru botları neden tespit edilmeli

Arama motoru botlarının davranışı, gerçek kullanıcı deneyiminden farklıdır. Botlar genelde JavaScript çalıştırmaz, sayfaları hızlı tarar ve belirli User-Agent imzalarıyla gelir. PHP ile Arama Motoru Tespiti Nasıl Yapılır konusu, bu farkları ölçülebilir bir yapıya dönüştürmeyi hedefler. Böylece bot-trafik oranınızı izleyebilir, tarama bütçenizi optimize edebilir ve analytics verilerinizin doğruluğunu artırabilirsiniz.

Doğru tespit; sunucu yükünü dengeler, 404 ve yönlendirme kurallarınızı iyileştirir, hatta CDN ve önbellek politikalarınızı akıllı hale getirir. Örneğin Googlebot geldiğinde dinamik olarak AMP veya hafifletilmiş sürümü göstermek isteyebilirsiniz. Aynı şekilde düşük kaliteli botları tespit ederek hız limitleri uygulayabilirsiniz.

  • Analitik doğruluğu: İnsan trafiği ile bot trafiğini ayrıştırın.
  • Performans: Botlar için ağır bileşenleri devre dışı bırakın.
  • Güvenlik: Şüpheli tarayıcı ajanlarını sınırlayın veya izleyin.
  • SEO: Tarama bütçesini verimli kullanacak yollar planlayın.

User-Agent temelli tespit nasıl çalışır

Temel yöntem, HTTP User-Agent başlığını okumaktır. PHP ile Arama Motoru Tespiti Nasıl Yapılır dendiğinde en hızlı yaklaşım, bilinen bot imzalarıyla eşleşme kontrolüdür. Ancak salt User-Agent eşleşmesi tek başına yeterli değildir; sahte User-Agent yaygındır. Bu yüzden DNS doğrulaması ve IP aralıkları gibi ek kontrollerle süreç güçlendirilmelidir.

Özet akış: User-Agent’i al, bilinen bot modelleriyle karşılaştır, eşleşirse reverse DNS kontrolü yap, ardından forward DNS ile doğrula. Bu kombinasyon, sahte kimlikleri önemli ölçüde eler. İlerde anlatacağımız sqlite kullanımı ile bu bot imzalarını ve doğrulama sonuçlarını mini bir veritabanında saklamak pratik olur.

  • User-Agent eşleştirme: Basit ve hızlı ilk filtre.
  • Reverse DNS doğrulaması: Botun gerçekten o alan adına ait olup olmadığını test eder.
  • IP aralığı beyaz listesi: Resmi ağ bloklarını doğrular.
  • Önbellekleme: Daha önce doğrulanmış botlar için tekrar maliyetini düşürür.

PHP ile pratik bir User-Agent tespiti

Başlangıç için hafif bir eşleştirme yeterli olabilir. Aşağıdaki kod, User-Agent içinde yaygın arama motoru imzalarını arar. Elbette bu listeyi düzenli güncellemek gerekir.

Bu yaklaşım, PHP ile Arama Motoru Tespiti Nasıl Yapılır sorusunun giriş seviyesi cevabıdır. Bir sonraki başlıkta DNS doğrulaması ve kayıtlı ağ aralıkları ile daha sağlam bir kontrol ekleyeceğiz.

  • Googlebot, Bingbot, YandexBot, Baiduspider gibi imzaları kapsayın.
  • Case-insensitive arama kullanın.
  • Bot olduğunu düşündüğünüzde daha ileri doğrulamaya geçin.

Örnek kod basit eşleştirme

DNS ile bot doğrulaması

Sahte User-Agent’ları elemenin en etkili yollarından biri reverse DNS kontrolüdür. Örneğin Googlebot’lar genellikle .googlebot.com veya .google.com alan adlarına çözümlenir. Aşamalar sırasıyla: IP’yi reverse DNS ile host adına çevir, host adını tekrar IP’ye çevir, ilk IP ile eşleşmesini doğrula. PHP ile Arama Motoru Tespiti Nasıl Yapılır diyenler için bu yöntem kritik bir ikinci bariyerdir.

Aşağıdaki kod, reverse ve forward çözümlemesini birlikte yapar. Host adının beklenen alan adıyla bittiğinden emin olur; ardından IP eşleşmesini doğrular.

  • gethostbyaddr ile reverse çözümleme
  • gethostbyname ile forward doğrulama
  • Alan adı soneki kontrolü

Örnek kod DNS doğrulaması

SQLite kullanımı ile beyaz liste ve önbellek

Her istekte DNS doğrulaması yapmak maliyetlidir. Bu nedenle sonuçları küçük ve hızlı bir veritabanında saklamak mantıklıdır. İşte burada sqlite kullanımı devreye girer. PHP’nin PDO ile SQLite desteği sayesinde dosya tabanlı bir DB oluşturabilir, IP ve host doğrulama sonuçlarını TTL ile önbelleğe alabilirsiniz.

PHP ile Arama Motoru Tespiti Nasıl Yapılır sürecinde SQLite, konfigürasyon içermeyen kurulumuyla idealdir. Basit bir tablo, IP, host, doğrulama sonucu ve son kontrol zamanını tutar. İstek geldiğinde önce bu tabloya bakar, TTL dolduysa DNS kontrolünü yenilersiniz.

  • Kolay kurulum: Sunucuda ekstra servis gerekmez.
  • Düşük gecikme: Sadece dosya I/O.
  • TTL stratejisi: Örn. 6-24 saat arası.
  • Ek alanlar: User-Agent, kaynağın referansı, isabet sayısı.

Örnek kod SQLite önbellek

ttl = $ttlSeconds; $this->pdo = new PDO('sqlite:' . $path, null, null, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); $this->init(); } private function init(): void { $this->pdo->exec(" CREATE TABLE IF NOT EXISTS bot_verification ( ip TEXT PRIMARY KEY, host TEXT, ua TEXT, is_verified INTEGER, source TEXT, updated_at INTEGER ); "); } public function get(string $ip): ?array { $stmt = $this->pdo->prepare("SELECT * FROM bot_verification WHERE ip = :ip"); $stmt->execute([':ip' => $ip]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) return null; if ((time() - (int)$row['updated_at']) > $this->ttl) return null; return $row; } public function set(string $ip, string $host, string $ua, bool $isVerified, string $source): void { $stmt = $this->pdo->prepare(" INSERT INTO bot_verification (ip, host, ua, is_verified, source, updated_at) VALUES (:ip, :host, :ua, :is_verified, :source, :updated_at) ON CONFLICT(ip) DO UPDATE SET host=excluded.host, ua=excluded.ua, is_verified=excluded.is_verified, source=excluded.source, updated_at=excluded.updated_at "); $stmt->execute([ ':ip' => $ip, ':host' => $host, ':ua' => $ua, ':is_verified' => $isVerified ? 1 : , ':source' => $source, ':updated_at' => time() ]); } } // Kullanım $cache = new BotCache(__DIR__ . '/bot_cache.sqlite', 21600); // 6 saat $cached = $cache->get($ip); if ($cached) { $isVerified = (bool)$cached['is_verified']; } else { $host = gethostbyaddr($ip); $isVerified = false; if ($host && $host !== $ip) { $isVerified = ( (endsWith($host, '.googlebot.com') || endsWith($host, '.google.com')) && gethostbyname($host) === $ip ) || ( endsWith($host, '.search.msn.com') && gethostbyname($host) === $ip ); } $cache->set($ip, $host ?: '', $ua, $isVerified, 'dns'); } ?>

php crawler geliştirirken bot ve anti-bot dengesi

Kendi php crawler aracınızı yazarken de etik ve teknik dengeye dikkat etmelisiniz. Robots.txt kurallarına uyun, tarama hızını sınırlandırın ve tarama sırasında sunucuya aşırı yük bindirmeyin. Aynı mantık, kendi sitenize gelen crawler’lar için de geçerli: iyi botları doğrulayın, kötü niyetli veya aşırı agresif olanları hızlandırmadan sınırlayın.

PHP ile Arama Motoru Tespiti Nasıl Yapılır sürecindeki verileri, kendi crawler’ınızın davranışını kalibre etmekte kullanabilirsiniz. Örneğin taradığınız sitelerin yanıt sürelerini izleyerek bekleme süresi dinamik ayarlamak, hata kodlarında otomatik geri çekilmek ve User-Agent’tan net bir iletişim sağlamak iyi birer uygulamadır.

  • Robots.txt’ye saygı gösterin.
  • Rate limit uygulayın ve bekleme sürelerini değişken yapın.
  • Tanımlayıcı bir User-Agent kullanın.
  • HTTP hata kodlarına göre davranışı ayarlayın.

Crawler tarafında pratik öneriler

Basit bir Guzzle veya cURL tabanlı istekçiyle başlayın. Paralellik sayısını düşük tutup ölçülen gecikmeye göre artırıp azaltın. Hedef sitenin saat dilimini ve yoğunluk zamanlarını dikkate alın.

Tarama sırasında elde ettiğiniz verileri hafif bir sqlite kullanımı ile saklayarak tekrar ziyaretleri optimize edin. Etag/Last-Modified başlıkları üzerinden koşullu GET kullanarak gereksiz veri transferini azaltın.

  • Koşullu GET ile bant genişliğini düşürün.
  • Retry stratejisini jitter ile uygulayın.
  • Robots.txt ve sitemap.xml’den başlangıç URL’leri çıkarın.

İleri seviye stratejiler ve pratik ipuçları

DNS ve User-Agent doğrulamasına ek olarak, hız ve isabeti artıracak bazı püf noktaları vardır. Örneğin doğrulanmış botlar için farklı önbellek katmanı açmak, izleme panosunda bot-insan dağılımını görselleştirmek ve belirli botlar için özel yönlendirmeler yapmak bunlardan bazılarıdır.

PHP ile Arama Motoru Tespiti Nasıl Yapılır sorusuna yanıt verirken, altyapınızın ölçeğini ve trafiğinizi göz önünde bulundurun. Yüksek trafikte IP tabanlı limitler, Cloud WAF kuralları ve log analizi ile entegrasyon büyük fark yaratır.

  • Gerçek zamanlı metrikler: Bot istek oranı, doğrulama başarısı.
  • Özel rotalar: Botlara hafif HTML, kullanıcılara zengin deneyim.
  • Log korelasyonu: 4xx/5xx oranlarını botlara göre ayırın.

Örnek: middleware ile karar verme

Uygulama seviyesinde küçük bir katman, her istek için kimlik kontrolü yaparak response’u şekillendirebilir. Örneğin doğrulanmış botlara minimal CSS ve sadece kritik içerik sunabilirsiniz.

Bu mantık, sayfa hızını artırır ve tarama bütçesinin doğru yerlere harcanmasına yardımcı olur. Aşağıdaki pseudo-akış basit bir yönerge sunar.

  • İstek geldiğinde cache kontrolü
  • Cache yoksa DNS ve User-Agent doğrulaması
  • Sonuca göre response varyantı seçimi

Güvenlik ve yan etkiler

Yanlış pozitifler, iyi botları engelleyebilir; yanlış negatifler ise sahte trafiği kullanıcı gibi algılayabilir. Bu nedenle kuralları yavaşça sıkılaştırın, önce izleme modunda çalıştırın. Ayrıca ağ kesintileri reverse DNS’i etkileyebilir; TTL ve geri dönüş stratejileri belirleyin.

PHP ile Arama Motoru Tespiti Nasıl Yapılır sürecinde loglama kritik önemdedir. Tüm kararları, kullanılan yöntemleri (UA, DNS), sonuçları ve süreleri kaydedin. Bu kayıtlar, hatalı eşleşmeleri geri almak için altın değerdedir.

  • İzleme modu ile başlatın.
  • TTL değerlerini kademeli ayarlayın.
  • Hata ve gecikmeleri raporlayın.

Performans iyileştirme ve önbellek

DNS sorguları yavaştır. Bu yüzden sonuçları bellek veya disk tabanlı cache’te saklamak büyük hız kazandırır. SQLite, dosya tabanlı bir çözüm olarak pratik ve yeterince hızlıdır. Daha ileri seviyede APCu veya Redis gibi çözümlerle hibrit mimari kurabilirsiniz.

Önbellek; User-Agent imzası, IP ve host adını bir arada kullanmalıdır. Böylece IP değişse bile sahte pozitif ihtimalini düşürürsünüz. PHP ile Arama Motoru Tespiti Nasıl Yapılır denince iyi bir önbellek politikası, en az doğrulama kadar önemlidir.

  • APCu ile kısa süreli bellek cache.
  • SQLite ile kalıcı cache ve raporlama.
  • TTL ve negatif cache (başarısız doğrulamalar) stratejisi.

Kod parçası APCu + SQLite hibrit

get($ip); if ($cached) { $isVerified = (bool)$cached['is_verified']; } cacheSetAPCu($key, $isVerified ? 1 : , 300); } ?>

Raporlama ve ölçümleme önerileri

Ne ölçmezseniz optimize edemezsiniz. Bot tespit oranlarınızı günlük/haftalık trendlerle izleyin. Hangi sayfaların en çok tarandığını, doğrulama kalitesi düşük kaynakları ve başarısız reverse DNS sayılarını raporlayın.

Basit bir pivot: Bot vs İnsan istek sayısı, doğrulanmış vs doğrulanmamış bot oranı, DNS hataları. Bu veriler, tarama stratejinizi ve önbellek sürelerinizi iyileştirmenize yardımcı olur.

  • Günlük özetler: Toplam istek, bot oranı.
  • En çok taranan URL’ler.
  • DNS zaman aşımı ve hata sayıları.

Sonuç

Özet geçmek gerekirse, PHP ile Arama Motoru Tespiti Nasıl Yapılır sorusunun sağlam bir yanıtı, çok katmanlı bir yaklaşımdır: User-Agent eşleştirme ile başlayın, DNS doğrulamasıyla güçlendirin, sonuçları sqlite kullanımı ile önbelleğe alın ve operasyonel metriklerle sürekli iyileştirin. Böylece hem performans hem de SEO görünürlüğünüz açısından daha akıllı bir altyapı kurarsınız.

İlk adım olarak basit eşleşmeyi devreye alın, ardından kritik sayfalar için DNS doğrulaması ekleyin. Trafiğinizi izleyin, TTL değerlerini test edin ve gerekiyorsa kötü niyetli trafiğe hız kısıtlaması uygulayın. PHP ile Arama Motoru Tespiti Nasıl Yapılır bakımından önemli olan; pratik, ölçülebilir ve sürdürülebilir bir sistem kurmaktır.

  • Hızlı kazanımlar: UA filtreleme ve hafif önbellek.
  • Orta vadeli: DNS doğrulaması ve SQLite cache.
  • İleri seviye: Hibrit cache, raporlama, dinamik politika.

SSS

Aşağıda, konuya dair sık sorulan soruların yapılandırılmış verisini JSON-LD olarak bulabilirsiniz.

💬 Yorumlar
Henüz yorum yapılmamış. İlk yorumu sen yap! 👆