Proxy ile Amazon Anahtar Kelime Sıralama Takibi Nedir?
Proxy ile Amazon anahtar kelime sıralama takibi, Amazon arama sonuç sayfalarını (SERP) periyodik olarak kazıyarak belirli bir ASIN'in hedef anahtar kelimeler için organik konumunu izleme sürecidir. Satıcılar ve marketplace SEO geliştiricileri, ürünlerinin hangi kelimelerde kaçıncı sırada göründüğünü bilmek zorundadır çünkü sıralama değişiklikleri doğrudan satış hacmini etkiler.
Ancak Amazon, geleneksel Google SERP'inden tamamen farklı bir mimari kullanır. Sıralama; relevance (ilgi), sales velocity (satış hızı), conversion history ve A9 algoritmasının dinamik ağırlıklandırmasıyla belirlenir. Bu nedenle her pazar yeri (marketplace), her ASIN ve her anahtar kelime için ayrı takip gerekir. User-Agent manipülasyonu tek başına yeterli değildir; Amazon IP başına istek sıklığını sıkı şekilde sınırlar ve şüpheli trafiği CAPTCHA'ya yönlendirir.
Yasal Uyarı: Bu rehber yalnızca halka açık arama verilerinin toplanmasını ele alır. ABD'de Computer Fraud and Abuse Act (CFAA) yetkisiz erişimi yasaklar; AB'de GDPR kişisel veri işlemeyi düzenler. Yalnızca kendi ürünlerinizi ve halka açık listeleri takip edin, robots.txt ve Amazon ToS kurallarına uyun. Mümkün olduğunda Amazon SP-API'sini kullanın.
Amazon SERP'i Neden Kendine Has Bir Sorundur?
Amazon'un A9 algoritması, Google'ın PageRank tabanlı yaklaşımından farklı çalışır. Bir ürünün sıralamasını belirleyen temel faktörler:
- Sales velocity: Son 24-48 saatteki satış hacmi, sıralamayı anlık olarak yukarı/aşağı çeker.
- Relevance signals: Başlık, bullet points, backend keywords ve ürün kategorisi.
- Conversion rate: Tıklama sonrası satın alma oranı — yüksek dönüşüm, daha iyi sıralama.
- Stock & fulfillment: Stokta olmayan ürünler sıralamadan düşer; FBA ürünleri çoğu zaman daha üst sıralarda görünür.
Bu dinamikler, bir ASIN'in aynı anahtar kelimede farklı pazar yerlerinde farklı sıralarda görünebileceği anlamına gelir. amazon.com'da "wireless earbuds" için 3. sırada olan bir ürün, amazon.de'da aynı kelime için 47. sırada olabilir. Bu yüzden takip sistemi pazar yeri, anahtar kelime ve ASIN üçlüsü üzerinde çalışmalıdır.
Sonuç Sayfasını Ayrıştırmak: Organik vs Sponsored
Amazon arama sonuçları, her sonuç için data-component-type="s-search-result" özniteliğine sahip <div> öğeleri içerir. Her bir öğenin içinde data-asin özniteliği ASIN'i verir. Sponsored (sponsorlu) yerleşimler ise genellikle bir "Sponsored" etiketi içerir ve bunları organik sonuçlardan ayırmak kritiktir.
İşte ayrıştırma mantığının özeti:
| Alan | Seçici / Öznitelik | Açıklama |
|---|---|---|
| ASIN | data-asin | Ürünün benzersiz kimliği |
| Sonuç türü | data-component-type | s-search-result = ürün kartı |
| Sponsorlu etiket | "Sponsored" metni | Paid placement — organikten ayrılmalı |
| Organik konum | Sayfadaki sıra (sponsored hariç) | 1, 2, 3... sayfa bazında |
Organik konum hesaplanırken sponsorlu kartlar atlanır; yani sayfada 4 sponsorlu + 12 organik sonuç varsa, ilk organik sonuç konum 1, ikincisi konum 2 olarak sayılır.
Neden Residential Proxy ve Coğrafi Hedefleme Gerekir?
Amazon, IP başına istek sıklığını agresif şekilde sınırlar. Datacenter IP'leri genellikle ilk birkaç istekte bile bloklanır veya CAPTCHA'ya düşer. Residential proxy'ler, gerçek ISP'lere ait IP'ler kullandığı için çok daha az şüphe uyandırır.
Ayrıca Amazon sonuçları pazar yerine göre lokalize eder. amazon.com için ABD IP'si, amazon.de için Alman IP'si kullanmazsanız, coğrafi konumdan kaynaklı sıralama sapmaları yaşarsınız. ProxyHat'in -country- bayrağı bu sorunu çözer:
user-country-US→ amazon.com için ABD IP'siuser-country-DE→ amazon.de için Alman IP'siuser-country-GB→ amazon.co.uk için İngiltere IP'si
Sayfalama yaparken (sayfa 1-5) aynı IP oturumunu korumak için -session- bayrağı kullanılır. Bu, Amazon'un "aynı kullanıcı sayfalar arasında geziniyor" varsayımını sağlar ve oturum tutarsızlıklarını önler. Daha fazla pazar yeri ve lokasyon için ProxyHat lokasyonlar sayfasını inceleyin.
Python ile Amazon Sıralama Takibi: curl_cffi Örneği
Aşağıdaki örnek, curl_cffi kütüphanesini ve ProxyHat residential proxy'lerini kullanarak bir anahtar kelime için Amazon'da 5 sayfa çeker, hedef ASIN'in organik konumunu bulur ve geçmiş veriyi saklar.
import csv
import time
import json
import logging
from datetime import datetime
from curl_cffi import requests
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger(__name__)
PROXY_URL = "http://user-country-US-session-rank001:PASSWORD@gate.proxyhat.com:8080"
def fetch_amazon_page(keyword: str, page: int, marketplace: str = "com") -> str:
"""Amazon arama sonuç sayfasını getirir."""
base_url = f"https://www.amazon.{marketplace}/s"
params = {"k": keyword, "page": str(page)}
headers = {
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
}
try:
resp = requests.get(
base_url,
params=params,
headers=headers,
proxies={"http": PROXY_URL, "https": PROXY_URL},
impersonate="chrome120",
timeout=30,
)
if resp.status_code == 200:
if "captcha" in resp.url.lower() or "captcha" in resp.text.lower():
raise RuntimeError("CAPTCHA algılandı — IP'yi değiştirin veya hızınızı düşürün")
return resp.text
elif resp.status_code == 503:
logger.warning("503 alındı — geri çekilme uygulanıyor")
time.sleep(5)
return fetch_amazon_page(keyword, page, marketplace)
else:
logger.error(f"Beklenmeyen durum kodu: {resp.status_code}")
return ""
except Exception as e:
logger.error(f"Sayfa getirme hatası: {e}")
return ""
Şimdi HTML'i ayrıştıralım ve organik konumu hesaplayalım:
from html.parser import HTMLParser
class AmazonResultParser(HTMLParser):
"""Amazon sonuç kartlarını ayrıştırır."""
def __init__(self):
super().__init__()
self.results = []
self._current_asin = None
self._is_sponsored = False
self._in_label = False
def handle_starttag(self, tag, attrs):
attr_dict = dict(attrs)
if attr_dict.get("data-component-type") == "s-search-result":
self._current_asin = attr_dict.get("data-asin", "")
self._is_sponsored = False
if tag == "span" and self._current_asin:
# Sponsored etiketini ara
pass
def handle_data(self, data):
if self._current_asin and "sponsored" in data.strip().lower():
self._is_sponsored = True
def handle_endtag(self, tag):
if tag == "div" and self._current_asin:
self.results.append({
"asin": self._current_asin,
"sponsored": self._is_sponsored,
})
self._current_asin = None
self._is_sponsored = False
def find_organic_position(html: str, target_asin: str) -> int | None:
"""Hedef ASIN'in organik konumunu bulur (sponsored hariç)."""
parser = AmazonResultParser()
parser.feed(html)
organic_pos = 0
for result in parser.results:
if result["sponsored"]:
continue
organic_pos += 1
if result["asin"] == target_asin:
return organic_pos
return None
Artık tüm akışı bir araya getirelim:
def track_keyword_rank(
keyword: str,
target_asin: str,
marketplace: str = "com",
max_pages: int = 5,
) -> dict:
"""Bir anahtar kelime için ASIN sıralamasını takip eder."""
positions = []
for page in range(1, max_pages + 1):
html = fetch_amazon_page(keyword, page, marketplace)
if not html:
continue
pos = find_organic_position(html, target_asin)
if pos is not None:
positions.append({"page": page, "position": pos})
logger.info(f"{keyword} | ASIN {target_asin} | Sayfa {page} | Konum {pos}")
break
# Sayfalar arasında bekle
time.sleep(2)
record = {
"timestamp": datetime.utcnow().isoformat(),
"keyword": keyword,
"asin": target_asin,
"marketplace": marketplace,
"found": len(positions) > 0,
"positions": positions,
}
# CSV'ye yaz
with open("rank_history.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow([
record["timestamp"], keyword, target_asin,
marketplace, positions[0]["page"] if positions else "",
positions[0]["position"] if positions else "",
])
return record
# Kullanım
if __name__ == "__main__":
result = track_keyword_rank("wireless earbuds", "B0D1234567", marketplace="com")
print(json.dumps(result, indent=2))
Playwright ile JavaScript Render Gerektiren Sayfalar
Bazen Amazon sonuçları JavaScript ile yüklenir. Bu durumda Playwright daha güvenilir bir seçenektir:
import asyncio
from datetime import datetime
from playwright.async_api import async_playwright
PROXY_SERVER = "gate.proxyhat.com:8080"
PROXY_USER = "user-country-US-session-pw001"
PROXY_PASS = "PASSWORD"
async def scrape_amazon_playwright(keyword: str, target_asin: str, max_pages: int = 5):
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=True,
proxy={
"server": f"http://{PROXY_SERVER}",
"username": PROXY_USER,
"password": PROXY_PASS,
},
)
context = await browser.new_context(
locale="en-US",
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
)
page = await context.new_page()
for pg in range(1, max_pages + 1):
url = f"https://www.amazon.com/s?k={keyword}&page={pg}"
try:
await page.goto(url, wait_until="domcontentloaded", timeout=30000)
# CAPTCHA kontrolü
if "captcha" in page.url.lower():
print(f"CAPTCHA algılandı — sayfa {pg} atlanıyor")
continue
# Sonuç kartlarını topla
cards = await page.query_selector_all('[data-component-type="s-search-result"]')
organic_pos = 0
for card in cards:
asin = await card.get_attribute("data-asin")
text = await card.inner_text()
is_sponsored = "sponsored" in text.lower()
if is_sponsored:
continue
organic_pos += 1
if asin == target_asin:
print(f"Bulundu: Sayfa {pg}, Konum {organic_pos}")
await browser.close()
return {"page": pg, "position": organic_pos}
await asyncio.sleep(2)
except Exception as e:
print(f"Hata (sayfa {pg}): {e}")
continue
await browser.close()
return None
asyncio.run(scrape_amazon_playwright("bluetooth speaker", "B0D1234567"))
ProxyHat SDK ile Basitleştirilmiş Yaklaşım
ProxyHat SDK'sı, proxy yönetimini soyutlar ve otomatik rotasyon, yeniden deneme ve oturum yönetimi sağlar:
from proxyhat import ProxyHatClient
from curl_cffi import requests
import time
client = ProxyHatClient(username="user", password="PASSWORD")
def fetch_with_retry(keyword: str, page: int, country: str = "US", max_retries: int = 3):
for attempt in range(max_retries):
proxy = client.get_proxy(
country=country,
session_id=f"rank-{keyword}-{page}",
proxy_type="residential",
)
proxy_url = f"http://{proxy['username']}:{proxy['password']}@gate.proxyhat.com:8080"
try:
resp = requests.get(
f"https://www.amazon.com/s?k={keyword}&page={page}",
proxies={"http": proxy_url, "https": proxy_url},
impersonate="chrome120",
timeout=30,
)
if resp.status_code == 200 and "captcha" not in resp.text.lower():
return resp.text
# Exponential backoff
wait = 2 ** attempt
print(f"Deneme {attempt+1} başarısız, {wait}s bekleniyor...")
time.sleep(wait)
except Exception as e:
print(f"İstek hatası: {e}")
time.sleep(2 ** attempt)
return None
Production İpuçları: Günlük Zamanlama, Yeniden Deneme ve CAPTCHA Tespiti
Günlük Zamanlama
Sıralama takibi günlük yapılmalıdır. Aşırı sık kazıma, sıralama sapmalarına yol açmaz ama IP banyo riskini artırır. Günde 1 kez, sabit saatte çalışacak şekilde zamanlayın:
# cron örneği: her gün 06:00'da çalış
# 0 6 * * * /usr/bin/python3 /path/to/rank_tracker.py >> /var/log/rank_tracker.log 2>&1
Yeniden Deneme ve Backoff
Üstel geri çekilme (exponential backoff) kullanın. İlk denemede 2 saniye, ikincide 4, üçüncüde 8 saniye bekleyin. Maksimum 3-5 deneme yeterlidir. Circuit breaker deseni ile ardışık 10 hata durumunda işlemi durdurun.
CAPTCHA Tespiti
Amazon CAPTCHA sayfasına yönlendirme yaptığında URL'de captcha geçer. Ayrıca yanıt gövdesinde "Type the characters you see in this image" metni aranabilir. CAPTCHA tespit edildiğinde:
- IP'yi değiştir (yeni session ID)
- İstek hızını %50 düşür
- Başarısızlığı kaydet ve bir sonraki döngüde tekrar dene
İndeksleme Kontrolü
ASIN'in hiç sıralamada olmaması, indekslenmemiş olabileceğini gösterir. ASIN doğrudan URL'den erişilebilir mi kontrol edin: https://www.amazon.com/dp/ASIN. Sayfa 404 döndürürse ürün kaldırılmış veya indekslenmemiş olabilir. Bu durumda sıralama takibi anlamsızdır.
Residential vs Datacenter vs Mobile Proxy Karşılaştırması
| Proxy Türü | Bloklanma Riski | Hız | Maliyet | Amazon Uygunluğu |
|---|---|---|---|---|
| Datacenter | Çok yüksek | Hızlı | Düşük | Zayıf — ilk istekte blok |
| Residential | Düşük | Orta | Orta | İyi — uzun süreli takip için ideal |
| Mobile | Çok düşük | Değişken | Yüksek | Mükemmel — ama gereksiz pahalı |
Amazon sıralama takibi için residential proxy'ler en iyi dengeyi sunar. ProxyHat'in residential proxy'leri 190+ ülkede kullanılabilir — tüm lokasyonları görmek için lokasyonlar sayfasına bakın. Fiyatlandırma için ProxyHat fiyatlandırma sayfasını ziyaret edin.
Etik ve Yasal Hususlar
Amazon sıralama takibi yaparken şu ilkeleri gözetin:
- Kendi ürünlerinizi ve halka açık listeleri takip edin. Rakip ASIN'leri de halka açıktır, ancak aşırı veri toplama etik dışı olabilir.
- Hızı sınırlayın. Saniyede 1-2 istek, günlük toplam 500-1000 istek makul bir üst sınırdır.
- Amazon ToS ve robots.txt'i kontrol edin. Amazon'un
/robots.txtdosyası hangi yolların kazınabileceğini belirtir. - SP-API'yi değerlendirin. Amazon Seller Partner API, Catalog Items ve Reports endpoint'leri üzerinden resmi veri erişimi sağlar. Mümkün olduğunda API kullanın; kazıma yalnızca API'nin kapsamadığı veriler için son çare olsun. Daha fazla bilgi için ProxyHat dokümantasyonunu inceleyin.
- GDPR uyumu: AB kullanıcılarından kişisel veri topluyorsanız (örneğin review yazarları), GDPR gereği açık rıza veya meşru menfaat gerekçesi gerekir.
Web scraping genel kullanım senaryoları için ProxyHat web scraping kullanım sayfasını ve SERP takibi için SERP takip sayfasını inceleyin.
Key Takeaways — Önemli Çıkarımlar
- Amazon SERP'i Google'dan farklı çalışır; sıralama sales velocity ve conversion'a bağlıdır, bu yüzden pazar yeri + anahtar kelime + ASIN üçlüsünde takip şarttır.
- Sonuç kartlarını
data-component-type="s-search-result"vedata-asinile ayrıştırın; "Sponsored" etiketli kartları organik konum hesabından çıkarın.- Residential proxy'ler + coğrafi hedefleme (
-country-US,-country-DE) olmadan tutarlı veri alamazsınız; datacenter IP'leri ilk istekte bloklanır.- Sticky session (
-session-) sayfalama için kritiktir; her anahtar kelime için benzersiz session ID kullanın.- Günlük takip, exponential backoff, CAPTCHA tespiti ve indeksleme kontrolü production sisteminin temelidir.
- Etik kurallara uyun: kendi/halka açık ürünleri takip edin, hız sınırlayın ve mümkün olduğunda Amazon SP-API'yi tercih edin.
SSS
Proxy ile Amazon anahtar kelime sıralama takibi nedir?
Proxy ile Amazon anahtar kelime sıralama takibi, residential veya mobile proxy'ler kullanarak Amazon arama sonuç sayfalarını periyodik olarak kazıyıp belirli bir ASIN'in hedef anahtar kelimeler için organik konumunu izleme sürecidir. Satıcılar bu veriyi kullanarak ürün optimizasyonu, reklam stratejisi ve rekabet analizini yönlendirir. Proxy olmadan Amazon IP başına istek sıklığını agresif şekilde sınırlar ve datacenter IP'leri genellikle ilk birkaç istekte bloklanır.
Amazon anahtar kelime sıralama takibi proxy kullanıcıları için neden önemlidir?
Çünkü Amazon'un A9 algoritması, satış hızı ve dönüşüm oranına göre sıralamayı anlık olarak değiştirir. Bir ürün bugün 3. sırada olabilir, yarın 27. sıraya düşebilir. Proxy kullanan satıcılar ve SEO geliştiricileri, coğrafi olarak doğru lokalize edilmiş sonuçları güvenilir şekilde toplayabilir, sponsorlu yerleşimleri organik sonuçlardan ayırabilir ve pazar yeri bazında doğru sıralama verisi elde edebilir. Bu veri olmadan reklam harcamaları ve listing optimizasyonu kör şekilde yapılır.
Amazon anahtar kelime sıralama takibi için hangi proxy türü en iyisidir?
Residential proxy'ler en iyi dengeyi sunar. Datacenter IP'leri Amazon tarafından hızlıca tanınır ve bloklanır; mobile proxy'ler çok düşük bloklanma riskine sahiptir ancak maliyetleri yüksektir. Residential proxy'ler, gerçek ISP'lere ait IP'ler kullandığı için Amazon'un anti-bot sistemlerini geçer, coğrafi hedefleme sunar ve uzun süreli günlük takip için maliyet-etkilidir. ProxyHat, -country-US veya -country-DE bayrakları ile pazar yerine uygun IP sağlar.
Amazon anahtar kelime sıralama takibi yaparken bloklanmayı nasıl önlersiniz?
Bloklanmayı önlemek için: (1) Her anahtar kelime ve sayfa için benzersiz sticky session ID kullanın, böylece sayfalar arası gezinme doğal görünür. (2) İstekler arası 2-5 saniye bekleme uygulayın, saniyede 1-2 istekten fazlasına çıkmayın. (3) Exponential backoff ile yeniden deneme yapın — 2s, 4s, 8s. (4) CAPTCHA tespiti için URL ve yanıt gövdesinde "captcha" ara; tespit ederseniz IP'yi değiştirin. (5) curl_cffi veya Playwright ile gerçek tarayıcı parmak izi taklit edin. (6) Günlük toplam istek sayısını 500-1000 ile sınırlayın.
Amazon SP-API yerine kazıma ne zaman kullanılmalı?
Amazon SP-API, Catalog Items ve Reports endpoint'leri üzerinden resmi veri erişimi sağlar ve mümkün olduğunda tercih edilmelidir. Ancak SP-API, organik arama sıralamasını doğrudan vermez — ürün kataloğu ve satış verisi sağlar. Arama sonuçlarındaki organik konumu elde etmek için kazıma hala en pratik yöntemdir. Etik açıdan, önce SP-API'nin ihtiyacınızı karşılayıp karşılamadığını değerlendirin; karşılamıyorsa halka açık arama verilerini ölçülü şekilde kazıyın.






