Google, SERP Kaçırıcılarını Nasıl Tespit Ediyor
Google arama sonuçlarını otomatik erişimden korumak için ağır yatırım yapar. Bloklardan kaçınmadan önce, Google'ın kullandığı algılama yöntemlerini anlamanız gerekir. Her yöntem farklı bir sinyale işaret eder ve etkili bir SERP scraping, tüm bunları aynı anda ele almak gerektirir.
Referanslarla dolu bir genel bakış için, dikkatimizi gör SERP puting with agents guide.
IP-Based Tespit
İlk savunma hattı IP analizidir. Google, IP adresi ve bayrakları için sorgu hacmini normal insan arama modellerini aşıyor. Özel işaretler içerir:
- İstek frekansı: Tek bir IP tetiklerinden dakika başına birkaç aramadan daha fazla bir arama oranı sınırlamak
- IP itibarı: Bilinen datacenter IP aralıkları hemen scrutiny alıyor
- Coğrafi tutarsızlık: Almanya'dan bir IP İngilizce ABD destekli sorgular bayrakları yükseltti
- ASN analizi: Google, sağlayıcıları barındırmaya ait IP bloklarını tanır
Tarayıcı Parmak
IP adreslerinin ötesinde, Google, isteğin kendisini otomasyon belirtileri için inceler:
| Signal Signal | Google ne kontrol ediyor | Red Flag |
|---|---|---|
| Kullanıcı-Agent | Tarayıcı ve OS kimlik dizeleri | Eksik, eski, ya da diğer başlıklarla tutarsız |
| Başlıkları Kabul Ediyor | İçerik türü tercihleri | Eksik Kabul - Dil veya standart olmayan kabul değerleri |
| TLS parmak izi | SSL/TLS elhake özellikleri | Parmak eşleştirme bilinen HTTP kütüphaneleri (requests, urllib) |
| JavaScript execution JavaScript execution JavaScript execution | Müşteri adım senaryo davranışı | Hiçbir JavaScript infazı (önsüz algılama) |
| Çerez davranışları | Çerez kabul ve yönetim | Hiçbir kurabiye veya aynı kurabiye kalıpları ile istekler |
Bu tekniklere daha derin bir bakış için makalemizi okuyun Anti-bot sistemlerinin nasıl algılandığını nasıl algılar.
Davranış Analizi
Google, otomasyonu tespit etmek için isteklerdeki kalıpları analiz eder:
- İstek zamanlaması: İstekler arasında mükemmel bir şekilde tutarlı aralıklarla (örneğin, tam olarak 3 saniye ayrı) doğal olmayan aralıklarla
- Sorgu modelleri: Anahtar kelimeler alfabetik veya öngörülebilir diziler otomatik olarak görünüyor
- Oturum davranışı: Gerçek kullanıcılar birden çok sayfayı göz önünde bulunduruyor, sonuçlar tıklayın ve zaman okumayı harcayın - sadece SERPs getiriyor
- Cilt kalıpları: İlgili IP'lerden sorgu hacmindeki sudden çatlaklar, koordineli kazılar öneriyor
Anti-Block Stratejisinin Üç Katmanı
Google bloklarından kaçınmak bir tabakalı yaklaşım gerektirir. Tek bir teknik kendi başına yeterli değildir.
Katman 1: Proxy Altyapısı
Seçiminiz, anti-block stratejinizin temelidir. ProxyHat konut proxy Sürekli SERP hurdalığı için gerekli IP çeşitliliği ve güven seviyesi sağlar.
Katman 2: Kurulum
Her HTTP isteği gerçek bir tarayıcıdan geliyor gibi görünmelidir. Headers, kurabiye ve zamanlama her şeyin gerçekçi olması gerekir.
Katman 3: Davranışlı Desenler
Yıkıcı aktivitenizin genel modeli doğal arama davranışını taklit etmelidir. Bu, rastgeleleştirilmiş gecikmeler, çeşitli sorgu dizileri ve uygun istek hacimleri anlamına gelir.
Konut Proxies: İlk Savunmanız
Yapabileceğiniz en etkili tek değişiklik, datacenter'dan veri merkezine geçmektir Konut sahipleriİşte konut IP'lerinin Google'ın bakış açısından temel olarak farklı olmasının nedeni:
- Konut IP'leri gerçek ISS'lere aittir (Comcast, AT&T, BT, Deutsche Telekom), bulut sağlayıcıları değil
- Google, meşru kullanıcıları engellemeden konut IP aralıklarını engelleyebilir
- Her IP'nin gerçek kullanıcı tarafından inşa edilmiş bir tarama geçmişi ve itibarı vardır
- Konut IPs, şehir seviyesindeki geo-targeting'i lokasyona göre destekliyor
SERP için Proxy Constructing
import requests
# ProxyHat residential proxy with automatic rotation
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
session = requests.Session()
session.proxies = {
"http": PROXY_URL,
"https": PROXY_URL,
}
# Each request automatically gets a new residential IP
response = session.get(
"https://www.google.com/search",
params={"q": "best proxy service", "num": 10, "hl": "en", "gl": "us"},
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"DNT": "1",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
},
timeout=15,
)Refer'e ProxyHat Belgeleri Gelişmiş rotasyon ve oturum ayarları için.
Realistic Request Headers
Tamamlanmış veya tutarsız başlıklar, hurdaların bloke edilmesi gereken en yaygın nedenlerden biridir. İşte tam, gerçekçi bir başlık:
import random
# Rotate between realistic User-Agent strings
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15",
]
def get_headers():
ua = random.choice(USER_AGENTS)
headers = {
"User-Agent": ua,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"DNT": "1",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Cache-Control": "max-age=0",
}
# Firefox has different Sec-Ch headers
if "Firefox" not in ua:
headers["Sec-Ch-Ua"] = '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"'
headers["Sec-Ch-Ua-Mobile"] = "?0"
headers["Sec-Ch-Ua-Platform"] = '"Windows"' if "Windows" in ua else '"macOS"'
return headersKullanıcı-Agent dizelerinizi her zaman mevcut tarayıcı versiyonları ile güncelleyin. Bir Chrome 90 Kullanıcı-Agent'ı 2026'da göndermek, hemen kırmızı bayraktır.
Limiting and Request Timing
İsteklerinizin şekli, taleplerin kendileri kadar önemlidir. İşte kanıtlanmış zamanlama stratejileri:
Rastgele Gecikler
İstekler arasındaki sabit aralıkları asla kullanmayın. Bunun yerine, insan arama davranışını taklit etme gecikmeleri:
import time
import random
def human_delay():
"""Generate a realistic delay between searches."""
# Base delay: 3-8 seconds (normal browsing pace)
base = random.uniform(3, 8)
# Occasionally add longer pauses (simulating reading results)
if random.random() < 0.15:
base += random.uniform(10, 30)
# Rare very short delays (rapid refinement searches)
if random.random() < 0.05:
base = random.uniform(1, 2)
return base
# Usage in scraping loop
for keyword in keywords:
result = scrape_serp(keyword)
delay = human_delay()
time.sleep(delay)Cilt Talepleri
| Proxy Type | Güvenli İstekler / Dakika IP başına | Max Concurrent IPs |
|---|---|---|
| Konut (rotating) | 1-2 | Sınırsız (pool döner) |
| Konut (sticky session) | 30'ların başına 1 | Havuz büyüklüğüne dayanarak |
| Datacenter | 60'lara 1 | Limited Tarafından IP count |
CAPTCHAs ve Bloklar
En iyi önlemlerle bile, bazen bloklarla karşılaşacaksınız. Yıkıcınızı onları lütufla idare etmek için inşa edin.
Bloklar
def is_blocked(response):
"""Check if Google has blocked or challenged the request."""
# HTTP 429: Rate limited
if response.status_code == 429:
return "rate_limited"
# HTTP 503: Service unavailable (temporary block)
if response.status_code == 503:
return "service_unavailable"
text = response.text.lower()
# CAPTCHA detection
if "captcha" in text or "recaptcha" in text:
return "captcha"
# Unusual traffic message
if "unusual traffic" in text or "automated queries" in text:
return "unusual_traffic"
# Empty or suspicious results
if "did not match any documents" in text and len(text) < 5000:
return "empty_suspicious"
return NoneRetry Strategy
import time
import random
def scrape_with_retry(keyword, max_retries=3):
"""Scrape a SERP with automatic retry on blocks."""
for attempt in range(max_retries):
proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}
response = requests.get(
"https://www.google.com/search",
params={"q": keyword, "num": 10, "hl": "en", "gl": "us"},
headers=get_headers(),
proxies=proxies,
timeout=15,
)
block_type = is_blocked(response)
if block_type is None:
return parse_results(response.text)
if block_type == "rate_limited":
# Exponential backoff
wait = (2 ** attempt) * 5 + random.uniform(0, 5)
print(f"Rate limited. Waiting {wait:.1f}s (attempt {attempt + 1})")
time.sleep(wait)
elif block_type == "captcha":
# Switch to a new IP and wait
print(f"CAPTCHA detected. Rotating IP and waiting...")
time.sleep(random.uniform(10, 20))
else:
# Generic block: wait and retry
time.sleep(random.uniform(5, 15))
return None # All retries exhaustedGeographic Consistency
Bir ince ama önemli anti-deteksiyon ölçüsü, talep parametrelerinizde coğrafi tutarlılık sağlamaktır:
- IP proxy'niz Amerika Birleşik Devletleri'nde ise, set
gl=usvehl=en - Kabul dili başlığı hedef yerele
- Bu ülkedeki bir OS / tarayıcı kombinasyonu için bir Kullanıcı-Agent dize kullanın
- Set timezone-appropriate istek süreleri
ProxyHat'ın geo-targeting özelliği Belirli ülkelerden ve şehirlerden temsilcileri seçmenize izin verin, bu tutarlılığı korumak için basit hale getirin. rehberimizde yer hedefli talepleri kullanmak hakkında daha fazla bilgi edinin Yıkmadan kazınmadan.
Node.js Anti-Block Uygulama
İşte Node.js'te uygulanan eşdeğer anti-block stratejisi:
const axios = require('axios');
const cheerio = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0',
];
function getRandomUA() {
return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function scrapeWithRetry(keyword, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
try {
const { data, status } = await axios.get('https://www.google.com/search', {
params: { q: keyword, num: 10, hl: 'en', gl: 'us' },
headers: {
'User-Agent': getRandomUA(),
'Accept': 'text/html,application/xhtml+xml',
'Accept-Language': 'en-US,en;q=0.9',
},
httpsAgent: agent,
timeout: 15000,
validateStatus: () => true,
});
if (status === 429) {
const wait = Math.pow(2, attempt) * 5000 + Math.random() * 5000;
console.log(`Rate limited. Waiting ${(wait/1000).toFixed(1)}s`);
await sleep(wait);
continue;
}
if (data.toLowerCase().includes('captcha')) {
console.log('CAPTCHA detected. Rotating IP...');
await sleep(10000 + Math.random() * 10000);
continue;
}
return cheerio.load(data);
} catch (err) {
console.log(`Attempt ${attempt + 1} failed: ${err.message}`);
await sleep(5000 + Math.random() * 10000);
}
}
return null;
}Gelişmiş Teknikler
Query Randomization
alfabetik veya eşdeğer bir şekilde anahtar kelimeler kazımayın. Her koşmadan önce anahtar kelime listesini Shuffle:
import random
keywords = ["proxy service", "web scraping", "serp tracking", "seo tools"]
random.shuffle(keywords)
# Now scrape in random order
for kw in keywords:
scrape_with_retry(kw)Google Arama Parametreleri
Bu parametreleri temiz, kişisel olmayan sonuçlar elde etmek için kullanın:
| Parametre parametresi | Değer Değer Değer Değer Değer Değer Değer Değer Değer Değer Değer Değer | Amaç |
|---|---|---|
pws | 0 0 0 0 | Engelli kişisel sonuçlar |
gl | Ülke Kodu | Set arama ülkesi |
hl | Dil Kodu | Takım arayüzü dili |
num | 10-100 | Sayfa başına sonuçlar |
filter | 0 0 0 0 | Disable tekrar filtreleme |
nfpr | 1 1 1 | Disable auto-correction |
Dağıtılmış Scheduling
Büyük ölçekli SERP izlemesi için, patlama kalıpları önlemek için zaman boyunca talepleri dağıtın. Bir saat içinde 10.000 anahtar kelime çıkarmak yerine, onları doğal trafik eğrileri ile 8-12 saat boyunca yaylar (günde daha az istekler) yaylar.
Hedef sadece bloklardan kaçınmak değildir - normal kullanıcı arama davranışından silinen trafiğinizi yapmaktır. Her detay önemlidir.
Güvenilir, büyük ölçekli hurda boru hatları inşa etmek için, bizi gör Web scrapingants için tam kılavuz ve ProxyHat web scraping solutions.






