Geliştirici dokümanları

Entegrasyon

Bir ziyaretçi 404'e düştüğünde no404'e sorarsınız, en uygun URL'yi alırsınız ve oraya yönlendirirsiniz. Bunu üç farklı yoldan yapabilirsiniz — aralarındaki fark ziyaretçinin gördüğü şey değil, arama motorunun gördüğü HTTP durumudur.

Hangi yolu seçmeliyim?

Üçü de ziyaretçiyi doğru sayfaya götürür. Fark sunucunun döndürdüğü HTTP durumundadır ve bu fark SEO'da belirleyicidir: 301 alan bir adres birikmiş değerini yenisine taşır, 404 kalan bir adres taşımaz.

YolHTTP durumuKimin için
WordPress eklentisi301WordPress siteleri. Kod yazmadan, panelden kurulur.
Sunucu tarafı301Kendi kodunu yazan herkes. Hazır bir şartname veriyoruz.
Tarayıcı snippet'i404 kalırSunucuya erişimi olmayan ya da beş dakikada denemek isteyen.
Snippet en kolay yoldur ama tek yapamadığı şey HTTP durumunu değiştirmektir: sayfa ziyaretçi için taşınır, arama motoru için ölü kalır. Sunucunuza erişiminiz varsa ilk iki yoldan birini seçin.

WordPress eklentisiWordPress.org'da yayımlandı

404'ü sunucu tarafında yakalar, no404'e sorar ve gerçek bir 301 döndürür. Tema dosyalarına dokunmaz, kod yazmanızı gerektirmez.

  • WordPress 6.0+ · PHP 7.4+
  • Sonuçları yerel olarak önbelleğe alır — kotanızı ve hız sınırını korur.
  • no404 yanıt vermezse sayfa normal 404'üne düşer (fail-open); eklenti siteyi asla bekletmez.

Kurulum

  1. WordPress yönetiminde Eklentiler → Yeni Ekle bölümünde no404 aratın.
  2. Şimdi Kur deyip etkinleştirin.
  3. Panelden aldığınız API anahtarını eklenti ayarlarına yapıştırın.
Eklenti resmi WordPress dizininde yayımlanmıştır ve açık kaynaktır (kaynak kod). Dizinden kurun: .zip elle yüklenebilir ama o kurulum otomatik güncelleme almaz — güvenlik yaması çıktığında siteniz eski sürümde kalır.

Sunucu tarafı entegrasyon

Kendi kodunuzu yazıyorsanız 404 ürettiğiniz yerde no404'e sorup gerçek bir 301 döndürebilirsiniz. Bunu sıfırdan kurgulamanız gerekmiyor: panel, siteniz için hazır bir entegrasyon şartnamesi üretir.

Şartname bir kod parçası değil, bir mühendislik belgesidir: zaman aşımı, zorunlu önbellek, kara liste, 301/302 kuralı, döngü ve açık yönlendirme koruması dahil. Dosyayı geliştiricinize ya da doğrudan kod yazan bir yapay zekâ ajanına verirsiniz.

Panel → site detay → Entegrasyon sekmesinden indirin. Şartname sitenizin adresine ve ayarlarına göre üretilir; kopyasını buraya koymuyoruz — iki yerde tutulan bir belge er geç ikiye ayrılır.

Önbellek opsiyonel değildir

Sunucudan sunucuya çağrıda tüm trafiğiniz tek bir IP'den sayılır ve hız sınırı (dakikada 120 istek) o IP'ye uygulanır. Yanıtları yerel olarak önbelleğe almazsanız yoğun bir sitede sınıra çarpar ve yönlendirmeler sessizce durur. Şartname bunu zorunlu bir madde olarak içerir.

En yalın hâli (Node.js)

const res = await fetch(
  "https://www.no404.tr/api/v1/resolve/SENIN_API_ANAHTARIN?path=" + encodeURIComponent(path),
  { headers: { Origin: "https://siteniz.com" } }
);
const data = await res.json();

// REDIRECT ya da yüksek skorlu CATALOG → kalıcı (301); gerisi geçici (302).
if (data.redirect) {
  const permanent = data.source === "REDIRECT" || data.score >= 0.5;
  // örn. Express: res.redirect(permanent ? 301 : 302, data.redirect);
}

Tarayıcı snippet'i

Bu yol HTTP durumunu 404 bırakır

Yönlendirme JavaScript ile yapılır; sunucu yine 404 döndürmüş olur. Ziyaretçi doğru sayfaya gider ama arama motoru eski adresi ölü saymaya devam eder ve link değeri aktarılmaz. Sunucunuza erişebiliyorsanız yukarıdaki iki yoldan birini seçin.

Aşağıdaki kodu sitenizin 404 sayfasına ekleyin. SENIN_API_ANAHTARIN yerine panelden aldığınız API anahtarını yazın.

<!-- no404: 404 sayfanıza ekleyin -->
<script>
(function () {
  var p = location.pathname + location.search;
  var ref = document.referrer;
  fetch("https://www.no404.tr/api/v1/resolve/SENIN_API_ANAHTARIN?path=" + encodeURIComponent(p) + "&ref=" + encodeURIComponent(ref))
    .then(function (r) { return r.json(); })
    .then(function (d) { if (d && d.redirect) location.replace(d.redirect); })
    .catch(function () {});
})();
</script>

Next.js (App Router)

app/not-found.tsx içine:

"use client";
import { useEffect } from "react";

export default function NotFound() {
  useEffect(() => {
    const p = location.pathname + location.search;
    fetch(`https://www.no404.tr/api/v1/resolve/SENIN_API_ANAHTARIN?path=${encodeURIComponent(p)}&ref=${encodeURIComponent(document.referrer)}`)
      .then((r) => r.json())
      .then((d) => { if (d.redirect) location.replace(d.redirect); })
      .catch(() => {});
  }, []);
  return <p>Sayfa bulunamadı, yönlendiriliyorsunuz…</p>;
}
API anahtarınızı ve izinli origin'lerinizi panel → site detay sayfasından yönetirsiniz.

Endpoint referansı

Üç yolun da kullandığı tek endpoint; hem GET hem POST destekler.

GETPOST/api/v1/resolve/{apiKey}

Parametreler

apiKeyyol (path)Sitenizin API anahtarı (zorunlu).
pathquery / gövde404 dönen yol, örn. /eksik-sayfa (zorunlu).
refquery / gövdeZiyaretçinin geldiği adres (document.referrer). İsteğe bağlı; boş = doğrudan giriş.

GET örneği

curl "https://www.no404.tr/api/v1/resolve/SENIN_API_ANAHTARIN?path=/14-gram-altin-yuzuk-102" \
  -H "Origin: https://siteniz.com"

POST örneği

curl -X POST "https://www.no404.tr/api/v1/resolve/SENIN_API_ANAHTARIN" \
  -H "Content-Type: application/json" \
  -H "Origin: https://siteniz.com" \
  -d '{"path":"/14-gram-altin-yuzuk-102"}'

Yanıt & durum kodları

Başarılı yanıt JSON döner:

{
  "success": true,
  "found": true,
  "redirect": "https://siteniz.com/14-gram-altin-yuzuk",
  "score": 0.92,
  "source": "CATALOG"
}

Yanıt alanları

foundbooleanKesin eşleşme bulundu mu (yedek yönlendirmede false olabilir).
redirectstring | nullYönlendirilecek tam URL. Dolu ise ziyaretçiyi buraya gönderin (yedek dahil).
scorenumberEşleşme skoru 0-1 arası (1 = manuel yönlendirme).
sourceenumREDIRECT (manuel) · CATALOG (otomatik) · FALLBACK (eşik altı yedek adres) · NONE (yok).

Durum kodları

200Başarılı (found true/false olabilir).
403Origin izinli değil ya da izleme duraklatıldı.
404Geçersiz API anahtarı.
422Geçersiz veya eksik 'path'.
429Rate limit aşıldı (çok fazla istek).

Origin kilidi & güvenlik

API anahtarınız origin kilidi ile korunur. İstekler yalnızca panelde tanımladığınız izinli origin'lerden kabul edilir. Anahtarınız sızsa bile başka bir alan adından gelen tarayıcı isteği 403 ile reddedilir ve CORS yanıtı verilmez.

  • Sitenizi eklediğinizde alan adınız otomatik izinli origin olarak eklenir (www + köksüz).
  • Ek alan adlarını panelden ekleyebilirsiniz.
  • Anahtar sızıntısında panelden anahtarı yenileyin; eski anahtar o an geçersiz olur.
Sunucudan sunucuya çağrıda tarayıcı Origin başlığı göndermez, yani origin kilidi devreye girmez; koruma anahtar + hız sınırıyla sağlanır. Anahtarı sunucu tarafında tutun, istemciye gömmeyin.

En iyi pratikler

  • Sunucu tarafını tercih edin: 301 üreten tek yol odur; snippet SEO değerini taşımaz.
  • Yanıtları önbelleğe alın: sunucu tarafı entegrasyonda bu opsiyonel değildir — tüm trafik tek IP'den sayılır.
  • Sitemap'inizi bağlayın: eşleştirme kalitesi kataloğunuzun güncelliğine bağlıdır.
  • Eşiği gözden geçirin: çok agresif yönlendirme istemiyorsanız eşiği yükseltin (önerilen 0.3).
  • Kritik yollar için manuel yönlendirme tanımlayın; otomatik eşleştirmeyi ezer.
  • Hız sınırı: anahtar + IP başına dakikada 120 istek.

Hazır mısınız?

Sitenizi ekleyin, anahtarınızı alın, dakikalar içinde yayında.

Ücretsiz başla