Felo API PlatformFelo API Platform

Výzkum

Proměňte vyhledávací dotaz v SEO obsahový brief

Podívejte se, které stránky dnes odpovídají, přečtěte je jako Markdown, zmapujte pokryté a chybějící otázky a napište brief, ze kterého autor udělá osnovu.

Čas25 minutÚroveňStředníAktualizováno2026-10-30
Pro kohoContent marketingSEO specialistéEditoři

Zkopírovat prompt

Nahraďte pole v hranatých závorkách a vložte do Claude Code, Codex nebo AI s přístupem k terminálu. Nainstaluje skill Felo, zeptá se před utracením kreditů a spustí workflow.

Napiš SEO obsahový briefing pro dotaz [cílový dotaz] pro [produkt nebo web].

Publikum: [čtenář]. Trh a jazyk: [region], [jazyk]. Úhel: [průvodce / srovnání / produktová stránka]. Rozhodnutí, které podporuje: [nový článek / obnovení / doplnění mezery].

Než uděláš osnovu, přečti si, co dnes na tento dotaz odpovídá. Vytvoř Markdown briefing s:
1. Cílovým dotazem a záměrem, který odvozuješ, s důkazy tohoto čtení.
2. Tím, co současné stránky pokrývají: titul, URL a úvodní sekce.
3. Otázkami, na které současné stránky odpovídají, a těmi, které vynechávají.
4. Navrženou osnovou s jedním řádkem na sekci o tom, co má dokázat.
5. Důkazy a příklady ze zdrojů s odkazy.
6. Úplným seznamem zdrojů.

Pravidla:
- Netvrď objem vyhledávání, obtížnost klíčového slova, pozici ani návštěvnost. Tento workflow je neměří; piš „Zde neměřeno“ místo čísla.
- Nevymýšlej statistiky, citace ani tvrzení o obsahu konkurence.
- Záměr popisuj jako čtení stránek, ne jako změřený fakt.
- Citace krátké, s uvedením zdroje a odkazem.
- Přveď region a jazyk na konkrétní hodnoty.
- Než utratíš kredity, ukaž plánovaná volání API a počkej na mé schválení.
- Nic nezveřejňuj, neplánuj a nic neposílej.
- Výsledek zapiš do ./seo-brief.md a shrň ho v chatu.

Kopie obsahuje i instalační kroky a bezpečnostní pravidla.

Co dostanete

Ukázkový výstup jednoho běhu. Ne živé generování.

Ukázkový briefing (výňatek)

SEO briefing — „jak automatizovat triage podpory”

Cílový dotaz a záměr

Dotaz: „jak automatizovat triage podpory”. Vrácené stránky začínají kroky implementace, ne produktovými stránkami, takže záměr se čte jako how-to. To je čtení stránek, ne měřený štítek záměru.

Co aktuální stránky pokrývají

StránkaURLZačíná
Automatizace triage podpory: praktický průvodcehttps://example.com/guideRoutingová pravidla, pak tagy
Checklist automatizace triagehttps://example.com/checklistSamotný checklist

Otázky, na které stránky odpovídají

  • Co automatizace triage mění
  • Kterými routingovými pravidly začít

Otázky, které vynechávají

  • Jak měřit, zda se triage opravdu zlepšil
  • Co dělat, když klasifikátor chybuje

Navržená osnova

  1. Co automatizace triage mění — doložit, že jde o frontu, ne o počet lidí.
  2. První tři routingová pravidla — doložit každé příkladem.
  3. Jak to měřit první měsíc — doložit metrikou, kterou vedoucí ops vytáhne.
  4. Když automatizace chybuje — doložit lidskou záložní cestu.

Důkazy

  • Příklad routingového pravidla, citováno z https://example.com/guide (zkontrolováno 2026-10-30)

Zde neměřeno

Objem vyhledávání, obtížnost klíčového slova a pozice. Tento workflow čte veřejné stránky; neptá se indexu vyhledávání ani trackeru pozic.

Zdroje

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

Přesná volání

Pro vývojáře: stejný workflow jako kód, v pořadí provádění.

Zobrazit skutečná API volání
  1. Podívejte se, kdo dnes odpovídá

    Zeptejte se Chat na dotaz a vezměte odpověď i citované stránky. Ty stránky jsou současný konkurenční obsah.

    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 }));

    Ukázkový výstup

    {
      "answer": "Readers searching this usually want a step-by-step …",
      "sources": [
        { "link": "https://example.com/guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Přečtěte stránky jako Markdown

    Stáhněte tři až pět nejsilnějších stránek přes Web Fetch jako Markdown a držte nadpisy a otázky.

    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 };
      }),
    );

    Ukázkový výstup

    {
      "url": "https://example.com/guide",
      "checkedAt": "2026-10-30",
      "content": "# Automating support triage\n\n## Routing rules\n…"
    }
  3. Zmapujte pokrytí a mezery

    Extrahujte H2/H3 a FAQ otázky každé stránky a udělejte tabulku: které otázky jsou zodpovězené a které ne.

    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]);
    }

    Ukázkový výstup

    // questions
    [
      { "page": "…", "heading": "What routes should you automate first?" }
    ]
  4. Napište brief

    Popište dotaz, záměr, srovnání pokrytí, chybějící otázky, navrženou osnovu a seznam zdrojů.

    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);

    Ukázkový výstup

    # SEO brief — "how to automate support triage"
  5. Uložte do LiveDoc

    Uložte brief a odkazy stránek do LiveDoc, aby další aktualizace stahovala jen změny.

    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

    Ukázkový výstup

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Co obsahuje

  • Seznam stránek se zdroji z Chat a odkazy na odpověď
  • Současné špičkové stránky jako Markdown
  • Nadpisy a otázky, které pokrývají
  • Brief, ze kterého hned vznikne osnova
  • LiveDoc se zdroji pro další aktualizaci

Co nedělá

  • Neměří pozice, objem, obtížnost ani návštěvnost
  • Jen veřejné stránky; přihlášení a paywall mohou selhat
  • Nepublikuje ani nepřepisuje celý článek
  • Jeden běh na dotaz; více dotazů chce vaši smyčku
  • Negarantuje pozice

Otázky

Měří objem nebo pozice?

Ne. Čte veřejné stránky a hodnotí, který obsah dnes odpovídá; pozice a objem jsou ve vašich SEO nástrojích.

Odkud data?

Chat vrací stránky se zdroji a Web Fetch je mění na Markdown. Každé hodnocení ukazuje konkrétní stránku a datum.

Zvládne více dotazů?

Ano, ale jeden po druhém. Opakujte kroky pro každý dotaz a ukládejte samostatné briefy.

Pro které dotazy?

Informační, srovnávací a „jak na to“, protože veřejné stránky dávají dost signálu. Transakční chtějí vaše produktová a konverzní data.

Píše článek?

Ne. Dává brief a osnovu; psaní patří editorovi nebo vašemu psacímu agentovi.

Kolik stojí jeden běh?

Chat a extrakce spotřebují kredity podle užití; aktuální sazby na stránce cen. Prompt žádá schválení před útratou.

Související workflowy

Přizpůsobte

Stejný recept, upravený podle toho, jak skutečně dodáváte.

Jen srovnávací dotazy

Omezte na „X vs Y“ a „nejlepší X“, aby byl lépe vidět úhel odlišení.

Přidejte svou produktovou stránku

Přidejte produktovou stránku jako další zdroj, aby osnova přistála na vašich funkcích a cenách.

Obnovujte každé čtvrtletí

Spusťte znovu ve stejném LiveDoc a sledujte, jak se mění stránky konkurentů a osnova.

Referenční stránky za tímto receptem a další kroky.