Proxy ile Amazon Anahtar Kelime Sıralama Takibi: Geliştirici Rehberi

Amazon SERP'ini kazıyarak anahtar kelime sıralamalarını takip etmek için residential proxy'ler, Python kod örnekleri ve production ipuçlarını içeren kapsamlı geliştirici rehberi.

Amazon Keyword Rank Tracking with Proxies: A Developer's Guide

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:

AlanSeçici / ÖznitelikAçıklama
ASINdata-asinÜrünün benzersiz kimliği
Sonuç türüdata-component-types-search-result = ürün kartı
Sponsorlu etiket"Sponsored" metniPaid placement — organikten ayrılmalı
Organik konumSayfadaki 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'si
  • user-country-DE → amazon.de için Alman IP'si
  • user-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 RiskiHızMaliyetAmazon Uygunluğu
DatacenterÇok yüksekHızlıDüşükZayıf — ilk istekte blok
ResidentialDüşükOrtaOrtaİyi — uzun süreli takip için ideal
MobileÇok düşükDeğişkenYüksekMü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.txt dosyası 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" ve data-asin ile 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.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön