Research
Eine Suchanfrage in ein SEO-Content-Briefing verwandeln
Sieh, welche Seiten die Anfrage heute beantworten, lies sie als Markdown, ordne beantwortete und fehlende Fragen und schreibe ein Briefing, aus dem ein Autor direkt eine Gliederung ableiten kann.
Prompt kopieren
Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.
Schreibe ein SEO-Content-Briefing für die Query [Ziel-Query] für [Produkt oder Website]. Zielgruppe: [Leser]. Markt und Sprache: [Region], [Sprache]. Blickwinkel: [Leitfaden / Vergleich / Produktseite]. Entscheidung, die es stützt: [neuer Artikel / Auffrischung / Lücke]. Lies zuerst, was diese Query aktuell beantwortet, bevor du gliederst. Erstelle ein Markdown-Briefing mit: 1. Der Ziel-Query und der abgeleiteten Suchintention, mit Belegen für diese Lesart. 2. Was die aktuellen Seiten abdecken: Titel, URL und die führenden Abschnitte. 3. Fragen, die die aktuellen Seiten beantworten, und Fragen, die sie verfehlen. 4. Einem vorgeschlagenen Aufbau mit einer Zeile pro Abschnitt, was er beweisen muss. 5. Belegen und Beispielen aus den Quellen, mit Links. 6. Einer vollständigen Quellenliste. Regeln: - Behaupte kein Suchvolumen, Keyword-Schwierigkeit, Ranking oder Traffic. Dieser Workflow misst das nicht; schreibe „Hier nicht gemessen“ statt einer Zahl. - Erfinde keine Statistiken, Zitate oder Aussagen über Inhalte von Wettbewerbern. - Beschreibe die Intention als Lesart der Seiten, nicht als gemessene Tatsache. - Halte Zitate kurz, ordne sie zu und verlinke sie. - Löse Region und Sprache in explizite Werte auf. - Bevor Credits verbraucht werden, zeige die geplanten API-Aufrufe und warte auf meine Freigabe. - Veröffentliche, plane oder versende nichts. - Schreibe das Ergebnis nach ./seo-brief.md und fasse es im Chat zusammen.
Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.
Das bekommst du
Beispielausgabe eines Laufs. Keine Live-Generierung.
SEO-Briefing — „Support-Triage automatisieren“
Ziel-Query und Intention
Query: „Support-Triage automatisieren“. Die zurückgegebenen Seiten beginnen mit Umsetzungsschritten, nicht mit Produktseiten, daher liest sich die Intention als How-to. Das ist eine Lesart der Seiten, kein gemessenes Intent-Label.
Was die aktuellen Seiten abdecken
| Seite | URL | Beginnt mit |
|---|---|---|
| Support-Triage automatisieren: ein Praxisleitfaden | https://example.com/guide | Routing-Regeln, dann Tags |
| Checkliste für Triage-Automatisierung | https://example.com/checklist | Der Checkliste selbst |
Fragen, die die Seiten beantworten
- Was Triage-Automatisierung ändert
- Mit welchen Routing-Regeln man beginnt
Fragen, die sie verfehlen
- Wie man misst, ob Triage wirklich besser wurde
- Was tun, wenn der Klassifikator falsch liegt
Vorgeschlagene Gliederung
- Was Triage-Automatisierung ändert — beweisen, dass es um die Queue geht, nicht um Kopfzahl.
- Die ersten drei sinnvollen Routing-Regeln — jede mit einem Beispiel beweisen.
- Wie man es im ersten Monat misst — mit einer Kennzahl, die ein Ops-Lead ziehen kann.
- Wenn die Automatisierung falsch liegt — den menschlichen Fallback belegen.
Evidenz
- Beispiel für eine Routing-Regel, zitiert aus https://example.com/guide (geprüft am 2026-10-30)
Hier nicht gemessen
Suchvolumen, Keyword-Schwierigkeit und Ranking. Dieser Workflow liest öffentliche Seiten; er fragt keinen Suchindex oder Rank-Tracker ab.
Quellen
- https://example.com/guide
- https://example.com/checklist
Die konkreten Aufrufe
Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.
Konkrete API-Aufrufe zeigen
Sehen, wer heute antwortet
Frage Chat nach der Anfrage und erhalte Antwort und zitierte Seiten. Diese Seiten sind der aktuelle Wettbewerbsinhalt.
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 }));Beispielausgabe
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }Die Seiten als Markdown lesen
Lade die drei bis fünf stärksten Seiten mit Web Fetch als Markdown und behalte Überschriften und Fragen.
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 }; }), );Beispielausgabe
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }Abdeckung und Lücken ordnen
Extrahiere H2/H3 und FAQ-Fragen jeder Seite und erstelle eine Tabelle: Welche Fragen sind beantwortet, welche fehlen?
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]); }Beispielausgabe
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]Das Briefing schreiben
Beschreibe Zielanfrage, Intent, Abdeckungsvergleich, fehlende Fragen, vorgeschlagene Gliederung und Quellenliste.
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);Beispielausgabe
# SEO brief — "how to automate support triage"
Im LiveDoc speichern
Speichere Briefing und Seitenlinks im LiveDoc, damit das nächste Update nur Änderungen lädt.
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 archiveBeispielausgabe
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Enthalten
- Belegte Seitenliste aus Chat und Links zur Antwort
- Aktuelle Top-Seiten als Markdown
- Überschriften und Fragen, die sie abdecken
- Ein Briefing, aus dem direkt eine Gliederung entsteht
- LiveDoc mit Quellen für das nächste Update
Was es nicht macht
- Misst keine Rankings, Suchvolumen, Keyword-Schwierigkeit oder Traffic
- Nur öffentliche Seiten; Login und Paywall können fehlschlagen
- Veröffentlicht oder schreibt den Artikel nicht um
- Ein Lauf pro Anfrage; mehrere Anfragen brauchen deine Schleife
- Garantiert keine Rankings
Fragen
Misst es Suchvolumen oder Rankings?
Nein. Es liest öffentliche Seiten und bewertet, welcher Inhalt die Anfrage heute beantwortet; Rankings und Volumen gehören in deine SEO-Tools.
Woher kommen die Daten?
Chat liefert belegte Seiten, Web Fetch macht sie zu Markdown. Jede Einschätzung im Briefing zeigt auf eine konkrete Seite und ein Datum.
Kann ich mehrere Anfragen bearbeiten?
Ja, aber eine nach der anderen. Wiederhole die Schritte pro Anfrage und speichere separate Briefings.
Für welche Anfragen eignet es sich?
Informations-, Vergleichs- und „Wie mache ich“-Anfragen, weil öffentliche Seiten genug Signal liefern. Transaktionale Anfragen brauchen zusätzlich deine Produkt- und Conversion-Daten.
Schreibt es den Artikel?
Nein. Es liefert Briefing und Gliederung; das Schreiben übernimmt der Editor oder dein Schreib-Agent.
Was kostet ein Lauf?
Chat und Seitenextraktion verbrauchen Credits; aktuelle Preise stehen auf der Preisseite. Der Prompt fragt vor Ausgaben nach Bestätigung.
Verwandte Workflows
Eine Frage in ein belegtes Research-Briefing verwandeln
Frage das Web, speichere die Seiten hinter der Antwort als Markdown, ergänze, was Praktiker auf X sagen, und halte die Belege in einem LiveDoc fest, das du später erneut durchsuchen kannst.
Workflow öffnenContentEinen Monat Content mit den Fragen deiner Zielgruppe füllen
Ordne Themen mit Chat, finde die Fragen deiner Zielgruppe auf X, hole einen echten Winkel aus einem Referenzvideo und erstelle einen Vier-Wochen-Kalender, in dem jede Zeile ihren Beleg nennt.
Workflow öffnenContentEinen täglichen KI-News-Digest bauen, den dein Team wirklich liest
Hole eine belegte News-Zusammenfassung, ergänze Diskussionen von Praktikern auf X, nimm ein Video-Transkript auf, verfasse die Ausgabe in Markdown und archiviere sie im LiveDoc.
Workflow öffnenMach es zu deinem
Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.
Nur Vergleichsanfragen
Beschränke dich auf „X vs Y“ und „bestes X“, um den Differenzierungswinkel leichter zu sehen.
Eigene Produktseite ergänzen
Nimm die Produktseite als zusätzliche Quelle auf, damit die Gliederung auf deinen Funktionen und Preisen landet.
Vierteljährlich aktualisieren
Führe es im selben LiveDoc erneut aus und beobachte, wie sich Wettbewerbsseiten und Gliederung ändern.
Weiter
Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.