Site API teknik referansı (seoasist-site-api/1)
SEOAsist Site API spesifikasyonunun tamamı: kimlik doğrulama ve HMAC imzası, dört uç nokta, kural türleri ve hazır Next.js/PHP örneklerinin özeti.
Bu ekranı panelde açBu sayfa, sitenin uygulaması gereken SEOAsist Site API sözleşmesini (spec seoasist-site-api/1) anlatır. Paneldeki Geliştirici kılavuzu → Spesifikasyon sekmesi ve Kurulum promptu aynı sözleşmeyi içerir. Bağlantı adımları için SEOAsist Site API ile özel yazılım siteni bağlama makalesine bak.
Genel kurallar
- Tüm uç noktalar tek bir taban yol altındadır, ör.
https://example.com/api/seoasist. - Her yanıt JSON olmalıdır. JSON olmayan yanıt hata sayılır.
- Yönlendirme (30x) yapma. SEOAsist yönlendirmeleri izlemez; panelde son API adresini kaydet.
- Hata durumunda 4xx/5xx ile
{"error":"<kısa mesaj>"}dön. Bu mesaj panelde gösterilir. - Girdiyi doğrula, gövde boyutunu sınırla (~2 MB) ve çağrıları logla.
- SEOAsist her isteği 25 saniye sonra zaman aşımına uğratır. İstekler
SEOAsist-SiteAPI/1.0 (+https://seoasist.com)user-agent'ıyla gelir. - Adres internetten erişilebilir olmalıdır; localhost ve özel ağ adreslerine istek atılmaz.
Kimlik doğrulama
Her istekte üç başlık gelir:
| Başlık | Değer |
|---|---|
Authorization | Bearer <SEOASIST_SITE_TOKEN> |
X-SEOAsist-Timestamp | Unix zaman damgası (saniye) |
X-SEOAsist-Signature | sha256=<hex>; hex = HMAC-SHA256(anahtar = token, mesaj = <timestamp>.<ham gövde>) |
- Token'ı
SEOASIST_SITE_TOKENortam değişkeninde sakla, koda yazma. Panelde Bağla ile üretilir vesa_ile başlar. - Token'ı ve imzayı sabit zamanlı (constant-time) karşılaştır.
- GET isteklerinde ham gövde boş dizedir; imzalanan mesaj
<timestamp>.olur. - İmza yanlışsa veya zaman damgası 300 saniyeden eskiyse
401 {"error":"unauthorized"}dön.
const expected = "sha256=" + createHmac("sha256", token).update(`${ts}.${body}`).digest("hex");
GET /manifest
Bağlantı testi bu uç noktayı çağırır. Yalnızca uyguladığın yetenekleri listele.
{"spec":"seoasist-site-api/1","platform":"nextjs","name":"Sitem","capabilities":["rules","content","files"]}
spec değeri seoasist-site-api/ ile başlamalıdır. Tanınan yetenekler rules, content ve files; diğerleri yok sayılır. Panelde sırasıyla SEO kuralları, İçerik yayını ve llms.txt / robots olarak görünürler.
PUT /rules (yetenek: rules)
Gövde: {"rules": Rule[]}. Bu, güncel kural setinin tamamıdır; daha önce saklananların hepsini değiştir. Boş dizi tüm kuralları temizler. Kuralları kalıcı sakla (DB tablosu veya JSON dosyası) ve sayfa render edilirken sunucu tarafında uygula. Tarayıcılar sonucu istemci JavaScript'inde değil, HTML'de görmelidir.
type Rule = { id: string; kind: string; matchType: "exact" | "prefix" | "regex" | "all"; matchPath: string; payload: object };
Eşleme, sondaki eğik çizgi atılmış istek yoluyla yapılır (ana sayfa için /):
exact: yol birebir eşitprefix: yolmatchPathile başlıyorregex: JavaScript RegExp testiall: her sayfa
Aynı türden birden çok kural eşleşirse en özel olan kazanır: exact > prefix > regex > all.
| kind | payload | Nasıl uygulanır |
|---|---|---|
title | {"value"} | <title> |
meta_description | {"value"} | <meta name="description"> |
canonical | {"href"} | <link rel="canonical"> (mutlak URL) |
robots | {"content"} | <meta name="robots"> (ör. index,follow, noindex,follow) |
h1 | {"value","selector"?} | Sayfanın ana H1 metnini değiştir |
og | {"title"?,"description"?,"image"?,"type"?} | og:* meta etiketleri |
json_ld | {"json"} | <script type="application/ld+json"> (json nesne veya dizi) |
hreflang | {"items":[{"lang","href"}]} | <link rel="alternate" hreflang> |
redirect | {"to","status"?} | Render'dan önce HTTP yönlendirme (varsayılan 301) |
img_alt | {"items":[{"match","alt"}]} | src değeri match içeren <img> etiketlerine alt ekle |
lang | {"value"} | <html lang> |
Bilinmeyen türleri sakla ve yok say. Yanıt: {"ok":true,"count":<saklanan sayı>}.
SEOAsist sitenin etkin kurallarının tamamını gönderir: Pixel sekmesinde eklenenler, uygulanan meta önerileri, çalışma alanı görevlerinin oluşturdukları ve Teknik Denetim'deki Otomatik düzelt ile üretilenler.
POST /content (yetenek: content)
Gövde:
{"externalId":null,"type":"post","title":"…","slug":"…","html":"<h2>…</h2>","excerpt":"…","metaTitle":"…","metaDescription":"…","status":"draft","featuredImageUrl":"https://…","tags":["…"],"updateUrl":null}
externalIddoluysa o öğeyi güncelle.updateUrldoluysa (type: "page") o adresteki mevcut sayfanın ana içeriğini, başlığını ve meta bilgisini güncelle.- Aksi halde sitenin mevcut içerik sistemiyle (DB/CMS/MDX) ve normal URL kalıbıyla yeni bir yazı oluştur.
status: "draft"herkese açık görünmemelidir.htmlgüvenilir, biçimlendirilmiş makale HTML'idir (başlıklar, listeler, tablolar, SSS). Sitenin tasarımını koru.tagsen fazla 5 etiket içerir.
Yanıt: {"id":"<kalıcı id>","url":"<mutlak genel URL>","status":"draft"|"publish"}. SEOAsist id değerini saklar ve aynı öğeyi tekrar gönderirken externalId olarak kullanır.
PUT /files (yetenek: files)
Gövde: {"path":"llms.txt"|"robots-ai.txt","content":string}
llms.txt:/llms.txtadresindentext/plainolarak sun (öncekinin yerine).robots-ai.txt: AI tarayıcı kuralları bloğudur./robots.txtdosyasını sitenin kendi kuralları + sonuna eklenmiş bu blokla sun (önceki bloğun yerine).
Yanıt: {"ok":true,"url":"<genel url>"}.
Hazır örnekler
Geliştirici kılavuzu penceresinde kopyalanabilir kodlar var:
| Sekme | İçerik |
|---|---|
| Next.js | lib/seoasist.ts (JSON dosyasında saklama ve en özel kuralı seçen seoRules(pathname)), app/api/seoasist/[...path]/route.ts (dört uç nokta ve HMAC doğrulaması), kuralları generateMetadata içinde uygulayan ve /llms.txt sunan kullanım örneği. |
| PHP | seoasist-api.php: .htaccess ile /api/seoasist/* yönlendirmesi, data/seoasist.json deposu, hash_hmac ile imza kontrolü. |
| Test | /manifest için imzalı curl komutu. |
Örneklerdeki /content uç noktası bir şablondur (TODO); yazıyı kendi blog/CMS yapına kaydedip gerçek URL'yi döndürmen gerekir.
Test komutu:
TOKEN="<SEOASIST_SITE_TOKEN>"
TS=$(date +%s)
SIG=$(printf "%s." "$TS" | openssl dgst -sha256 -hmac "$TOKEN" | sed 's/^.* //')
curl -s "https://example.com/api/seoasist/manifest" \
-H "Authorization: Bearer $TOKEN" \
-H "X-SEOAsist-Timestamp: $TS" \
-H "X-SEOAsist-Signature: sha256=$SIG"
Apache, Authorization başlığını PHP'ye iletmeyebilir. Bu durumda .htaccess dosyasına SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 satırını ekle.
Panelde görünen hata mesajları
| Mesaj | Anlamı |
|---|---|
token rejected | Site 401/403 döndü ve gövdede error alanı yok. |
endpoint not found (is the Site API installed at this URL?) | 404; adres yanlış veya API kurulmamış. |
redirect to … (use the final API URL) | Site bir yönlendirme döndü. |
non-JSON response | Yanıt JSON değil. |
timeout / unreachable: … | 25 saniyede yanıt gelmedi veya bağlantı kurulamadı. |
unexpected manifest (spec "…") | /manifest geçerli bir spec döndürmedi. |
Site gövdede {"error":"…"} döndürürse panelde doğrudan o mesaj görünür. Çözüm adımları: Site API bağlantı sorunları.
İlgili yazılar
- SEOAsist Site API ile özel yazılım siteni bağlamaWordPress veya Shopify kullanmayan siteler için: Site API'yi kurup bağla, SEO düzeltmeleri, blog yazıları ve llms.txt sitene otomatik ve sunucu tarafında uygulansın.
- Site API bağlantı testi başarısız“Test başarısız” hatasında token, imza, yanlış adres, yönlendirme, zaman aşımı ve Apache'nin Authorization başlığını silmesi gibi nedenleri bul ve düzelt.
- REST API v1: anahtar oluşturma, kimlik doğrulama ve uç noktalarAPI anahtarı oluşturma, Authorization başlığı, temel URL, tüm v1 uç noktaları ile parametreleri, yanıt zarfı ve hata kodları.