Felo API PlatformFelo API Platform

Pesquisa

Transforme uma consulta de busca em briefing de conteúdo SEO

Veja quais páginas respondem à consulta hoje, leia-as como Markdown, mapeie as perguntas que respondem e as que ignoram e escreva um briefing do qual o redator possa tirar o esboço.

Tempo25 minutosNívelIntermediárioAtualizado2026-10-30
Para quemMarketing de conteúdoEspecialistas em SEOEditores

Copiar o prompt

Substitua os campos entre colchetes e cole no Claude Code, Codex ou qualquer IA com acesso ao terminal. Ela instala a skill da Felo, pergunta antes de gastar créditos e executa o fluxo.

Escreva um briefing de conteúdo SEO para a consulta [consulta alvo] para [produto ou site].

Público: [leitor]. Mercado e idioma: [região], [idioma]. Ângulo: [guia / comparação / página de produto]. Decisão que ele apoia: [artigo novo / atualização / cobrir lacuna].

Leia o que responde hoje a essa consulta antes de propor o esqueleto. Produza um briefing em Markdown com:
1. A consulta alvo e a intenção que você infere, com a evidência dessa leitura.
2. O que as páginas atuais cobrem: título, URL e seções de abertura.
3. Perguntas que as páginas atuais respondem e perguntas que elas perdem.
4. Um esqueleto proposto com uma linha por seção dizendo o que ela precisa provar.
5. Evidências e exemplos das fontes, com links.
6. Uma lista completa de fontes.

Regras:
- Não afirme volume de busca, dificuldade de palavra-chave, posição ou tráfego. Este fluxo não mede isso; escreva “Não medido aqui” em vez de um número.
- Não invente estatísticas, citações ou afirmações sobre o conteúdo de concorrentes.
- Descreva a intenção como leitura das páginas, não como fato medido.
- Mantenha citações curtas, atribuídas e com link.
- Transforme a região e o idioma em valores explícitos.
- Antes de gastar créditos, mostre as chamadas de API planejadas e aguarde minha aprovação.
- Não publique, agende nem envie nada.
- Grave o resultado em ./seo-brief.md e resuma no chat.

A cópia também inclui os passos de instalação e as regras de segurança.

O que você recebe

Saída de exemplo de uma execução. Não é geração ao vivo.

Exemplo de briefing (trecho)

Briefing de SEO — “como automatizar a triagem de suporte”

Consulta alvo e intenção

Consulta: “como automatizar a triagem de suporte”. As páginas retornadas começam com etapas de implementação, não páginas de produto, então a intenção lê-se como how-to. É uma leitura das páginas, não um rótulo de intenção medido.

O que as páginas atuais cobrem

PáginaURLComeça com
Automatizar a triagem de suporte: guia práticohttps://example.com/guideRegras de roteamento e depois tags
Checklist de automação da triagemhttps://example.com/checklistA própria checklist

Perguntas que as páginas respondem

  • O que a automação da triagem muda
  • Com quais regras de roteamento começar

Perguntas que faltam

  • Como medir se a triagem realmente melhorou
  • O que fazer quando o classificador erra

Estrutura proposta

  1. O que a automação da triagem muda — provar que é sobre a fila, não o quadro.
  2. As três primeiras regras de roteamento que valem automação — provar cada uma com exemplo.
  3. Como medir no primeiro mês — provar com métrica que um líder de ops consiga tirar.
  4. Quando a automação erra — provar o caminho de fallback humano.

Evidência

  • Exemplo de regra de roteamento, citado de https://example.com/guide (verificado em 2026-10-30)

Não medido aqui

Volume de busca, dificuldade de palavra-chave e posição. Este fluxo lê páginas públicas; não consulta índice de busca nem rastreador de posição.

Fontes

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

As chamadas exatas

Para desenvolvedores: o mesmo fluxo em código, na ordem de execução.

Mostrar as chamadas reais da API
  1. Veja quem responde hoje

    Pergunte ao Chat sobre a consulta e obtenha a resposta e as páginas citadas. Essas páginas são o conteúdo concorrente atual.

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

    Saída de exemplo

    {
      "answer": "Readers searching this usually want a step-by-step …",
      "sources": [
        { "link": "https://example.com/guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Leia as páginas em Markdown

    Baixe as três a cinco páginas mais fortes com Web Fetch em Markdown, mantendo títulos e perguntas.

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

    Saída de exemplo

    {
      "url": "https://example.com/guide",
      "checkedAt": "2026-10-30",
      "content": "# Automating support triage\n\n## Routing rules\n…"
    }
  3. Mapeie cobertura e lacunas

    Extraia os H2/H3 e as perguntas de FAQ de cada página e monte uma tabela: quais perguntas são respondidas e quais não são.

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

    Saída de exemplo

    // questions
    [
      { "page": "…", "heading": "What routes should you automate first?" }
    ]
  4. Escreva o briefing

    Descreva consulta-alvo, intenção, comparação de cobertura, perguntas ausentes, esboço sugerido e lista de fontes.

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

    Saída de exemplo

    # SEO brief — "how to automate support triage"
  5. Salve no LiveDoc

    Salve o briefing e os links das páginas no LiveDoc para a próxima atualização baixar só o que mudou.

    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

    Saída de exemplo

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

O que está incluído

  • Lista de páginas com fontes do Chat e links da resposta
  • Páginas mais bem posicionadas hoje em Markdown
  • Títulos e perguntas que essas páginas cobrem
  • Briefing do qual dá para tirar o esboço imediatamente
  • LiveDoc com fontes para a próxima atualização

O que não faz

  • Não mede posições, volume de busca, dificuldade de palavra-chave ou tráfego
  • Somente páginas públicas; login e paywall podem falhar
  • Não publica nem reescreve o artigo inteiro
  • Uma execução por consulta; várias consultas exigem seu próprio loop
  • Não garante posições

Perguntas

Ele mede volume de busca ou posições?

Não. Ele lê páginas públicas e avalia qual conteúdo responde à consulta hoje; posições e volume ficam com suas ferramentas de SEO.

De onde vêm os dados?

O Chat devolve páginas com fontes e o Web Fetch as transforma em Markdown. Cada avaliação no briefing aponta para uma página e data específicas.

Posso tratar várias consultas?

Sim, mas uma por vez. Para várias, repita os passos para cada consulta e salve briefings separados.

Para que tipo de consulta serve?

Consultas informacionais, comparativas e de “como fazer”, porque páginas públicas dão sinal suficiente. Consultas transacionais ainda precisam dos seus dados de produto e conversão.

Ele escreve o artigo?

Não. Ele entrega o briefing e o esboço; a escrita fica com o editor ou seu agent de escrita.

Quanto custa uma execução?

Chat e extração de páginas gastam créditos por uso; as tarifas atuais estão na página de preços. O prompt pede aprovação antes de gastar.

Fluxos relacionados

Faça do seu jeito

A mesma receita, adaptada ao seu processo real.

Só consultas comparativas

Limite a “X vs Y” e “melhor X” para enxergar melhor o ângulo de diferenciação.

Adicione sua página de produto

Inclua a página do produto como fonte extra para o esboço aterrissar nos seus recursos e preços.

Atualize a cada trimestre

Rode de novo no mesmo LiveDoc e observe como as páginas concorrentes e o esboço mudam.

As páginas de referência por trás desta receita e para onde ir depois.