Google’ın yeni veya güncellenmiş sayfaları keşfetmesi genellikle site haritaları, dahili bağlantılar ve normal tarama süreçleri üzerinden gerçekleşir. Ancak iş ilanları ve canlı yayın sayfaları gibi kısa süre içerisinde güncellenen veya yayından kaldırılan içeriklerde daha hızlı bildirim yapılmasına ihtiyaç duyulabilir.
Google Indexing API, desteklenen sayfalardaki ekleme, güncelleme ve kaldırma işlemlerini doğrudan Google’a bildirmek için kullanılan bir programlama arayüzüdür.
API üzerinden gönderilen istek, Google’a ilgili URL’de bir değişiklik olduğunu bildirir. Ancak bu işlem URL’nin kesin olarak dizine ekleneceği, arama sonuçlarında gösterileceği veya belirli bir sıralama elde edeceği anlamına gelmez.
Google Indexing API kurulumu genel olarak şu aşamalardan oluşur:
- Google Cloud projesi oluşturmak
- Indexing API hizmetini etkinleştirmek
- Servis hesabı oluşturmak
- JSON anahtar dosyası indirmek
- Servis hesabını Search Console mülküne sahip olarak eklemek
- OAuth 2.0 erişim belirteci oluşturmak
- Python veya WordPress üzerinden API isteği göndermek
- Kota ve hata kayıtlarını takip etmek
Bu rehberde Google Indexing API kurulumu, Python ile kullanım, WordPress entegrasyonu, URL güncelleme ve kaldırma işlemleri ayrıntılı olarak anlatılmıştır.
Google Indexing API Nedir?
Google Indexing API, desteklenen web sayfalarının eklendiğini, güncellendiğini veya kaldırıldığını Google’a bildirmeyi sağlayan bir REST API hizmetidir.
Indexing API ile şu işlemler yapılabilir:
- Yeni bir URL’nin yayınlandığını bildirmek
- Mevcut sayfanın güncellendiğini bildirmek
- Kaldırılan sayfanın dizinden çıkarılmasını istemek
- Daha önce gönderilen bildirimin durumunu sorgulamak
- Birden fazla bildirimi toplu istek içerisinde göndermek
API, sayfanın içeriğini doğrudan Google dizinine eklemez. Yalnızca Google’a ilgili URL’nin yeniden taranması veya kaldırılmasının değerlendirilmesi için bildirim gönderir.
Google’ın sayfaları tarama ve dizine ekleme sürecini daha iyi anlamak için index nedir içeriği incelenebilir.
Önemli: Indexing API Her Sayfada Kullanılamaz
Google Indexing API’nin en fazla yanlış anlaşılan özelliği kullanım kapsamıdır.
Google’ın güncel yönergelerine göre Indexing API yalnızca şu sayfa türlerinde kullanılmalıdır:
JobPostingyapılandırılmış verisine sahip iş ilanı sayfalarıVideoObjectiçerisindeBroadcastEventbulunan canlı yayın sayfaları
API’nin desteklemediği genel sayfa türleri şunlardır:
- Blog içerikleri
- Haber sayfaları
- Ürün sayfaları
- Ürün kategorileri
- Kurumsal hizmet sayfaları
- Konum sayfaları
- Etiket ve arşiv sayfaları
- Normal etkinlik sayfaları
- Emlak ilanları
- Otomobil ilanları
- Profil sayfaları
- Forum konuları
Teknik olarak API uç noktasına farklı URL’ler gönderilebilmesi, bu kullanımın Google yönergelerine uygun olduğu anlamına gelmez.
Desteklenmeyen URL’leri göndererek API kotalarını aşmaya çalışmak, birden fazla servis hesabıyla sınırları geçmek veya otomatik şekilde bütün siteyi göndermek erişimin kısıtlanmasına neden olabilir.
Blog ve Ürün Sayfaları Google’a Nasıl Bildirilmelidir?
Normal web sayfaları için aşağıdaki yöntemler kullanılmalıdır:
- XML site haritası oluşturmak
- Site haritasını Google Search Console’a göndermek
- Önemli URL’lerde URL Denetleme aracını kullanmak
- Sayfalara taranabilir dahili bağlantılar vermek
- Canonical etiketlerini doğru kullanmak
- Robots.txt ve noindex ayarlarını kontrol etmek
- Güncellenen sayfaların
lastmodbilgilerini düzenlemek - Sunucunun Googlebot’a erişilebilir olmasını sağlamak
Site haritası oluşturma ve gönderme süreci için sitemap nedir rehberinden yararlanılabilir.
Dizine eklenme sorunlarını ve sayfa durumlarını kontrol etmek için Google Search Console kullanılmalıdır.
Google Indexing API Ne İşe Yarar?
Indexing API özellikle kısa ömürlü sayfalardaki değişikliklerin Google’a bildirilmesine yardımcı olur.
Yeni iş ilanını bildirmek
Yeni bir iş ilanı yayınlandığında URL, URL_UPDATED bildirimiyle gönderilebilir.
İş ilanındaki değişikliği bildirmek
İlan açıklaması, çalışma konumu, ücret, son başvuru tarihi veya ilan durumu değiştiğinde yeniden URL_UPDATED bildirimi gönderilebilir.
Süresi dolan ilanı kaldırmak
İş ilanı sona erdiğinde sayfa 404, 410 veya noindex durumuna getirildikten sonra URL_DELETED bildirimi gönderilebilir.
Canlı yayın başlangıcını bildirmek
Geçerli BroadcastEvent işaretlemesine sahip canlı yayın başladığında Google’a güncelleme bildirimi yapılabilir.
Canlı yayın değişikliklerini bildirmek
Yayın başlangıç ve bitiş bilgileri değiştiğinde güncelleme bildirimi gönderilebilir.
Bildirim durumunu sorgulamak
Bir URL için Google’ın aldığı en son güncelleme ve kaldırma bildirimleri sorgulanabilir.
Indexing API Neleri Yapmaz?
Indexing API’nin sınırları doğru anlaşılmalıdır.
API aşağıdaki işlemleri garanti etmez:
- URL’nin kesin olarak dizine eklenmesi
- URL’nin aynı gün taranması
- Arama sonuçlarında görünme
- Anahtar kelimelerde sıralama kazanma
- Canonical URL’nin kabul edilmesi
- Yapılandırılmış verinin geçerli sayılması
- Zayıf içeriğin kaliteli kabul edilmesi
- Teknik SEO sorunlarının çözülmesi
- Robots.txt engelinin aşılması
- Noindex etiketinin yok sayılması
- Manuel işlem veya spam sorunlarının giderilmesi
API isteğinin başarılı olması yalnızca Google’ın bildirimi aldığını gösterir.
Bir sayfanın dizine eklenebilmesi için:
- Googlebot tarafından erişilebilir olması
- Başarılı HTTP durum kodu döndürmesi
- Noindex etiketi taşımaması
- Uygun canonical kullanması
- Yeterli ve özgün içerik sunması
- Spam politikalarına uygun olması
- Desteklenen yapılandırılmış veriyi içermesi
gerekir.
Bu kontroller genel bir teknik SEO çalışmasının parçasıdır.
Indexing API Bildirim Türleri
API iki temel bildirim türünü destekler.
| Bildirim | Kullanım amacı |
|---|---|
URL_UPDATED |
Yeni yayınlanan veya içeriği değiştirilen sayfayı bildirmek |
URL_DELETED |
Kaldırılan veya noindex yapılan sayfayı bildirmek |
URL_UPDATED
Yeni veya güncellenmiş sayfalar için kullanılır.
Örnek istek gövdesi:
{
"url": "https://www.example.com/is-ilanlari/yazilim-uzmani",
"type": "URL_UPDATED"
}
Aynı bildirim hem yeni sayfalar hem de mevcut sayfalardaki önemli değişiklikler için kullanılır.
URL_DELETED
Google’dan kaldırılması istenen sayfalarda kullanılır.
Örnek istek gövdesi:
{
"url": "https://www.example.com/is-ilanlari/yazilim-uzmani",
"type": "URL_DELETED"
}
Kaldırma bildirimi gönderilmeden önce URL’nin:
- 404 durum kodu döndürmesi,
- 410 durum kodu döndürmesi veya
- Noindex etiketi taşıması
gerekir.
Sayfa başka bir adrese taşındıysa silme bildirimi yerine uygun bir yönlendirme uygulanmalıdır. Kalıcı adres değişikliklerinde 301 yönlendirme kullanılabilir.
Google Indexing API ile Sitemap Arasındaki Fark
| Kriter | Indexing API | XML sitemap |
|---|---|---|
| Kullanım kapsamı | İş ilanı ve canlı yayın sayfaları | Dizine açık bütün önemli URL’ler |
| Bildirim yöntemi | API isteği | XML dosyası |
| Güncelleme | URL bazında bildirilir | Site haritası güncellenir |
| Kimlik doğrulama | OAuth 2.0 gerekir | Search Console üzerinden gönderilebilir |
| Kota | API kotası bulunur | Doğrudan aynı kota yapısı bulunmaz |
| Dizine ekleme garantisi | Yok | Yok |
| Kaldırma bildirimi | URL_DELETED kullanılabilir |
URL site haritasından çıkarılabilir |
| Uygun kullanım | Kısa ömürlü desteklenen içerikler | Site genelindeki URL keşfi |
Indexing API kullanılsa bile XML site haritasının korunması önerilir. Site haritası, arama motorlarının sitenin genel URL yapısını keşfetmesine yardımcı olur.
Indexing API ile Search Console URL Denetleme Arasındaki Fark
| Kriter | Indexing API | URL Denetleme |
|---|---|---|
| Kullanım biçimi | Programlı ve otomatik | Search Console panelinden manuel |
| Desteklenen URL | İş ilanı ve canlı yayın | Yönetilen mülkteki farklı URL’ler |
| Toplu kullanım | En fazla 100 istek birleştirilebilir | Tek tek URL kontrol edilir |
| Durum sorgulama | Bildirim geçmişini döndürür | Google’ın URL hakkındaki indeks bilgilerini gösterir |
| İndeks talebi | Desteklenen sayfa için bildirim | Önemli URL için manuel talep |
| İndeks garantisi | Yok | Yok |
Indexing API durum sorgusu ile URL Denetleme raporu aynı şeyi göstermez.
API’nin getMetadata yöntemi, Google’ın bildirimi alıp almadığını gösterir. URL’nin gerçekten dizine eklenip eklenmediğini göstermez.
Google Indexing API Kullanım Gereksinimleri
Kurulum için şu bileşenlere ihtiyaç duyulur:
- Google hesabı
- Google Cloud projesi
- Etkinleştirilmiş Indexing API
- Servis hesabı
- JSON özel anahtar dosyası
- Search Console’da doğrulanmış mülk
- Servis hesabının mülke sahip olarak eklenmesi
- OAuth 2.0 yetkilendirmesi
- Python veya PHP çalıştırabilen ortam
- Desteklenen yapılandırılmış veriye sahip sayfalar
Google Cloud Projesi Oluşturma
İlk aşamada Indexing API için bir Google Cloud projesi oluşturulmalıdır.
Proje adını belirleyin
Proje adı, API’nin kullanılacağı site veya sistemle ilişkilendirilebilir.
Örnek:
softajans-indexing-api
Birden fazla müşteri sitesi yönetiliyorsa her site veya proje için ayrı yapı oluşturmak güvenlik ve kota takibini kolaylaştırabilir.
Projeyi seçin
Google Cloud panelinde API’yi etkinleştirmeden önce doğru projenin seçildiğinden emin olun.
Yanlış projede servis hesabı oluşturmak veya API’yi farklı projede etkinleştirmek yetkilendirme sorunlarına neden olabilir.
Indexing API’yi Etkinleştirme
Google Cloud projesinde:
- API ve Hizmetler bölümüne girilir.
- API kitaplığı açılır.
- Indexing API aranır.
- İlgili API seçilir.
- Etkinleştirme işlemi tamamlanır.
API etkinleştirilmeden gönderilen isteklerde hizmetin kapalı olduğunu belirten yetki hataları alınabilir.
Servis Hesabı Oluşturma
Servis hesabı, insan kullanıcısından bağımsız olarak uygulamaların Google hizmetlerine erişmesini sağlayan teknik hesaptır.
Servis hesabı oluştururken:
- Açıklayıcı bir hesap adı belirleyin.
- Projeyle ilişkili hesabı seçin.
- Gerekli olmayan geniş Google Cloud rollerini vermeyin.
- Servis hesabının e-posta adresini kaydedin.
- JSON anahtarını güvenli şekilde oluşturun.
Örnek servis hesabı adresi:
indexing-bot@softajans-indexing-api.iam.gserviceaccount.com
Google Cloud projesinde servis hesabına genel yönetici rolü vermek çoğu durumda gerekli değildir. Indexing API erişiminde asıl önemli konu, servis hesabının Search Console mülkünde uygun yetkiye sahip olmasıdır.
JSON Anahtar Dosyası Oluşturma
Servis hesabı oluşturulduktan sonra özel anahtar oluşturulur.
Önerilen dosya biçimi:
JSON
Dosya içerisinde genel olarak şu alanlar bulunur:
{
"type": "service_account",
"project_id": "softajans-indexing-api",
"private_key_id": "PRIVATE_KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "indexing-bot@softajans-indexing-api.iam.gserviceaccount.com",
"client_id": "CLIENT_ID",
"token_uri": "https://oauth2.googleapis.com/token"
}
Bu dosya şifre gibi değerlendirilmelidir.
JSON anahtarı nerede saklanmalıdır?
Dosya:
- Web sitesinin herkese açık klasörüne yüklenmemeli
- WordPress Medya Kütüphanesi’ne eklenmemeli
- Git deposuna gönderilmemeli
- E-posta veya mesajlaşma uygulamalarında paylaşılmamalı
- Tema klasörünün içerisine konulmamalı
- Yedek dosyalarla herkese açık hale getirilmemelidir
Mümkünse web kök dizininin dışında saklanmalıdır.
Örnek Linux dosya yolu:
/home/kullanici/private/google-indexing-service-account.json
Dosya izinleri mümkün olduğunca sınırlandırılmalıdır:
chmod 600 /home/kullanici/private/google-indexing-service-account.json
Anahtarın açığa çıktığından şüpheleniliyorsa Google Cloud üzerinden ilgili anahtar iptal edilmeli ve yenisi oluşturulmalıdır.
Servis Hesabını Search Console’a Ekleme
Servis hesabının ilgili site adına bildirim gönderebilmesi için Search Console mülküne eklenmesi gerekir.
Site sahipliğini doğrulayın
Öncelikle site normal Google hesabıyla Search Console’da doğrulanmalıdır.
Şu mülk türleri kullanılabilir:
- Alan adı mülkü
- URL ön eki mülkü
URL ön eki mülkünde protokol ve alt alan adı eşleşmesine dikkat edilmelidir.
Örneğin şu adresler farklı kapsamlar oluşturabilir:
http://example.com/
https://example.com/
https://www.example.com/
https://example.com/is-ilanlari/
Servis hesabı e-postasını ekleyin
JSON dosyasındaki client_email değeri Search Console mülküne eklenmelidir.
Örnek:
indexing-bot@softajans-indexing-api.iam.gserviceaccount.com
Servis hesabı yalnızca normal kullanıcı olarak değil, gerekli mülk üzerinde sahip yetkisiyle eklenmelidir.
Yanlış Search Console mülküne eklenen servis hesabı 403 Forbidden veya sahiplik doğrulama hatalarına neden olabilir.
Indexing API Kotaları
Başlangıç ve test kullanımı için varsayılan kotalar uygulanır.
| Kota | Varsayılan sınır |
|---|---|
| Günlük yayın isteği | Proje başına 200 |
| Dakikalık metadata isteği | Proje başına 180 |
| Bütün uç noktalar için dakikalık istek | Proje başına 380 |
| Tek batch içerisindeki maksimum çağrı | 100 |
Günlük yayın kotasına hem URL_UPDATED hem de URL_DELETED istekleri dahildir.
Batch kullanmak kotayı azaltır mı?
Hayır.
Örneğin 100 URL tek bir batch isteği içerisinde gönderilirse kota açısından 100 yayın isteği kullanılmış olur.
Batch yöntemi yalnızca kurulan HTTP bağlantısı sayısını azaltır.
Birden fazla servis hesabı kullanmak doğru mu?
Kota sınırını aşmak için:
- Birden fazla servis hesabı
- Birden fazla Google Cloud projesi
- Farklı hesaplar
- Dönen anahtar sistemleri
kullanılmamalıdır.
Bu tür uygulamalar kota sınırlarını aşma girişimi olarak değerlendirilebilir.
Python ile Google Indexing API Kurulumu
Python kullanımı, toplu URL yönetimi, zamanlanmış işlemler ve özel otomasyonlar için uygun bir yöntemdir.
Python Ortamını Hazırlama
Python sürümünü kontrol edin:
python --version
Bazı sistemlerde komut şu şekilde olabilir:
python3 --version
Proje klasörü oluşturun:
mkdir google-indexing-api
cd google-indexing-api
Sanal ortam oluşturun:
python -m venv .venv
Windows üzerinde sanal ortamı etkinleştirin:
.venv\Scripts\activate
macOS ve Linux üzerinde:
source .venv/bin/activate
Python Paketlerini Yükleme
Gerekli paketleri yüklemek için:
python -m pip install --upgrade google-api-python-client google-auth
Bağımlılıkları dosyaya kaydetmek için:
python -m pip freeze > requirements.txt
Örnek requirements.txt içeriği:
google-api-python-client
google-auth
Python Proje Yapısı
Örnek klasör yapısı:
google-indexing-api/
├── .venv/
├── private/
│ └── service-account.json
├── indexing_api.py
├── requirements.txt
└── .gitignore
.gitignore dosyasına şu satırlar eklenmelidir:
.venv/
private/
*.json
__pycache__/
.env
Bu işlem JSON anahtarının yanlışlıkla Git deposuna eklenmesini önlemeye yardımcı olur.
Python ile URL Güncelleme ve Silme Scripti
Aşağıdaki script:
- Servis hesabıyla kimlik doğrular.
- URL güncelleme bildirimi gönderir.
- URL silme bildirimi gönderir.
- Bildirim durumunu sorgular.
- Birden fazla URL kabul eder.
- API hatalarını yakalar.
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
from typing import Any
from google.oauth2 import service_account
from googleapiclient.discovery import Resource, build
from googleapiclient.errors import HttpError
SCOPES = ["https://www.googleapis.com/auth/indexing"]
ACTION_TYPES = {
"update": "URL_UPDATED",
"delete": "URL_DELETED",
}
def create_service(key_file: Path) -> Resource:
"""Yetkilendirilmiş Indexing API istemcisini oluşturur."""
if not key_file.is_file():
raise FileNotFoundError(f"Servis hesabı dosyası bulunamadı: {key_file}")
credentials = service_account.Credentials.from_service_account_file(
str(key_file),
scopes=SCOPES,
)
return build(
"indexing",
"v3",
credentials=credentials,
cache_discovery=False,
)
def validate_url(url: str) -> str:
"""URL'nin temel biçimini kontrol eder."""
normalized = url.strip()
if not normalized.startswith(("https://", "http://")):
raise ValueError(f"Geçersiz URL: {url}")
return normalized
def publish_notification(
service: Resource,
url: str,
notification_type: str,
) -> dict[str, Any]:
"""URL_UPDATED veya URL_DELETED bildirimi gönderir."""
body = {
"url": validate_url(url),
"type": notification_type,
}
response = (
service.urlNotifications()
.publish(body=body)
.execute()
)
return response
def get_metadata(service: Resource, url: str) -> dict[str, Any]:
"""Daha önce gönderilmiş bildirimin metadata bilgisini getirir."""
response = (
service.urlNotifications()
.getMetadata(url=validate_url(url))
.execute()
)
return response
def print_json(data: dict[str, Any]) -> None:
print(json.dumps(data, ensure_ascii=False, indent=2))
def main() -> int:
parser = argparse.ArgumentParser(
description="Google Indexing API bildirim aracı"
)
parser.add_argument(
"action",
choices=["update", "delete", "status"],
help="Gerçekleştirilecek işlem",
)
parser.add_argument(
"urls",
nargs="+",
help="İşlem yapılacak tam URL adresleri",
)
parser.add_argument(
"--key",
required=True,
type=Path,
help="Servis hesabı JSON dosyasının yolu",
)
args = parser.parse_args()
try:
service = create_service(args.key)
for raw_url in args.urls:
url = validate_url(raw_url)
print(f"\nİşleniyor: {url}")
if args.action == "status":
result = get_metadata(service, url)
else:
result = publish_notification(
service,
url,
ACTION_TYPES[args.action],
)
print_json(result)
return 0
except FileNotFoundError as error:
print(f"Dosya hatası: {error}", file=sys.stderr)
return 1
except ValueError as error:
print(f"Doğrulama hatası: {error}", file=sys.stderr)
return 1
except HttpError as error:
status = getattr(error.resp, "status", "bilinmiyor")
detail = error.content.decode("utf-8", errors="replace")
print(
f"Google API hatası ({status}): {detail}",
file=sys.stderr,
)
return 1
except Exception as error:
print(f"Beklenmeyen hata: {error}", file=sys.stderr)
return 1
if __name__ == "__main__":
raise SystemExit(main())
Python Scripti Nasıl Kullanılır?
Yeni veya güncellenmiş URL gönderme
python indexing_api.py update \
https://www.example.com/is-ilanlari/yazilim-uzmani \
--key private/service-account.json
Birden fazla URL:
python indexing_api.py update \
https://www.example.com/is-ilanlari/yazilim-uzmani \
https://www.example.com/is-ilanlari/seo-uzmani \
--key private/service-account.json
Kaldırma bildirimi gönderme
URL’nin önce 404, 410 veya noindex durumuna getirildiğinden emin olun.
python indexing_api.py delete \
https://www.example.com/is-ilanlari/yazilim-uzmani \
--key private/service-account.json
Bildirim durumunu sorgulama
python indexing_api.py status \
https://www.example.com/is-ilanlari/yazilim-uzmani \
--key private/service-account.json
Durum sorgusu, Google’ın en son ne zaman bildirim aldığını gösterebilir. URL’nin dizinde olup olmadığını kesin olarak göstermez.
Python ile Batch İstek Gönderme
En fazla 100 bildirimi tek HTTP batch isteğinde birleştirmek mümkündür.
from __future__ import annotations
from typing import Any
from googleapiclient.discovery import Resource
def batch_publish(
service: Resource,
urls: list[str],
notification_type: str = "URL_UPDATED",
) -> dict[str, dict[str, Any]]:
if not urls:
return {}
if len(urls) > 100:
raise ValueError("Tek batch isteğinde en fazla 100 URL kullanılabilir.")
results: dict[str, dict[str, Any]] = {}
def callback(
request_id: str,
response: dict[str, Any] | None,
exception: Exception | None,
) -> None:
url = urls[int(request_id)]
if exception is not None:
results[url] = {
"success": False,
"error": str(exception),
}
return
results[url] = {
"success": True,
"response": response or {},
}
batch = service.new_batch_http_request(callback=callback)
for index, url in enumerate(urls):
request = service.urlNotifications().publish(
body={
"url": url,
"type": notification_type,
}
)
batch.add(request, request_id=str(index))
batch.execute()
return results
Kullanım örneği:
urls = [
"https://www.example.com/is-ilanlari/yazilim-uzmani",
"https://www.example.com/is-ilanlari/seo-uzmani",
]
results = batch_publish(
service,
urls,
notification_type="URL_UPDATED",
)
print(results)
Batch içerisinde 50 URL bulunuyorsa günlük kotadan 50 istek düşer.
Python Scripti Zamanlanabilir mi?
Linux sunucuda cron kullanılarak belirli zamanlarda çalıştırılabilir.
Örnek:
0 * * * * /home/user/project/.venv/bin/python \
/home/user/project/indexing_api.py update \
https://www.example.com/is-ilanlari/yazilim-uzmani \
--key /home/user/private/service-account.json
Ancak aynı değişmemiş URL’yi her saat veya her gün göndermek doğru değildir.
Bildirim yalnızca:
- Yeni ilan yayınlandığında
- İlan içeriği önemli ölçüde değiştiğinde
- İlan kaldırıldığında
- Canlı yayın bilgisi değiştiğinde
gönderilmelidir.
Düzenli olarak aynı URL’yi göndermek kota israfına neden olur.
WordPress ile Google Indexing API Kullanımı
WordPress entegrasyonu şu yöntemlerle yapılabilir:
- Hazır Indexing API eklentisi kullanmak
- Özel WordPress eklentisi geliştirmek
- WordPress dışındaki Python servisine webhook göndermek
- Yayınlama işlemlerini kuyruk sistemiyle takip etmek
Hazır eklenti kullanılırken eklentinin bütün yazıları otomatik göndermediğinden emin olunmalıdır. Yalnızca desteklenen iş ilanı veya canlı yayın içerik türleri seçilmelidir.
WordPress araçlarının görevlerini karşılaştırmak için WordPress SEO eklentileri içeriği incelenebilir.
WordPress’te JSON Anahtarı Nasıl Saklanır?
JSON dosyasını tema veya eklenti klasörüne yüklemek önerilmez.
Dosyayı web kök dizininin dışında saklayın:
/home/kullanici/private/google-indexing-service-account.json
Ardından wp-config.php dosyasına şu tanımı ekleyin:
define(
'SOFT_INDEXING_SERVICE_ACCOUNT_JSON',
'/home/kullanici/private/google-indexing-service-account.json'
);
Bu satır, wp-config.php dosyasındaki şu açıklamadan önce eklenebilir:
/* That's all, stop editing! Happy publishing. */
Anahtar dosyasını doğrudan eklenti ayarına metin olarak yapıştırmak, veritabanı ve yedek dosyalarında hassas anahtarın saklanmasına neden olabilir.
WordPress İçin Özel Indexing API Eklentisi
Aşağıdaki örnek eklenti:
- Servis hesabı JSON dosyasını okur.
- OAuth 2.0 erişim belirteci oluşturur.
- Erişim belirtecini geçici olarak önbelleğe alır.
- Desteklenen yazı türü yayınlandığında
URL_UPDATEDgönderir. - İçerik çöpe taşındığında
URL_DELETEDgönderir. - İşlemleri WP-Cron kuyruğuna alır.
- Hataları WordPress hata günlüğüne kaydeder.
wp-content/plugins/soft-indexing-api/ klasörünü oluşturun.
Klasör içerisinde şu dosyayı hazırlayın:
soft-indexing-api.php
Dosya içeriği:
<?php
/**
* Plugin Name: Soft Indexing API
* Description: Desteklenen WordPress içerikleri için Google Indexing API bildirimi gönderir.
* Version: 1.0.0
*/
defined('ABSPATH') || exit;
const SOFT_INDEXING_SCOPE =
'https://www.googleapis.com/auth/indexing';
const SOFT_INDEXING_TOKEN_URL =
'https://oauth2.googleapis.com/token';
const SOFT_INDEXING_PUBLISH_URL =
'https://indexing.googleapis.com/v3/urlNotifications:publish';
/**
* Base64 URL biçimi oluşturur.
*/
function soft_indexing_base64_url_encode($value)
{
return rtrim(
strtr(base64_encode($value), '+/', '-_'),
'='
);
}
/**
* Servis hesabı JSON dosyasını okur.
*/
function soft_indexing_load_credentials()
{
if (!defined('SOFT_INDEXING_SERVICE_ACCOUNT_JSON')) {
return new WP_Error(
'missing_key_path',
'Servis hesabı JSON dosya yolu tanımlanmamış.'
);
}
$path = SOFT_INDEXING_SERVICE_ACCOUNT_JSON;
if (!is_readable($path)) {
return new WP_Error(
'unreadable_key_file',
'Servis hesabı JSON dosyası okunamıyor.'
);
}
$contents = file_get_contents($path);
$credentials = json_decode($contents, true);
if (!is_array($credentials)) {
return new WP_Error(
'invalid_json',
'Servis hesabı dosyası geçerli JSON değil.'
);
}
$required_fields = array(
'client_email',
'private_key',
);
foreach ($required_fields as $field) {
if (empty($credentials[$field])) {
return new WP_Error(
'missing_credential_field',
'Servis hesabı dosyasında eksik alan: ' . $field
);
}
}
return $credentials;
}
/**
* OAuth 2.0 erişim belirteci oluşturur.
*/
function soft_indexing_get_access_token()
{
$cached_token = get_transient(
'soft_indexing_access_token'
);
if (is_string($cached_token) && $cached_token !== '') {
return $cached_token;
}
$credentials = soft_indexing_load_credentials();
if (is_wp_error($credentials)) {
return $credentials;
}
$now = time();
$header = array(
'alg' => 'RS256',
'typ' => 'JWT',
);
if (!empty($credentials['private_key_id'])) {
$header['kid'] = $credentials['private_key_id'];
}
$claims = array(
'iss' => $credentials['client_email'],
'scope' => SOFT_INDEXING_SCOPE,
'aud' => SOFT_INDEXING_TOKEN_URL,
'iat' => $now,
'exp' => $now + 3600,
);
$encoded_header = soft_indexing_base64_url_encode(
wp_json_encode($header)
);
$encoded_claims = soft_indexing_base64_url_encode(
wp_json_encode($claims)
);
$unsigned_token =
$encoded_header . '.' . $encoded_claims;
$signature = '';
$signed = openssl_sign(
$unsigned_token,
$signature,
$credentials['private_key'],
OPENSSL_ALGO_SHA256
);
if (!$signed) {
return new WP_Error(
'jwt_signing_failed',
'JWT imzası oluşturulamadı.'
);
}
$assertion =
$unsigned_token . '.' .
soft_indexing_base64_url_encode($signature);
$response = wp_remote_post(
SOFT_INDEXING_TOKEN_URL,
array(
'timeout' => 20,
'body' => array(
'grant_type' =>
'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion' => $assertion,
),
)
);
if (is_wp_error($response)) {
return $response;
}
$status_code = wp_remote_retrieve_response_code(
$response
);
$body = json_decode(
wp_remote_retrieve_body($response),
true
);
if (
$status_code !== 200 ||
!is_array($body) ||
empty($body['access_token'])
) {
return new WP_Error(
'token_request_failed',
'Google erişim belirteci alınamadı.',
array(
'status' => $status_code,
'body' => $body,
)
);
}
$expires_in = isset($body['expires_in'])
? (int) $body['expires_in']
: 3600;
set_transient(
'soft_indexing_access_token',
sanitize_text_field($body['access_token']),
max(60, $expires_in - 300)
);
return $body['access_token'];
}
/**
* Indexing API bildirimi gönderir.
*/
function soft_indexing_publish_notification(
$url,
$notification_type
) {
$allowed_types = array(
'URL_UPDATED',
'URL_DELETED',
);
if (
!filter_var($url, FILTER_VALIDATE_URL) ||
!in_array(
$notification_type,
$allowed_types,
true
)
) {
return new WP_Error(
'invalid_notification',
'URL veya bildirim türü geçersiz.'
);
}
$access_token = soft_indexing_get_access_token();
if (is_wp_error($access_token)) {
return $access_token;
}
$response = wp_remote_post(
SOFT_INDEXING_PUBLISH_URL,
array(
'timeout' => 20,
'headers' => array(
'Authorization' =>
'Bearer ' . $access_token,
'Content-Type' =>
'application/json',
),
'body' => wp_json_encode(
array(
'url' => esc_url_raw($url),
'type' => $notification_type,
)
),
)
);
if (is_wp_error($response)) {
return $response;
}
$status_code = wp_remote_retrieve_response_code(
$response
);
$body = json_decode(
wp_remote_retrieve_body($response),
true
);
if ($status_code !== 200) {
return new WP_Error(
'indexing_api_failed',
'Indexing API isteği başarısız oldu.',
array(
'status' => $status_code,
'body' => $body,
)
);
}
return is_array($body) ? $body : array();
}
/**
* API kullanımına izin verilen yazı türleri.
*
* Liste yalnızca geçerli JobPosting veya BroadcastEvent
* yapılandırılmış verisi üreten içerik türlerini içermelidir.
*/
function soft_indexing_allowed_post_types()
{
return apply_filters(
'soft_indexing_allowed_post_types',
array(
'job_listing',
)
);
}
/**
* İçeriğin Indexing API için uygun olup olmadığını kontrol eder.
*/
function soft_indexing_is_supported_post($post)
{
if (!($post instanceof WP_Post)) {
return false;
}
return in_array(
$post->post_type,
soft_indexing_allowed_post_types(),
true
);
}
/**
* Bildirimi WP-Cron kuyruğuna ekler.
*/
function soft_indexing_queue_notification(
$url,
$notification_type
) {
$args = array(
esc_url_raw($url),
$notification_type,
);
if (
!wp_next_scheduled(
'soft_indexing_send_notification',
$args
)
) {
wp_schedule_single_event(
time() + 15,
'soft_indexing_send_notification',
$args
);
}
}
/**
* Kuyruktaki bildirimi gönderir.
*/
function soft_indexing_process_notification(
$url,
$notification_type
) {
$result = soft_indexing_publish_notification(
$url,
$notification_type
);
if (is_wp_error($result)) {
error_log(
sprintf(
'[Soft Indexing API] %s | %s | %s',
$notification_type,
$url,
$result->get_error_message()
)
);
return;
}
error_log(
sprintf(
'[Soft Indexing API] Başarılı: %s | %s',
$notification_type,
$url
)
);
}
add_action(
'soft_indexing_send_notification',
'soft_indexing_process_notification',
10,
2
);
/**
* Yayınlanan veya güncellenen içerik için bildirim kuyruğu.
*/
function soft_indexing_on_save_post(
$post_id,
$post,
$update
) {
if (
wp_is_post_revision($post_id) ||
wp_is_post_autosave($post_id) ||
!soft_indexing_is_supported_post($post) ||
$post->post_status !== 'publish'
) {
return;
}
$url = get_permalink($post);
if (!$url) {
return;
}
$current_signature = md5(
$url . '|' . $post->post_modified_gmt
);
$saved_signature = get_post_meta(
$post_id,
'_soft_indexing_signature',
true
);
if (
$update &&
hash_equals(
(string) $saved_signature,
$current_signature
)
) {
return;
}
soft_indexing_queue_notification(
$url,
'URL_UPDATED'
);
update_post_meta(
$post_id,
'_soft_indexing_signature',
$current_signature
);
}
add_action(
'save_post',
'soft_indexing_on_save_post',
20,
3
);
/**
* Çöpe taşınan içerik için kaldırma bildirimi.
*/
function soft_indexing_on_trashed_post($post_id)
{
$post = get_post($post_id);
if (!soft_indexing_is_supported_post($post)) {
return;
}
$url = get_permalink($post);
if (!$url) {
return;
}
soft_indexing_queue_notification(
$url,
'URL_DELETED'
);
}
add_action(
'trashed_post',
'soft_indexing_on_trashed_post',
20,
1
);
/**
* Kalıcı olarak silinen içerik için kaldırma bildirimi.
*/
function soft_indexing_before_delete_post(
$post_id,
$post
) {
if (!soft_indexing_is_supported_post($post)) {
return;
}
$url = get_permalink($post);
if (!$url) {
return;
}
soft_indexing_queue_notification(
$url,
'URL_DELETED'
);
}
add_action(
'before_delete_post',
'soft_indexing_before_delete_post',
20,
2
);
WordPress Eklentisini Etkinleştirme
Eklenti dosyası yüklendikten sonra:
- WordPress yönetim paneline girin.
- Eklentiler bölümünü açın.
- Soft Indexing API eklentisini bulun.
- Eklentiyi etkinleştirin.
- İş ilanı içerik türünü kontrol edin.
- Test ilanı yayınlayın.
- Hata günlüğünü inceleyin.
- Search Console sahipliğini doğrulayın.
Eklentide varsayılan özel yazı türü şudur:
job_listing
Sitenizde farklı bir özel yazı türü kullanılıyorsa filtreyle değiştirilebilir:
function site_indexing_post_types($post_types)
{
return array(
'kariyer_ilani',
'canli_yayin',
);
}
add_filter(
'soft_indexing_allowed_post_types',
'site_indexing_post_types'
);
Bu listeye yalnızca geçerli JobPosting veya BroadcastEvent yapılandırılmış verisi üreten içerik türleri eklenmelidir.
WP-Cron Çalışmıyorsa Ne Olur?
Örnek eklenti bildirimleri WP-Cron kuyruğuna ekler. WP-Cron aşağıdaki durumlarda gecikebilir:
- Siteye trafik gelmiyorsa
- WordPress cron sistemi kapatıldıysa
- Sunucu dış bağlantıları engelliyorsa
- Güvenlik eklentisi isteği durduruyorsa
- Hosting zamanlanmış görevleri sınırlandırıyorsa
Daha güvenilir bir sistem için sunucu cron görevi kullanılabilir.
Örnek:
*/5 * * * * curl -s https://www.example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Sunucu güvenliği ve hosting yapılandırması doğru planlanmalıdır. Barındırma altyapısının temel özellikleri için hosting nedir içeriği incelenebilir.
WordPress’te Hata Günlüklerini Açma
Test ortamında wp-config.php dosyasına şu tanımlar eklenebilir:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Hata kayıtları genellikle şu dosyada bulunur:
wp-content/debug.log
Canlı sitede hata ayrıntılarının ziyaretçilere gösterilmemesi gerekir.
Test tamamlandıktan sonra günlük dosyasının hassas bilgi içerip içermediği kontrol edilmelidir.
Google Indexing API Yanıtları Nasıl Yorumlanır?
Başarılı bir bildirim isteği genel olarak metadata bilgisi döndürür.
Örnek:
{
"urlNotificationMetadata": {
"url": "https://www.example.com/is-ilanlari/yazilim-uzmani",
"latestUpdate": {
"url": "https://www.example.com/is-ilanlari/yazilim-uzmani",
"type": "URL_UPDATED",
"notifyTime": "2026-08-05T12:30:00Z"
}
}
}
Bu yanıt:
- Bildirimin Google tarafından alındığını
- Bildirim türünü
- Bildirim zamanını
gösterir.
URL’nin dizine eklendiğini veya arama sonuçlarında yer aldığını göstermez.
Indexing API Hata Kodları
| HTTP kodu | Genel anlamı | Kontrol edilmesi gerekenler |
|---|---|---|
| 400 | Hatalı istek | URL, JSON gövdesi ve bildirim türü |
| 401 | Kimlik doğrulama hatası | JWT, erişim belirteci ve sistem saati |
| 403 | Yetki veya kota sorunu | Search Console sahipliği ve API erişimi |
| 404 | Metadata bulunamadı | Daha önce başarılı bildirim gönderilip gönderilmediği |
| 429 | Kota aşıldı | Günlük ve dakikalık kotalar |
| 500 | Google sunucu hatası | İsteği daha sonra yeniden denemek |
| 503 | Hizmet geçici olarak kullanılamıyor | Geri çekilme stratejisiyle tekrar denemek |
400 Bad Request Hatası
Bu hata genellikle aşağıdaki nedenlerle oluşur:
- Geçersiz URL
- Eksik
typealanı - Yanlış bildirim türü
- Geçersiz JSON
- Yanlış Content-Type
- URL’nin tam adres olmaması
Doğru bildirim türleri:
URL_UPDATED
URL_DELETED
401 Unauthorized Hatası
Kimlik doğrulama işlemi başarısız olmuştur.
Kontrol edilmesi gerekenler:
- JSON dosyası geçerli mi?
- Özel anahtar doğru okunuyor mu?
- OAuth kapsamı doğru mu?
- Sunucunun tarihi ve saati doğru mu?
- JWT süresi bir saati geçiyor mu?
- Erişim belirteci süresi dolmuş mu?
- Servis hesabı anahtarı iptal edilmiş mi?
Sunucu saati yanlışsa JWT belirtecinin geçerlilik zamanı Google tarafından kabul edilmeyebilir.
403 Forbidden Hatası
En sık karşılaşılan hatalardan biridir.
Olası nedenler:
- Indexing API etkin değil
- Yanlış Google Cloud projesi kullanılıyor
- Servis hesabı Search Console’a eklenmemiş
- Servis hesabı yeterli yetkiye sahip değil
- Yanlış Search Console mülkü seçilmiş
- URL farklı protokol veya alt alan adına ait
- Günlük kota aşılmış
- API kullanımı kısıtlanmış
Örneğin Search Console mülkü yalnızca:
https://example.com/
ise şu URL farklı kapsamda olabilir:
https://www.example.com/
Alan adı mülkü kullanmak alt alan adları ve protokol farklılıklarının yönetimini kolaylaştırabilir.
404 Metadata Bulunamadı Hatası
getMetadata yalnızca daha önce başarılı şekilde bildirilen URL’ler için sonuç döndürebilir.
404 hatası şu anlama gelebilir:
- URL daha önce gönderilmemiş
- Önceki bildirim başarısız olmuş
- Farklı URL biçimi sorgulanıyor
- HTTP ve HTTPS adresleri karıştırılmış
- www ve www olmayan sürümler karıştırılmış
- Sondaki eğik çizgi farklı kullanılmış
URL’lerin canonical adresleriyle tutarlı olması gerekir. Canonical kullanımı hakkında bilgi almak için canonical URL nedir rehberi incelenebilir.
429 Too Many Requests Hatası
Kota veya hız sınırı aşılmıştır.
Çözüm için:
- Kota kullanımını kontrol edin.
- Aynı URL’nin tekrar gönderilmesini önleyin.
- İstekleri zamana yayın.
- Hata durumunda üstel bekleme kullanın.
- Değişmeyen URL’leri yeniden göndermeyin.
- Batch kullanımının kotayı azaltmadığını unutmayın.
- Gerekliyse resmî kota başvurusu yapın.
Birden fazla hesapla kotayı aşmaya çalışılmamalıdır.
Yeniden Deneme Stratejisi
429, 500 ve 503 gibi geçici hatalarda istek hemen ve sürekli tekrar edilmemelidir.
Örnek bekleme süreleri:
- İlk hata: 1 saniye
- İkinci hata: 2 saniye
- Üçüncü hata: 4 saniye
- Dördüncü hata: 8 saniye
- Beşinci hata: 16 saniye
Bekleme süresine küçük rastgele değer eklemek, çok sayıda istemcinin aynı anda tekrar istek göndermesini önleyebilir.
400, 401 ve kalıcı 403 hatalarında ise sürekli tekrar denemek yerine yapılandırma düzeltilmelidir.
Yapılandırılmış Veri Kontrolü
API gönderiminden önce sayfada desteklenen yapılandırılmış verinin bulunduğu doğrulanmalıdır.
İş ilanı sayfasında temel olarak:
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Yazılım Uzmanı",
"description": "İş ilanı açıklaması",
"datePosted": "2026-08-05",
"validThrough": "2026-09-05T23:59:59+03:00",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Örnek Şirket"
}
}
gibi bir yapı bulunabilir.
Bu yalnızca basitleştirilmiş bir örnektir. İş ilanının geçerli olabilmesi için gerekli ve önerilen alanların proje kapsamında ayrıca kontrol edilmesi gerekir.
API bildirimi, hatalı yapılandırılmış veriyi düzeltmez.
İş İlanı Kaldırılırken Ne Yapılmalıdır?
Süresi dolan iş ilanında yalnızca URL_DELETED göndermek yeterli değildir.
Uygulanabilecek yöntemler:
Sayfayı 404 veya 410 yapmak
İlanın kalıcı olarak kaldırıldığı durumlarda kullanılabilir.
Sayfaya noindex eklemek
Sayfa kullanıcılar için açık kalacak ancak arama sonuçlarında gösterilmeyecekse uygulanabilir.
İlanı güncellemek
İlan hâlâ geçerliyse validThrough ve diğer bilgiler güncellenebilir.
Yeni ilana yönlendirmek
Yalnızca gerçekten aynı veya güçlü şekilde karşılık gelen yeni bir ilan varsa yönlendirme yapılmalıdır.
Bütün eski iş ilanlarını alakasız bir kategori veya ana sayfaya yönlendirmek soft 404 sorununa neden olabilir.
API İsteği Göndermeden Önce URL Kontrolü
Her URL için şu kontroller yapılmalıdır:
- Sayfa HTTPS üzerinden açılıyor mu?
- HTTP durum kodu doğru mu?
- Googlebot erişebiliyor mu?
- Robots.txt engeli var mı?
- Noindex etiketi bulunuyor mu?
- Canonical adres doğru mu?
- Sayfa desteklenen yapılandırılmış veriyi içeriyor mu?
- Yapılandırılmış veride hata var mı?
- İçerik gerçekten yeni veya değişmiş mi?
- URL Search Console mülkü kapsamında mı?
- URL site haritasında bulunuyor mu?
- Dahili bağlantılarla erişilebiliyor mu?
Sayfanın site içerisindeki keşfedilebilirliğini artırmak için site içi SEO optimizasyonu uygulanmalıdır.
Indexing API SEO’yu Geliştirir mi?
Indexing API doğrudan bir sıralama artırma aracı değildir.
API:
- Daha fazla backlink oluşturmaz.
- İçerik kalitesini artırmaz.
- Site otoritesi sağlamaz.
- Arama niyetini karşılamaz.
- Sayfa hızını geliştirmez.
- Teknik hataları otomatik çözmez.
- Sıralama garantisi vermez.
Desteklenen kısa ömürlü içeriklerde değişikliklerin Google’a daha hızlı bildirilmesine yardımcı olur.
SEO performansı için ayrıca:
- Anahtar kelime analizi
- Arama niyeti
- Özgün içerik
- Site mimarisi
- Dahili bağlantılar
- Sayfa performansı
- Mobil uyumluluk
- Backlink profili
- Teknik tarama
- Kullanıcı deneyimi
değerlendirilmelidir.
Sitenin genel durumunu incelemek için SEO analizi nasıl yapılır rehberinden yararlanılabilir.
API Kullanımında Güvenlik Önlemleri
JSON anahtarını herkese açık tutmayın
Anahtar dosyasına erişen kişi servis hesabı adına istek gönderebilir.
Anahtarı Git deposuna eklemeyin
Depo özel olsa bile anahtar dosyasının sürüm geçmişinde kalması risk oluşturur.
Dosya izinlerini sınırlandırın
Yalnızca uygulamanın çalıştığı kullanıcı dosyayı okuyabilmelidir.
Gereksiz anahtarları silin
Aynı servis hesabı için çok sayıda aktif anahtar bulundurmayın.
Anahtar rotasyonu uygulayın
Belirli aralıklarla yeni anahtar oluşturulabilir ve eski anahtar iptal edilebilir.
Hata kayıtlarında anahtarı göstermeyin
Private key, JWT assertion veya access token hata günlüklerine yazılmamalıdır.
Test ve canlı projeleri ayırın
Test kodunun canlı Search Console mülklerine yanlışlıkla bildirim göndermesi önlenmelidir.
WordPress kullanıcı yetkilerini kontrol edin
API ayarlarını yalnızca yetkili yöneticiler değiştirebilmelidir.
Google Indexing API Kullanımında Yapılan Hatalar
| Hata | Olası sonucu | Doğru yaklaşım |
|---|---|---|
| Bütün site URL’lerini göndermek | Kural ihlali ve kota kaybı | Yalnızca desteklenen sayfaları göndermek |
| API’yi indeks garantisi sanmak | Yanlış performans beklentisi | Bildirim sistemi olarak değerlendirmek |
| Servis hesabını kullanıcı olarak eklemek | 403 yetki hatası | Search Console’da sahip yetkisi vermek |
| JSON dosyasını public klasöre yüklemek | Anahtarın ele geçirilmesi | Web kökü dışında saklamak |
| Değişmeyen URL’leri sürekli göndermek | Kota israfı | Yalnızca gerçek değişiklikte bildirmek |
| Birden fazla hesapla kota aşmak | Erişimin iptal edilmesi | Resmî kota sürecini kullanmak |
| Silinmeyen sayfaya URL_DELETED göndermek | Kaldırma sürecinin başarısız olması | Önce 404, 410 veya noindex uygulamak |
| Metadata sonucunu indeks durumu sanmak | Yanlış raporlama | Search Console ile ayrıca kontrol etmek |
| Site haritasını kaldırmak | Genel URL keşfinin zayıflaması | Sitemap kullanmaya devam etmek |
| Yapılandırılmış veriyi kontrol etmemek | Desteklenen özellikten yararlanamamak | Schema doğrulaması yapmak |
| Canlı sitede test yapmak | Yanlış URL bildirimleri | Test ortamı ve sınırlı URL kullanmak |
| Hata kayıtlarını izlememek | Sorunların fark edilmemesi | Log ve kota takibi kurmak |
Google Indexing API Kontrol Listesi
Kurulum tamamlanmadan önce aşağıdaki maddeler kontrol edilmelidir:
- Sayfalar JobPosting veya BroadcastEvent kapsamında mı?
- Yapılandırılmış veri geçerli mi?
- Google Cloud projesi oluşturuldu mu?
- Indexing API etkinleştirildi mi?
- Servis hesabı oluşturuldu mu?
- JSON anahtarı indirildi mi?
- Anahtar web kökü dışında saklanıyor mu?
- Anahtar Git deposundan çıkarıldı mı?
- Site Search Console’da doğrulandı mı?
- Servis hesabı Search Console’a sahip olarak eklendi mi?
- Doğru protokol ve alan adı kullanılıyor mu?
- OAuth kapsamı doğru mu?
- Sunucu saati doğru mu?
- Test URL’si yayınlandı mı?
- URL Googlebot tarafından erişilebilir mi?
- Canonical adres doğru mu?
- Robots.txt engeli bulunuyor mu?
- URL_UPDATED testi başarılı mı?
- Metadata sorgusu çalışıyor mu?
- URL_DELETED akışı test edildi mi?
- Kota kullanımı takip ediliyor mu?
- Tekrarlanan bildirimler engellendi mi?
- Hata günlükleri oluşturuldu mu?
- Sitemap kullanılmaya devam ediyor mu?
- Search Console indeks raporları izleniyor mu?
Google Indexing API Hakkında Sıkça Sorulan Sorular
Google Indexing API ücretsiz mi?
API kullanımı ücretsizdir. Ancak sunucu, yazılım geliştirme, bakım ve entegrasyon maliyetleri oluşabilir.
Indexing API her web sitesinde kullanılabilir mi?
API yalnızca geçerli iş ilanı ve canlı yayın sayfalarında kullanılmalıdır. Normal blog, ürün ve hizmet sayfaları desteklenen kullanım kapsamında değildir.
Indexing API URL’yi hemen dizine ekler mi?
Hayır. API yalnızca Google’a bildirim gönderir. Tarama ve dizine ekleme kararı Google’a aittir.
HTTP 200 yanıtı ne anlama gelir?
Google’ın API bildirimini başarıyla aldığını gösterir. Sayfanın kesin olarak dizine eklendiğini göstermez.
URL_UPDATED ne zaman kullanılmalıdır?
Yeni desteklenen sayfa yayınlandığında veya mevcut sayfanın içeriğinde önemli bir değişiklik yapıldığında kullanılmalıdır.
URL_DELETED ne zaman kullanılmalıdır?
Sayfa kaldırılıp 404 veya 410 döndürdüğünde ya da noindex etiketi uygulandığında kullanılmalıdır.
Metadata sorgusu indeks durumunu gösterir mi?
Hayır. Yalnızca Google’ın URL için aldığı en son güncelleme veya silme bildirimlerini gösterir.
Günlük Indexing API kotası ne kadardır?
Başlangıç ve test sürecinde varsayılan yayın kotası proje başına günlük 200 istektir. Projenin Google Cloud kota ekranı ayrıca kontrol edilmelidir.
Batch isteğinde kaç URL gönderilebilir?
Tek bir batch isteğinde en fazla 100 API çağrısı birleştirilebilir. Her URL kotadan ayrı istek olarak düşer.
Kota gece yarısı Türkiye saatine göre mi yenilenir?
Kota yenilenmesi Pasifik saatine göre gerçekleşir. Türkiye saatine göre her gün aynı gece yarısı anına denk gelmeyebilir.
Birden fazla servis hesabıyla kota artırılabilir mi?
Kota sınırlarını aşmak amacıyla birden fazla hesap veya proje kullanılması uygun değildir ve erişim kısıtlamasına neden olabilir.
WordPress için hazır eklenti kullanılabilir mi?
Kullanılabilir. Ancak eklentinin yalnızca desteklenen sayfa türlerini gönderdiğinden, servis hesabı anahtarını güvenli sakladığından ve kota sınırlarını aşmadığından emin olunmalıdır.
WordPress blog yazıları API’ye gönderilebilir mi?
Google’ın desteklediği kullanım kapsamına göre normal blog içerikleri için Indexing API kullanılmamalıdır.
Python mu WordPress eklentisi mi daha iyi?
Toplu işlemler ve merkezi otomasyon için Python daha esnektir. Yayın anında otomatik bildirim için WordPress eklentisi daha pratik olabilir. Büyük sistemlerde WordPress’in bir kuyruk veya Python servisine bildirim göndermesi tercih edilebilir.
Servis hesabı neden Search Console’a eklenir?
Servis hesabının bildirim gönderilen site üzerinde yetkili olduğunu doğrulamak için eklenir.
URL Search Console’da dizinde görünmüyorsa ne yapılmalıdır?
URL Denetleme aracıyla:
- Tarama durumu
- Noindex
- Robots.txt
- Canonical
- Sunucu yanıtı
- Google tarafından seçilen canonical
- Son tarama tarihi
kontrol edilmelidir.
API kullanırken sitemap gerekli mi?
Evet. Indexing API desteklenen kısa ömürlü sayfalardaki bildirimleri kolaylaştırır. Site genelindeki URL keşfi için XML site haritası kullanılmaya devam edilmelidir.
Profesyonel Indexing API Entegrasyonu Neden Önemlidir?
Yanlış yapılandırılan bir sistem:
- Desteklenmeyen URL’leri gönderebilir.
- Günlük kotayı kısa sürede tüketebilir.
- Aynı URL’yi tekrar tekrar gönderebilir.
- Gizli servis hesabı anahtarını açığa çıkarabilir.
- Silinmeyen sayfalar için kaldırma bildirimi gönderebilir.
- Hataları kayıt altına almayabilir.
- Search Console mülklerini karıştırabilir.
- Yayınlama sürecini yavaşlatabilir.
Profesyonel entegrasyonda:
- Desteklenen içerik türleri filtrelenir.
- Bildirimler kuyruğa alınır.
- Tekrarlanan istekler engellenir.
- Kota kullanımı kaydedilir.
- Geçici hatalar yeniden denenir.
- Kalıcı hatalar yöneticilere bildirilir.
- Anahtarlar güvenli saklanır.
- Yapılandırılmış veri doğrulanır.
- Search Console verileri ayrıca takip edilir.
API entegrasyonu, kapsamlı teknik SEO stratejisinin küçük bir bölümüdür. Site kalitesi, taranabilirlik ve içerik değeri göz ardı edilmemelidir.
Google Indexing API, desteklenen iş ilanı ve canlı yayın sayfalarındaki ekleme, güncelleme ve kaldırma işlemlerini Google’a bildirmek için kullanılan bir API hizmetidir.
Kurulum için:
- Google Cloud projesi oluşturulmalı,
- Indexing API etkinleştirilmeli,
- Servis hesabı hazırlanmalı,
- JSON anahtar dosyası güvenli saklanmalı,
- Servis hesabı Search Console mülküne sahip olarak eklenmeli,
- OAuth 2.0 yetkilendirmesi uygulanmalı,
- Python veya WordPress üzerinden bildirim gönderilmelidir.
Yeni veya güncellenmiş sayfalarda URL_UPDATED, kaldırılan sayfalarda ise gerekli HTTP veya noindex işlemi tamamlandıktan sonra URL_DELETED kullanılmalıdır.
Başarılı API yanıtı dizine ekleme garantisi vermez. URL’nin Google tarafından dizine eklenebilmesi için teknik olarak erişilebilir, kaliteli, canonical açısından tutarlı ve geçerli yapılandırılmış veriye sahip olması gerekir.
Normal blog, ürün, kategori ve hizmet sayfalarında Indexing API yerine site haritaları, Search Console, taranabilir dahili bağlantılar ve doğru teknik SEO uygulamaları kullanılmalıdır.
Doğru kapsamda ve güvenli biçimde kurulan Google Indexing API entegrasyonu, özellikle çok sayıda kısa süreli iş ilanı veya canlı yayın sayfası yöneten platformlarda güncellemelerin Google’a sistemli biçimde bildirilmesine yardımcı olabilir.