Badania
Zamień zapytanie w brief treści SEO
Zobacz, które strony odpowiadają dziś, przeczytaj je jako Markdown, zmapuj pytania pokryte i pominięte, a potem napisz brief, z którego redaktor zrobi outline.
Skopiuj prompt
Podmień pola w nawiasach kwadratowych i wklej do Claude Code, Codex albo AI z dostępem do terminala. Instaluje skill Felo, pyta przed wydaniem kredytów i uruchamia workflow.
Napisz briefing treści SEO dla zapytania [zapytanie docelowe] dla [produkt lub strona]. Odbiorcy: [czytelnik]. Rynek i język: [region], [język]. Kąt: [poradnik / porównanie / strona produktu]. Decyzja, którą wspiera: [nowy artykuł / odświeżenie / uzupełnienie luki]. Najpierw przeczytaj, co dziś odpowiada na to zapytanie, zanim zrobisz konspekt. Przygotuj briefing w Markdown zawierający: 1. Zapytanie docelowe i intencję, którą wnioskujesz, z dowodami tej interpretacji. 2. Co obejmują obecne strony: tytuł, URL i sekcje otwierające. 3. Pytania, na które odpowiadają obecne strony, i te, które pomijają. 4. Proponowany konspekt z jedną linią na sekcję mówiącą, co ma dowieść. 5. Dowody i przykłady ze źródeł, z linkami. 6. Pełną listę źródeł. Zasady: - Nie twierdź, że znasz wolumen wyszukiwań, trudność frazy, pozycję lub ruch. Ten workflow tego nie mierzy; pisz „Tu nie zmierzono” zamiast liczby. - Nie wymyślaj statystyk, cytatów ani twierdzeń o treściach konkurencji. - Opisuj intencję jako odczytanie stron, nie jako zmierzony fakt. - Cytaty krótkie, z atrybucją i linkiem. - Zamień region i język na konkretne wartości. - Zanim zużyjesz kredyty, pokaż planowane wywołania API i poczekaj na moją zgodę. - Nie publikuj, nie planuj i niczego nie wysyłaj. - Zapisz wynik w ./seo-brief.md i podsumuj go w czacie.
Kopia zawiera też kroki instalacji i zasady bezpieczeństwa.
Co otrzymujesz
Przykładowy wynik jednego uruchomienia. Nie generowanie na żywo.
Briefing SEO — „jak zautomatyzować triage wsparcia”
Zapytanie docelowe i intencja
Zapytanie: „jak zautomatyzować triage wsparcia”. Zwrócone strony zaczynają się od kroków wdrożenia, nie od stron produktu, więc intencja czyta się jako how-to. To odczytanie stron, nie zmierzona etykieta intencji.
Co obejmują obecne strony
| Strona | URL | Zaczyna się od |
|---|---|---|
| Automatyzacja triage wsparcia: praktyczny przewodnik | https://example.com/guide | Reguły routingu, potem tagi |
| Checklista automatyzacji triage | https://example.com/checklist | Sama checklista |
Pytania, na które odpowiadają
- Co zmienia automatyzacja triage
- Od których reguł routingu zacząć
Pytania pominięte
- Jak zmierzyć, czy triage naprawdę się poprawił
- Co zrobić, gdy klasyfikator się myli
Proponowany układ
- Co zmienia automatyzacja triage — dowieść, że chodzi o kolejkę, nie o etaty.
- Pierwsze trzy reguły routingu — dowieść każdą przykładem.
- Jak mierzyć w pierwszym miesiącu — dowieść metryką, którą lider ops może wyciągnąć.
- Gdy automatyzacja się myli — dowieść ścieżki odwrotu do człowieka.
Dowody
- Przykład reguły routingu, cytowany z https://example.com/guide (sprawdzono 2026-10-30)
Nie zmierzono tutaj
Wolumen wyszukiwania, trudność frazy i pozycja. Ten workflow czyta publiczne strony; nie pyta indeksu wyszukiwania ani trackera pozycji.
Źródła
- https://example.com/guide
- https://example.com/checklist
Dokładne wywołania
Dla deweloperów: ten sam workflow jako kod, w kolejności wykonania.
Pokaż rzeczywiste wywołania API
Zobacz, kto odpowiada dziś
Zapytaj Chat o zapytanie i weź odpowiedź oraz cytowane strony. Te strony to obecna konkurencyjna treść.
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 }));Przykładowy wynik
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }Przeczytaj strony jako Markdown
Pobierz trzy do pięciu najmocniejszych stron przez Web Fetch jako Markdown, zachowując nagłówki i pytania.
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 }; }), );Przykładowy wynik
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }Zmapuj pokrycie i luki
Wyekstrahuj H2/H3 i pytania FAQ z każdej strony i zrób tabelę: które pytania są odpowiedziane, a które nie.
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]); }Przykładowy wynik
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]Napisz brief
Opisz zapytanie, intencję, porównanie pokrycia, brakujące pytania, proponowany outline i listę źródeł.
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);Przykładowy wynik
# SEO brief — "how to automate support triage"
Zapisz w LiveDoc
Zapisz brief i linki stron w LiveDoc, żeby kolejna aktualizacja pobierała tylko zmiany.
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 archivePrzykładowy wynik
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Co zawiera
- Lista stron ze źródłami z Chat i linkami odpowiedzi
- Obecne czołowe strony jako Markdown
- Nagłówki i pytania, które pokrywają
- Brief, z którego od razu powstaje outline
- LiveDoc ze źródłami na kolejną aktualizację
Czego nie robi
- Nie mierzy pozycji, wolumenu, trudności ani ruchu
- Tylko strony publiczne; logowanie i paywall mogą zawieść
- Nie publikuje ani nie przepisuje całego artykułu
- Jedno uruchomienie na zapytanie; kilka wymaga twojej pętli
- Nie gwarantuje pozycji
Pytania
Czy mierzy wolumen lub pozycje?
Nie. Czyta publiczne strony i ocenia, które treści odpowiadają dziś; pozycje i wolumen są w twoich narzędziach SEO.
Skąd dane?
Chat zwraca strony ze źródłami, a Web Fetch zamienia je w Markdown. Każda ocena wskazuje konkretną stronę i datę.
Czy obsługuje kilka zapytań?
Tak, ale po jednym. Powtórz kroki dla każdego zapytania i zapisuj osobne briefy.
Do jakich zapytań?
Informacyjnych, porównawczych i „jak zrobić”, bo publiczne strony dają dość sygnału. Transakcyjne wymagają danych produktu i konwersji.
Czy pisze artykuł?
Nie. Daje brief i outline; pisanie należy do redaktora lub twojego agenta piszącego.
Ile kosztuje jedno uruchomienie?
Chat i ekstrakcja zużywają kredyty według użycia; aktualne stawki na stronie cen. Prompt pyta o zgodę przed wydaniem.
Powiązane workflowy
Zamień jedno pytanie w brief badawczy ze źródłami
Zapytaj web, zapisz strony stojące za odpowiedzią jako Markdown, dodaj to, co mówią praktycy na X, i zachowaj dowody w LiveDoc, który można później przeszukać.
Otwórz workflowTreściWypełnij miesiąc treści pytaniami odbiorców
Zmapuj tematy z Chat, znajdź pytania odbiorców na X, weź prawdziwy kąt z transkryptu wideo i złóż czterotygodniowy kalendarz, w którym każdy wiersz podaje dowód.
Otwórz workflowTreściPublikuj codzienny digest AI, który zespół naprawdę czyta
Weź podsumowanie ze źródłami, dodaj rozmowy praktyków na X, pobierz transkrypt wideo, złóż wydanie w Markdown i zarchiwizuj w LiveDoc.
Otwórz workflowDostosuj
Ta sama receptura, dopasowana do tego, jak naprawdę dostarczasz.
Tylko zapytania porównawcze
Ogranicz do „X vs Y” i „najlepszy X”, by lepiej zobaczyć kąt wyróżnienia.
Dodaj swoją stronę produktu
Dodaj stronę produktu jako dodatkowe źródło, żeby outline opierał się na twoich funkcjach i cenach.
Odświeżaj co kwartał
Uruchom ponownie w tym samym LiveDoc i zobacz, jak zmieniają się strony konkurentów i outline.
Idź dalej
Strony referencyjne za tą recepturą i kolejne kroki.