Felo API PlatformFelo API Platform

Исследования

Превратите один поисковый запрос в SEO-бриф для контента

Посмотрите, какие страницы сейчас отвечают на запрос, прочитайте их как Markdown, сопоставьте вопросы, на которые они отвечают и которые пропускают, и напишите бриф, по которому автор сразу составит план.

Время25 минутУровеньСреднийОбновлено2026-10-30
Для когоКонтент-маркетологиSEO-специалистыРедакторы

Скопировать промпт

Замените поля в квадратных скобках и вставьте в Claude Code, Codex или любой AI с доступом к терминалу. Он установит навык Felo, спросит перед списанием кредитов и выполнит процесс.

Напиши SEO-бриф для запроса [целевой запрос] для [продукт или сайт].

Аудитория: [читатель]. Рынок и язык: [регион], [язык]. Угол: [руководство / сравнение / страница продукта]. Какое решение поддерживает: [новая статья / обновление / закрытие пробела].

Сначала прочитай, что сейчас отвечает на этот запрос, и только потом составляй структуру. Подготовь Markdown-бриф с:
1. Целевым запросом и предполагаемым поисковым намерением с обоснованием этой трактовки.
2. Тем, что покрывают текущие страницы: заголовок, URL и вводные разделы.
3. Вопросами, на которые текущие страницы отвечают, и вопросами, которые они упускают.
4. Предлагаемой структурой: по одной строке на раздел о том, что он должен доказать.
5. Доказательствами и примерами из источников со ссылками.
6. Полным списком источников.

Правила:
- Не заявляй объём поиска, сложность ключевого слова, позицию или трафик. Этот процесс их не измеряет; пиши «Здесь не измерялось» вместо числа.
- Не выдумывай статистику, цитаты и утверждения о контенте конкурентов.
- Описывай намерение как прочтение страниц, а не как измеренный факт.
- Цитаты должны быть короткими, с указанием источника и ссылкой.
- Преврати регион и язык в явные значения.
- Перед расходом кредитов покажи планируемые вызовы API и дождись моего одобрения.
- Ничего не публикуй, не планируй и не отправляй.
- Запиши результат в ./seo-brief.md и кратко изложи его в чате.

В копию также входят шаги установки и правила безопасности.

Что получится

Пример вывода одного запуска. Не живая генерация.

Пример брифа (фрагмент)

SEO-бриф — «как автоматизировать триаж поддержки»

Целевой запрос и интент

Запрос: «как автоматизировать триаж поддержки». Возвращённые страницы начинаются с шагов внедрения, а не со страниц продукта, поэтому интент читается как how-to. Это прочтение страниц, а не измеренный ярлык интента.

Что покрывают текущие страницы

СтраницаURLНачинается с
Автоматизация триажа поддержки: практическое руководствоhttps://example.com/guideПравила маршрутизации, затем теги
Чек-лист автоматизации триажаhttps://example.com/checklistСам чек-лист

Вопросы, на которые отвечают страницы

  • Что меняет автоматизация триажа
  • С каких правил маршрутизации начать

Вопросы, которые упускаются

  • Как измерить, стало ли лучше
  • Что делать, если классификатор ошибается

Предлагаемая структура

  1. Что меняет автоматизация триажа — доказать, что дело в очереди, а не в численности.
  2. Первые три правила маршрутизации — доказать каждое примером.
  3. Как измерить в первый месяц — доказать метрикой, которую достанет операционный руководитель.
  4. Когда автоматизация ошибается — доказать путь ручного отката.

Доказательства

  • Пример правила маршрутизации из https://example.com/guide (проверено 2026-10-30)

Здесь не измеряется

Поисковый объём, сложность ключевого слова и позиция. Процесс читает публичные страницы; он не обращается к поисковому индексу или трекеру позиций.

Источники

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

Реальные вызовы

Для разработчиков: тот же процесс в виде кода в порядке выполнения.

Показать реальные вызовы API
  1. Посмотрите, кто отвечает сейчас

    Спросите Chat о запросе и получите ответ с цитируемыми страницами. Эти страницы — текущий конкурентный контент.

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

    Пример вывода

    {
      "answer": "Readers searching this usually want a step-by-step …",
      "sources": [
        { "link": "https://example.com/guide", "title": "…", "snippet": "…" }
      ]
    }
  2. Прочитайте страницы как Markdown

    Загрузите 3–5 сильнейших страниц через Web Fetch в Markdown, сохранив заголовки и вопросы.

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

    Пример вывода

    {
      "url": "https://example.com/guide",
      "checkedAt": "2026-10-30",
      "content": "# Automating support triage\n\n## Routing rules\n…"
    }
  3. Сопоставьте покрытие и пробелы

    Извлеките H2/H3 и вопросы FAQ с каждой страницы и составьте таблицу: на какие вопросы ответ есть, а на какие нет.

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

    Пример вывода

    // questions
    [
      { "page": "…", "heading": "What routes should you automate first?" }
    ]
  4. Напишите бриф

    Опишите целевой запрос, интент, сравнение покрытия, пропущенные вопросы, предложенный план и список источников.

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

    Пример вывода

    # SEO brief — "how to automate support triage"
  5. Сохраните в LiveDoc

    Сохраните бриф и ссылки на страницы в LiveDoc, чтобы в следующий раз загружать только изменения.

    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

    Пример вывода

    { "short_id": "PvyKouzJirXjFdst4uKRK3" }

Что входит

  • Список страниц с источниками из Chat и ссылки на основания ответа
  • Текущие верхние страницы в Markdown
  • Заголовки и вопросы, которые они покрывают
  • Бриф, по которому можно сразу составить план
  • LiveDoc с источниками для следующего обновления

Чего не делает

  • Не измеряет позиции, объём поиска, сложность ключевых слов и трафик
  • Только публичные страницы; логин и пейволлы могут не открыться
  • Не публикует и не переписывает статью целиком
  • Один запуск на запрос; несколько запросов — цикл на вашей стороне
  • Не гарантирует позиции

Вопросы

Он измеряет объём поиска или позиции?

Нет. Он читает публичные страницы и оценивает, какой контент сейчас отвечает на запрос; позиции и объём смотрите в своих SEO-инструментах.

Откуда данные?

Chat возвращает страницы с источниками, Web Fetch превращает их в Markdown. Каждая оценка в брифе указывает на конкретную страницу и дату.

Можно обработать несколько запросов?

Да, но по одному за раз. Для нескольких повторите шаги для каждого запроса и сохраните отдельные брифы.

Для каких запросов подходит?

Для информационных, сравнительных и «как сделать». Публичные страницы дают достаточно сигналов. Для транзакционных нужны ваши данные о продукте и конверсии.

Он пишет статью?

Нет. Он выдаёт бриф и план, а пишет редактор или ваш писательский agent.

Сколько стоит один запуск?

Chat и извлечение страниц расходуют кредиты по факту использования; актуальные тарифы на странице цен. Промпт просит одобрение до трат.

Связанные процессы

Адаптируйте под себя

Тот же рецепт, подстроенный под ваш реальный процесс.

Только сравнительные запросы

Ограничьтесь «X vs Y» и «лучший X», чтобы легче увидеть угол дифференциации.

Добавьте свою страницу продукта

Добавьте страницу продукта как дополнительный источник, чтобы план опирался на ваши функции и цены.

Обновляйте раз в квартал

Перезапускайте с тем же LiveDoc и смотрите, как меняются конкуренты и предложенный план.

Справочные страницы этого рецепта и куда двигаться дальше.