SEO Sıra Takibi Nasıl Otomatikleştirilir?

Yayın tarihi:

12 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Arama sonuçları listesi gösteren bir pencereden yükselen üç sütuna uzanan sıra takibi çizimi

Bir SEO uzmanının haftasının bir kısmı, önemli anahtar kelimeleri tek tek arayıp sitenin kaçıncı sırada çıktığına bakmakla geçer. Beş anahtar kelimede bu bir alışkanlıktır; beş yüz anahtar kelimede, üç şehirde ve iki cihaz türünde ise imkânsız bir iştir. Üstelik elle yapılan kontrol yanıltıcıdır: Google'da oturum açık bir tarayıcıda gördüğünüz sıra, İzmir'deki bir kullanıcının telefonunda gördüğü sırayla aynı değildir.

Bu yazıda SERP'in (arama sonuç sayfası) ve sıra takibinin ne olduğunu, elle takibin neden ölçeklenmediğini ve otomasyona Search Console API ile nasıl başlanacağını çalışan bir Python örneğiyle anlatıyoruz. Ardından Search Console'un vermediği verileri, konum bazlı sonuçların neden farklılaştığını, bir takip sisteminin parçalarını ve bu işin hizmet şartları açısından sınırlarını ele alıyoruz. Önemli bir not baştan: Google arama sonuçlarını izinsiz ve otomatik olarak kazımak Google'ın politikalarına aykırıdır. Bu yazı önce resmi yolu, ardından lisanslı veri kaynaklarını önerir.

SERP ve sıra takibi nedir?

SERP (Search Engine Results Page), bir arama motorunun bir sorguya döndürdüğü sonuç sayfasıdır. Bugünkü SERP yalnızca on mavi bağlantıdan oluşmaz: reklamlar, harita ve yerel işletme kutusu, alışveriş sonuçları, "Diğer kullanıcılar şunu da sordu" kutuları, videolar, görseller ve yapay zeka ile üretilmiş özetler aynı sayfada yer alabilir.

Sıra takibi (rank tracking), belirli anahtar kelimelerde sitenizin bu sayfanın neresinde göründüğünü düzenli aralıklarla kaydetmektir. Amaç tek bir günün sırasını bilmek değil, zaman içindeki değişimi görmektir: bir içerik güncellemesinden sonra sıra yükseldi mi, bir algoritma güncellemesinden sonra hangi sayfalar düştü, yeni açılan şehir sayfası o şehirde görünüyor mu?

Sıra takibinde izlenen başlıca ölçüler:

  • Pozisyon: Sonucun sayfadaki sırası. Search Console'da bu değer, belirli bir dönemdeki gösterimlerin ortalamasıdır.
  • Gösterim: Sitenizin sonuçlarda kaç kez görüntülendiği.
  • Tıklama ve tıklama oranı (CTR): Gösterimlerin kaçının ziyarete dönüştüğü.
  • Görünürlük türü: Sonucun normal bağlantı mı, zengin sonuç mu, yerel kutu mu olduğu.

Elle takip neden ölçeklenmez?

Elle yapılan sıra kontrolü üç nedenle hem yavaş hem yanıltıcıdır:

  • Kişiselleştirme. Oturum açık bir Google hesabıyla yapılan arama, geçmiş aramalarınızdan ve ziyaretlerinizden etkilenebilir. Kendi sitenizi sık ziyaret ediyorsanız onu olduğundan yukarıda görebilirsiniz.
  • Konum. Arama sonuçları kullanıcının ülkesine, şehrine ve yerel niyet taşıyan sorgularda semtine göre değişir. İstanbul'daki ofisinizden gördüğünüz sonuç, Ankara'daki kullanıcının sonucu değildir.
  • Cihaz ve dil. Mobil ve masaüstü sonuçları, sayfa düzeni ve SERP özellikleri nedeniyle farklı sıralar gösterir. Tarayıcının dil ayarı da sonuçları etkiler.

Bunlara zaman boyutu da eklenir: sonuçlar gün içinde değişebilir. Tek bir kişinin bir sabah yaptığı kontrol, bu değişkenlerin tek bir kombinasyonunu gösterir. Karar almak için gereken ise aynı ölçümün aynı koşullarda, düzenli aralıklarla tekrarlanmasıdır.

Neden önce Search Console API?

Kendi siteniz için sıra takibine başlamanın en doğru yolu Google Search Console'dur, çünkü veri doğrudan Google'dan gelir ve gerçek kullanıcıların gördüğü sonuçlara dayanır. Arayüzdeki Performans raporu küçük analizler için yeterlidir; düzenli ve ayrıntılı takip için ise Search Console API'sinin searchanalytics.query yöntemi kullanılır.

API'nin sunduğu veri:

AlanAçıklama
Boyutlar (dimensions)date, query, page, country, device, searchAppearance ve saatlik veri için hour
Ölçülerclicks, impressions, ctr (0-1 arası), position (ortalama)
Arama türü (type)web (varsayılan), image, video, news, discover, googleNews
Satır sınırı (rowLimit)İstek başına en fazla 25.000; daha fazlası startRow ile sayfalanır
Veri durumu (dataState)final (varsayılan, kesinleşmiş), all (henüz kesinleşmemiş taze veri dahil)
Yetkiwebmasters.readonly kapsamı yeterlidir

Search Console'un güçlü yanları gerçek veri olması, ücretsiz olması ve ülke ile cihaz kırılımı vermesidir. Sınırlarını da bilmek gerekir: pozisyon bir ortalamadır, son birkaç günün verisi henüz kesinleşmemiş olabilir ve gizlilik nedeniyle çok az aranan bazı sorgular raporlarda gösterilmez.

Search Console API ile sıra verisi nasıl çekilir?

Kurulum dört adımdır:

  1. Google Cloud'da bir proje oluşturun ve Search Console API'yi etkinleştirin.
  2. Bir servis hesabı oluşturun ve anahtar dosyasını (JSON) indirin. Bu dosyayı sürüm kontrolüne eklemeyin.
  3. Servis hesabının e-posta adresini Search Console mülkünüze kullanıcı olarak ekleyin. Okuma yetkisi yeterlidir. Bu adım atlanırsa API yetki hatası döner.
  4. Python kütüphanelerini kurun:
bash
pip install google-api-python-client google-auth

Aşağıdaki betik belirli bir tarih aralığının verisini sorgu, sayfa, ülke ve cihaz kırılımıyla çeker, 25.000 satırlık sayfalar hâlinde okur ve bir SQLite veritabanına yazar:

python
import sqlite3
from datetime import date, timedelta

from google.oauth2 import service_account
from googleapiclient.discovery import build

SITE = "sc-domain:ornek.com"          # alan adı mülkü; URL mülkü için "https://ornek.com/"
SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"]
PAGE_SIZE = 25_000

credentials = service_account.Credentials.from_service_account_file("servis-hesabi.json", scopes=SCOPES)
service = build("searchconsole", "v1", credentials=credentials)


def fetch_rows(start, end):
    start_row = 0
    while True:
        body = {
            "startDate": start.isoformat(),
            "endDate": end.isoformat(),
            "dimensions": ["date", "query", "page", "country", "device"],
            "rowLimit": PAGE_SIZE,
            "startRow": start_row,
        }
        response = service.searchanalytics().query(siteUrl=SITE, body=body).execute()
        rows = response.get("rows", [])
        yield from rows
        if len(rows) < PAGE_SIZE:
            break
        start_row += PAGE_SIZE


db = sqlite3.connect("siralama.db")
db.execute("""
    CREATE TABLE IF NOT EXISTS performans (
        tarih TEXT, sorgu TEXT, sayfa TEXT, ulke TEXT, cihaz TEXT,
        tiklama REAL, gosterim REAL, ctr REAL, pozisyon REAL,
        PRIMARY KEY (tarih, sorgu, sayfa, ulke, cihaz)
    )
""")

end = date.today() - timedelta(days=3)   # son günler henüz kesinleşmemiş olabilir
start = end - timedelta(days=6)

with db:
    db.executemany(
        "INSERT OR REPLACE INTO performans VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
        (
            (*row["keys"], row["clicks"], row["impressions"], row["ctr"], row["position"])
            for row in fetch_rows(start, end)
        ),
    )
print("Kayıt sayısı:", db.execute("SELECT COUNT(*) FROM performans").fetchone()[0])

keys dizisindeki değerlerin sırası, istekte verdiğiniz dimensions sırasıyla aynıdır; tabloya yazarken bu sıraya dikkat edin. INSERT OR REPLACE sayesinde aynı günü tekrar çektiğinizde veriler çoğalmaz, güncellenir.

Veriyi topladıktan sonra en işe yarar sorgu, iki dönem arasındaki pozisyon değişimidir. Örneğin Türkiye'deki mobil aramalarda son iki haftanın ortalama pozisyonunu karşılaştırmak için:

sql
WITH donem AS (
  SELECT sorgu,
         AVG(CASE WHEN tarih >= date('now', '-10 days') THEN pozisyon END) AS bu_hafta,
         AVG(CASE WHEN tarih <  date('now', '-10 days') THEN pozisyon END) AS gecen_hafta,
         SUM(gosterim) AS gosterim
  FROM performans
  WHERE ulke = 'tur' AND cihaz = 'MOBILE' AND tarih >= date('now', '-17 days')
  GROUP BY sorgu
)
SELECT sorgu, ROUND(gecen_hafta, 1) AS once, ROUND(bu_hafta, 1) AS simdi,
       ROUND(bu_hafta - gecen_hafta, 1) AS degisim, gosterim
FROM donem
WHERE gosterim > 100
ORDER BY degisim DESC
LIMIT 20;

Pozisyonda sayının büyümesi sıranın düştüğü anlamına gelir; sorgu en çok düşen anahtar kelimeleri en üste getirir. Ülke kodları üç harfli ISO biçimindedir (Türkiye için tur).

Search Console'un vermediği veriler

Search Console kendi siteniz hakkında güvenilir bir kaynaktır, ama sıra takibinin bazı ihtiyaçlarını karşılamaz:

  • Rakiplerin sırası. Search Console yalnızca sizin sitenizin verisini gösterir. Bir anahtar kelimede ilk sıradaki siteyi ya da bir rakibin yükselişini göremezsiniz.
  • Şehir bazlı sonuç. Kırılım ülke düzeyindedir. Ankara ve İzmir'deki sıralar arasındaki farkı ayıramazsınız.
  • Tam SERP görüntüsü. Sonucunuzun üstünde kaç reklam, yerel kutu veya yapay zeka özeti olduğu, yani tıklanabilirliği etkileyen sayfa düzeni raporlanmaz.
  • Gösterim almadığınız sorgular. İlk sayfalarda hiç görünmediğiniz bir anahtar kelimede neredeyse hiç veri olmaz.
  • Anlık durum. Veri birkaç gün gecikmeyle kesinleşir.

Bu boşlukları doldurmak için iki meşru seçenek vardır: arama sonuç verisini lisanslı olarak sunan SERP veri servisleri ve ölçeği insan düzeyinde kalan manuel konum kontrolleri. Arama motoru sonuçlarını kendi betiğinizle otomatik olarak toplamak ise aşağıda anlattığımız nedenlerle bir seçenek değildir.

Konum bazlı sonuç neden farklıdır?

Arama motorları, sorgunun yerel bir niyet taşıyıp taşımadığını değerlendirir. "Proxy nedir" gibi bilgi sorgularında sonuçlar ülke içinde büyük ölçüde aynıdır. "Diş kliniği", "çilingir", "oto kiralama" veya "en yakın kargo şubesi" gibi yerel niyetli sorgularda ise sonuçlar şehre, hatta semte göre tamamen değişir.

Türkiye'de bu farkın öne çıktığı durumlar:

  • Birden fazla şehirde şubesi olan işletmeler. Her şehir sayfasının kendi şehrinde görünüp görünmediği.
  • Hizmet bölgesi olan işletmeler. Bir firmanın hizmet verdiği ilçelerde yerel sonuçlarda yer alıp almadığı.
  • Ulusal e-ticaret siteleri. Kategori sayfalarının büyük şehirlerde farklı sıralarda çıkması.
  • Farklı dillerde arama. Türkiye'den İngilizce arama yapan kullanıcılarla Türkçe arama yapanların gördüğü sonuçlar.

Şehir bazlı farkları büyük ölçekte ölçmek için SERP veri servislerinin konum parametreleri kullanılır. Sınırlı sayıda önemli sayfanın belirli şehirlerde nasıl göründüğünü ara ara doğrulamak ise insan ölçeğinde bir iştir: bir SEO uzmanı, oturum kapalı ve temiz bir tarayıcı profilinde, ilgili şehirden çıkan bir IP adresiyle birkaç kritik sorguyu kendisi arar. Türkiye'deki şehir bazlı çıkış noktaları için Türkiye lokasyon sayfamıza, bu tür kontrollerin kurgusu için SEO proxy çözümü sayfamıza bakabilirsiniz.

Veri kaynakları karşılaştırması

ÖlçütSearch Console APILisanslı SERP veri servisiKendi betiğinizle arama motoru kazıma
Kimin verisi?Yalnızca kendi sitenizHerhangi bir sorgu ve siteHerhangi bir sorgu ve site
KaynakGoogle'ın gerçek kullanıcı verisiServisin topladığı sonuç sayfalarıSizin gönderdiğiniz otomatik sorgular
Pozisyon türüOrtalamaAnlık, tek ölçümAnlık, tek ölçüm
Şehir bazlıHayır, ülkeGenellikle evetTeknik olarak mümkün
Rakip sıralarıHayırEvetEvet
Tıklama ve gösterimEvetHayırHayır
MaliyetÜcretsizSorgu başına ücretliAltyapı ve bakım
Hizmet şartlarıResmi yolServisin sözleşmesine bağlıGoogle için izinsiz otomatik sorgu politikalara aykırı
Önerimizİlk kaynakRakip ve şehir verisi içinKullanmayın

Otomasyonun parçaları

Bir sıra takip sistemi, veri kaynağından bağımsız olarak dört parçadan oluşur:

  1. Anahtar kelime listesi. Her anahtar kelime için hedef sayfa, öncelik, izlenecek ülke ve cihaz, gerekiyorsa şehir. Liste bir tablo veya veritabanında tutulur ve iş hedefleriyle birlikte güncellenir. Search Console verisindeki gösterimi yüksek sorgular bu listeye aday olarak eklenebilir.
  2. Zamanlama. Search Console verisi için günlük tek çalıştırma yeterlidir; veri zaten birkaç gün gecikmeyle kesinleşir. Linux'ta cron, Windows'ta Görev Zamanlayıcı ya da bir CI hattının zamanlanmış işi kullanılabilir.
  3. Saklama. Her ölçüm tarih damgasıyla saklanır; eski veriler silinmez, çünkü takibin değeri geçmişle karşılaştırmadadır. Küçük projelerde SQLite, ekip kullanımında PostgreSQL veya bir veri ambarı.
  4. Raporlama ve uyarı. Haftalık değişim raporu, belirli bir eşiğin üzerinde düşen sorgular için uyarı, sayfa grubu bazında (kategori, blog, şehir sayfaları) toplu görünüm.

Uyarıları anlamlı tutmak için gösterimi düşük sorgulardaki dalgalanmaları filtreleyin; birkaç gösterimlik bir sorguda pozisyonun 3'ten 9'a çıkması istatistiksel olarak bir anlam taşımayabilir.

Hizmet şartları ve sorumlu kullanım

Bu bölüm yazının en önemli kısmıdır.

Google'ın spam politikaları, "makine tarafından üretilen trafik" başlığı altında Google'a otomatik sorgu göndermeyi ve açık izin olmadan sıra kontrolü amacıyla sonuçları kazımayı politika ihlali olarak tanımlar ve bunun Google'ın hizmet şartlarına da aykırı olduğunu belirtir. Google'ın hizmet şartları da hizmetlere, robots.txt gibi makine tarafından okunabilir talimatlara aykırı biçimde otomatik araçlarla erişmeyi kötüye kullanım örnekleri arasında sayar.

Bunun pratik anlamı şudur:

  • Kendi betiğinizle, proxy havuzu kullanarak da olsa Google sonuçlarını otomatik olarak kazımayın. IP adresini değiştirmek, bir politikanın dışında kalmanızı sağlamaz.
  • Kendi siteniz için önce Search Console API'yi kullanın. Resmi, ücretsiz ve gerçek kullanıcı verisine dayalıdır.
  • Rakip ve şehir verisi için lisanslı bir veri servisi seçin ve servisin veriyi nasıl sağladığını, sözleşmesinin sizin kullanımınızı kapsayıp kapsamadığını kontrol edin.
  • Manuel kontrolleri insan ölçeğinde tutun. Bir uzmanın birkaç önemli sorguyu farklı bir şehirden görünen bir bağlantıyla araması, bir betiğin binlerce sorguyu otomatik göndermesiyle aynı şey değildir.
  • Diğer arama motorlarının şartlarını da okuyun. Yandex dahil her arama motorunun kendi kullanım şartları ve resmi veri araçları vardır.

Web'den veri toplamanın genel hukuki çerçevesini Web Scraping Yasal mı? yazımızda, robots.txt kurallarının nasıl okunduğunu robots.txt Dosyası Nedir, Nasıl Okunur? yazımızda anlattık.

Kullanım senaryoları

  • İçerik ekibinin haftalık raporu: Search Console API'den günlük veri, SQLite'ta saklama, en çok düşen ve yükselen 20 sorgunun haftalık listesi.
  • Çok şehirli işletmenin yerel görünürlüğü: Search Console'dan ülke düzeyinde trend, lisanslı SERP servisinden şehir bazlı ölçüm, önemli şehir sayfaları için insan ölçeğinde doğrulama. Gerçek ev bağlantısından çıkan Residential Proxy adresleri, bir uzmanın bu sayfaları o şehirdeki kullanıcı gibi görmesini sağlar.
  • Yerel arama motorlarında görünürlük: Google dışındaki arama motorlarında bölgesel sonuçların kontrolü; ilgili sayfalar Google proxy ve Yandex proxy çözümlerimizde.
  • Pazar araştırması: Bir sektördeki sitelerin arama görünürlüğünü lisanslı veriyle karşılaştırmak. Araştırma kurgusu pazar araştırması çözümü sayfamızda.
  • Rakip sitelerin herkese açık sayfalarını izlemek: Arama motoru sonuçları değil, rakiplerin kendi sitelerindeki içerik ve fiyat değişiklikleri. Bu iş sitelerin robots.txt ve şartlarına uyarak, hız sınırıyla yapılır; yükü dağıtmak için Rotating Proxy kullanılabilir. Kuralları Web Scraping'de Engellenmeden Veri Toplama Yöntemleri yazımızda anlattık.

Sık yapılan hatalar

  • Oturum açık tarayıcıda sıra kontrol etmek. Kişiselleştirme sonucu çarpıtır.
  • Search Console pozisyonunu anlık sıra sanmak. Değer, dönem içindeki bütün gösterimlerin ortalamasıdır; farklı ülke ve cihazların karışımını da içerebilir. Ülke ve cihaz filtresiyle bakın.
  • Son iki üç günün verisine göre karar vermek. Veri henüz kesinleşmemiş olabilir.
  • 25.000 satır sınırını unutmak. Büyük sitelerde sayfalama yapılmazsa veri sessizce eksik gelir.
  • Düşük gösterimli sorgulardaki dalgalanmaya tepki vermek. Anlamlı değişim için gösterim eşiği koyun.
  • Anahtar kelime listesini hiç güncellememek. Sitenin yeni sayfaları ve değişen arama davranışları listeye yansımalıdır.
  • Arama motoru sonuçlarını otomatik kazımak. Politikalara aykırıdır ve kalıcı bir çözüm değildir.

Karar rehberi

İhtiyacınızÖneri
Kendi sitenizin sorgu bazlı sırasıSearch Console API
Tıklama, gösterim ve CTRSearch Console API
Ülke ve cihaz kırılımıSearch Console API
Rakiplerin sırasıLisanslı SERP veri servisi
Şehir bazlı sıra ölçümüLisanslı SERP veri servisi
Birkaç kritik sayfanın şehirden görünümünü doğrulamakİnsan ölçeğinde manuel kontrol, şehir bazlı IP
Rakip sitelerin içerik ve fiyat değişimiKurallara uygun scraping, hız sınırıyla
Google sonuçlarını kendi betiğinizle toplamakÖnerilmez, politikalara aykırı

Sık sorulan sorular

Search Console'daki ortalama pozisyon ne anlama gelir?

Seçilen dönemde sitenizin o sorgu için aldığı bütün gösterimlerdeki en üst sırasının ortalamasıdır. Farklı günlerde, farklı ülkelerde ve cihazlarda görülen sıraların karışımı olduğu için tek bir kullanıcının gördüğü sırayla birebir aynı olmayabilir.

Search Console API ücretli mi?

Hayır, Search Console API ücretsizdir. Kullanım kotaları vardır; günlük tek bir toplu çekim yapan bir sıra takip betiği bu kotaların genellikle çok altında kalır.

Neden bazı sorgular Search Console'da görünmüyor?

Google, kullanıcı gizliliğini korumak için çok az sayıda kişinin aradığı bazı sorguları raporlarda göstermez. Bu yüzden sorgu kırılımındaki toplam tıklama, genel toplamdan düşük görünebilir.

Rakiplerimin sırasını nasıl takip ederim?

Search Console bu veriyi vermez. Rakip sıraları için arama sonuç verisini lisanslı olarak sağlayan servisler kullanılır. Servis seçerken verinin hangi yolla toplandığını ve sözleşmenin kullanımınızı kapsadığını kontrol edin.

Proxy ile Google'da otomatik sıra kontrolü yapabilir miyim?

Google'ın spam politikaları açık izin olmadan sıra kontrolü amacıyla otomatik sorgu göndermeyi yasaklar; IP adresini değiştirmek bu durumu değiştirmez. Proxy'nin bu alandaki meşru kullanımı, bir uzmanın insan ölçeğinde birkaç kritik sayfanın farklı şehirlerden nasıl göründüğünü doğrulamasıdır.

Sıra takibini ne sıklıkla yapmalıyım?

Search Console verisi için günlük çekim yeterlidir; karar almak için haftalık ve aylık trendlere bakın. Günlük dalgalanmalar çoğu zaman anlamlı bir değişim göstermez.

Özetle

Elle sıra kontrolü kişiselleştirme, konum ve cihaz farkları nedeniyle hem ölçeklenmez hem yanıltır. Otomasyona Search Console API ile başlayın: veriyi sorgu, sayfa, ülke ve cihaz kırılımıyla günlük çekin, 25.000 satırlık sayfalama yapın, veritabanında saklayın ve dönemler arası değişimi raporlayın. Rakip ve şehir bazlı veri için lisanslı SERP servislerini, önemli sayfaların yerel görünümü için insan ölçeğinde kontrolleri kullanın. Google sonuçlarını izinsiz otomatik sorgularla kazımak politikalara aykırıdır. Konum bazlı manuel kontroller için uygun seçenekleri proxy hizmetlerimizde bulabilirsiniz.

ChatGPT'ye sorClaude'a sor