Felo API PlatformFelo API Platform

Araştırma

Bir arama sorgusunu SEO içerik brifine dönüştürün

Bugün hangi sayfaların yanıt verdiğine bakın, onları Markdown olarak okuyun, kapsanan ve atlanan soruları haritalayın ve yazarın taslak çıkarabileceği bir brif yazın.

Süre25 dakikaSeviyeOrtaGüncellendi2026-10-30
Kimler içinİçerik pazarlamaSEO uzmanlarıEditörler

İstemi kopyalayın

Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.

[Ürün veya site] için [hedef sorgu] sorgusuna SEO içerik özeti yaz.

Hedef kitle: [okuyucu]. Pazar ve dil: [bölge], [dil]. Açı: [rehber / karşılaştırma / ürün sayfası]. Desteklediği karar: [yeni makale / yenileme / boşluk doldurma].

Ana hat çıkarmadan önce bu sorguya bugün neyin yanıt verdiğini oku. Markdown özeti şunları içersin:
1. Hedef sorgu ve çıkardığın arama niyeti, bu okumanın kanıtıyla.
2. Mevcut sayfaların kapsadıkları: başlık, URL ve açılış bölümleri.
3. Mevcut sayfaların yanıtladığı ve kaçırdığı sorular.
4. Her bölümün neyi kanıtlaması gerektiğini tek satırda söyleyen önerilen ana hat.
5. Kaynaklardan kanıt ve örnekler, bağlantılarla.
6. Tam kaynak listesi.

Kurallar:
- Arama hacmi, anahtar kelime zorluğu, sıralama veya trafik iddia etme. Bu workflow bunları ölçmez; sayı yerine “Burada ölçülmedi” yaz.
- İstatistik, alıntı veya rakiplerin içeriği hakkında iddia uydurma.
- Niyeti sayfaların okunması olarak anlat, ölçülmüş gerçek olarak değil.
- Alıntıları kısa tut, kaynak göster ve bağlantı ver.
- Bölgeyi ve dili açık değerlere çevir.
- Kredi harcamadan önce planlanan API çağrılarını göster ve onayımı bekle.
- Hiçbir şey yayımlama, planlama ve gönderme.
- Sonucu ./seo-brief.md dosyasına yaz ve sohbette özetle.

Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.

Ne elde edersiniz

Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.

Örnek brief (alıntı)

SEO brief — “destek triyajı nasıl otomatikleştirilir”

Hedef sorgu ve niyet

Sorgu: “destek triyajı nasıl otomatikleştirilir”. Dönen sayfalar ürün sayfaları değil, uygulama adımlarıyla başlıyor; niyet how-to olarak okunuyor. Bu sayfaların okunması, ölçülmüş niyet etiketi değil.

Mevcut sayfalar neyi kapsıyor

SayfaURLBaşlangıcı
Destek triyajını otomatikleştirme: pratik rehberhttps://example.com/guideYönlendirme kuralları, sonra etiketler
Triyaj otomasyonu kontrol listesihttps://example.com/checklistKontrol listesinin kendisi

Sayfaların yanıtladığı sorular

  • Triyaj otomasyonu neyi değiştirir
  • Hangi yönlendirme kurallarıyla başlanır

Kaçırılan sorular

  • Triyajın gerçekten iyileşip iyileşmediği nasıl ölçülür
  • Sınıflandırıcı yanlış yaptığında ne yapılır

Önerilen yapı

  1. Triyaj otomasyonu neyi değiştirir — bunun kadro değil kuyruk meselesi olduğunu kanıtla.
  2. Otomatikleştirmeye değer ilk üç yönlendirme kuralı — her birini örnekle kanıtla.
  3. İlk ayda nasıl ölçülür — bir ops liderinin çekebileceği metrikle kanıtla.
  4. Otomasyon yanlış yaptığında — insan yedek yolunu kanıtla.

Kanıt

  • Yönlendirme kuralı örneği, https://example.com/guide’dan alıntı (2026-10-30 kontrol edildi)

Burada ölçülmedi

Arama hacmi, anahtar kelime zorluğu ve sıralama. Bu akış kamuya açık sayfaları okur; arama indeksine veya sıra takipçisine sormaz.

Kaynaklar

  • https://example.com/guide
  • https://example.com/checklist

Tam çağrılar

Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.

Gerçek API çağrılarını göster
  1. Bugün kimin yanıt verdiğine bakın

    Chat’e sorguyu sorun ve yanıt ile alıntılanan sayfaları alın. O sayfalar mevcut rakip içeriktir.

    seo-brief.ts
    const BASE = "https://openapi.felo.ai";
    const headers = {
      Authorization: `Bearer ${process.env.FELO_API_KEY}`,
      "Content-Type": "application/json",
    };
    
    async function felo<T>(path: string, body?: unknown): Promise<T> {
      const res = await fetch(`${BASE}${path}`, {
        method: body ? "POST" : "GET",
        headers,
        body: body ? JSON.stringify(body) : undefined,
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<T>;
    }
    
    type ChatData = {
      data: {
        answer: string;
        resources: { link: string; title: string; snippet: string }[];
      };
    };
    
    const query = "how to automate support triage";
    const ourSite = "example.com";
    
    const coverage = await felo<ChatData>("/v2/chat", {
      query: `What pages currently answer the search query "${query}"? List the pages and what each one covers.`,
    });
    
    const candidates = coverage.data.resources
      .filter((resource) => !resource.link.includes(ourSite))
      .slice(0, 5)
      .map((resource) => ({ url: resource.link, title: resource.title }));

    Örnek çıktı

    {
      "answer": "Readers searching this usually want a step-by-step …",
      "sources": [
        { "link": "https://example.com/guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Sayfaları Markdown olarak okuyun

    En güçlü üç ila beş sayfayı Web Fetch ile Markdown olarak indirin, başlıkları ve soruları koruyun.

    seo-brief.ts
    type ExtractData = { data: { content: string } };
    
    const pages = await Promise.all(
      candidates.map(async (page) => {
        const res = await felo<ExtractData>("/v2/web/extract", {
          url: page.url,
          output_format: "markdown",
          with_readability: true,
          with_cache: true,
        });
        const checkedAt = new Date().toISOString().slice(0, 10);
        return { ...page, checkedAt, content: res.data.content };
      }),
    );

    Örnek çıktı

    {
      "url": "https://example.com/guide",
      "checkedAt": "2026-10-30",
      "content": "# Automating support triage\n\n## Routing rules\n…"
    }
  3. Kapsamı ve boşlukları haritalayın

    Her sayfanın H2/H3 ve SSS sorularını çıkarın ve tablo yapın: hangi sorular yanıtlanmış, hangileri değil.

    seo-brief.ts
    type Heading = { page: string; heading: string };
    
    const headings: Heading[] = pages.flatMap((page) =>
      page.content
        .split("\n")
        .filter((line) => line.startsWith("## "))
        .map((line) => ({
          page: page.title,
          heading: line.replace(/^##\s+/, ""),
        })),
    );
    
    const questions = headings.filter((item) => item.heading.includes("?"));
    
    const byTopic = new Map<string, string[]>();
    for (const item of headings) {
      byTopic.set(item.heading, [...(byTopic.get(item.heading) ?? []), item.page]);
    }

    Örnek çıktı

    // questions
    [
      { "page": "…", "heading": "What routes should you automate first?" }
    ]
  4. Briri yazın

    Sorguyu, niyeti, kapsam karşılaştırmasını, eksik soruları, önerilen taslağı ve kaynak listesini açıklayın.

    seo-brief.ts
    const today = new Date().toISOString().slice(0, 10);
    
    const brief = [
      `# SEO brief — "${query}"`,
      `Checked ${today}. Site: ${ourSite}.`,
      "",
      "## Intent read",
      "The pages returned for this query lead with: " +
        headings.slice(0, 6).map((item) => item.heading).join("; ") +
        ". This is a reading of their structure, not a measured intent label.",
      "",
      "## What the pages cover",
      "| Page | URL | Checked |",
      "| --- | --- | --- |",
      ...pages.map((page) => `| ${page.title} | ${page.url} | ${page.checkedAt} |`),
      "",
      "## Questions the pages answer",
      ...questions.map((item) => `- ${item.heading} (${item.page})`),
      "",
      "## Topics more than one page covers",
      ...[byTopic.entries()]
        .filter(([, pageTitles]) => pageTitles.length > 1)
        .map(([heading, pageTitles]) => `- ${heading} (${pageTitles.length} pages)`),
      "",
      "## Proposed outline",
      ...questions.slice(0, 5).map((item, index) => `${index + 1}. ${item.heading}`),
      "",
      "## Questions they miss",
      "<!-- Only questions none of the fetched pages answer. Delete this comment when filled. -->",
      "",
      "## Not measured here",
      "Search volume, keyword difficulty, and ranking position. This workflow reads public pages; it does not query a search index or a rank tracker.",
      "",
      "## Sources",
      ...pages.map((page) => `- ${page.title}: ${page.url}`),
    ].join("\n");
    
    console.log(brief);

    Örnek çıktı

    # SEO brief — "how to automate support triage"
  5. LiveDoc’a kaydedin

    Briri ve sayfa bağlantılarını LiveDoc’a kaydedin ki sonraki güncelleme yalnızca değişiklikleri indirsin.

    seo-brief.ts
    type LiveDocData = { data: { short_id: string } };
    
    const briefDoc = await felo<LiveDocData>("/v2/livedocs", {
      name: `SEO briefs: ${ourSite}`,
      description: "One document resource per target query",
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.url, title: page.title })),
    });
    
    await felo(`/v2/livedocs/${briefDoc.data.short_id}/resources/doc`, {
      title: `SEO brief — ${query}`,
      content: brief,
    });
    
    console.log(briefDoc.data.short_id); // the next query adds to this archive

    Örnek çıktı

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Neler dahil

  • Chat’ten kaynaklı sayfa listesi ve yanıt bağlantıları
  • Mevcut üst sayfalar Markdown olarak
  • Kapsadıkları başlıklar ve sorular
  • Hemen taslağa dönüşen brif
  • Sonraki güncelleme için LiveDoc’ta kaynaklar

Neleri yapmaz

  • Sıralamaları, arama hacmini, zorluğu veya trafiği ölçmez
  • Yalnızca kamuya açık sayfalar; oturum ve ödeme duvarı başarısız olabilir
  • Makaleyi yayımlamaz veya tamamen yeniden yazmaz
  • Sorgu başına bir çalıştırma; birden çok sorgu sizin döngünüzü gerektirir
  • Sıralama garantisi vermez

Sorular

Hacmi veya sıralamaları ölçer mi?

Hayır. Kamuya açık sayfaları okur ve bugün hangi içeriğin yanıt verdiğini değerlendirir; sıralamalar ve hacim SEO araçlarınızda.

Veriler nereden?

Chat kaynaklı sayfaları döndürür ve Web Fetch onları Markdown yapar. Her değerlendirme belirli bir sayfaya ve tarihe işaret eder.

Birden çok sorguyu işleyebilir mi?

Evet, ancak tek tek. Her sorgu için adımları yineleyin ve ayrı brifler kaydedin.

Hangi sorgular için?

Bilgilendirici, karşılaştırmalı ve “nasıl yapılır”, çünkü kamuya açık sayfalar yeterli sinyal verir. İşlemsel sorgular ürün ve dönüşüm verinizi gerektirir.

Makaleyi yazar mı?

Hayır. Brif ve taslak verir; yazma editörün veya yazma ajanınızın işi.

Bir çalıştırmanın maliyeti nedir?

Chat ve çıkarım kullanıma göre kredi harcar; güncel tarifeler fiyat sayfasında. İstem harcamadan önce onay ister.

İlgili iş akışları

Kendinize uyarlayın

Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.

Yalnızca karşılaştırma sorguları

“X vs Y” ve “en iyi X” ile sınırlayın, farklılaşma açısı daha iyi görünür.

Ürün sayfanızı ekleyin

Ürün sayfasını ek kaynak olarak ekleyin, taslak özelliklerinize ve fiyatlarınıza insin.

Her çeyrekte güncelleyin

Aynı LiveDoc’ta yeniden çalıştırın ve rakip sayfaların, taslağın nasıl değiştiğini görün.

Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.