Ricerca
Trasforma una query di ricerca in un brief di contenuto SEO
Guarda quali pagine rispondono oggi, leggile come Markdown, mappa le domande a cui rispondono e quelle che mancano, poi scrivi un brief da cui il copywriter può ricavare la scaletta.
Copia il prompt
Sostituisci i campi tra parentesi quadre e incolla in Claude Code, Codex o qualsiasi IA con accesso al terminale. Installa lo skill Felo, chiede prima di spendere crediti ed esegue il workflow.
Scrivi un brief di contenuto SEO per la query [query obiettivo] per [prodotto o sito]. Pubblico: [lettore]. Mercato e lingua: [regione], [lingua]. Angolo: [guida / confronto / pagina prodotto]. Decisione che supporta: [nuovo articolo / aggiornamento / colmare un vuoto]. Leggi prima cosa risponde oggi a questa query, poi proponi la struttura. Produci un brief Markdown con: 1. La query obiettivo e l’intento che deduci, con le prove di questa lettura. 2. Cosa coprono le pagine attuali: titolo, URL e sezioni iniziali. 3. Le domande a cui rispondono le pagine attuali e quelle che mancano. 4. Una struttura proposta con una riga per sezione su cosa deve dimostrare. 5. Prove ed esempi dalle fonti, con link. 6. Un elenco completo delle fonti. Regole: - Non dichiarare volume di ricerca, difficoltà della keyword, posizione o traffico. Questo flusso non li misura; scrivi «Non misurato qui» invece di un numero. - Non inventare statistiche, citazioni o affermazioni sui contenuti dei concorrenti. - Descrivi l’intento come lettura delle pagine, non come fatto misurato. - Mantieni le citazioni brevi, attribuite e con link. - Trasforma regione e lingua in valori espliciti. - Prima di consumare crediti, mostra le chiamate API previste e attendi la mia approvazione. - Non pubblicare, programmare né inviare nulla. - Scrivi il risultato in ./seo-brief.md e riassumilo in chat.
La copia include anche i passaggi di installazione e le regole di sicurezza.
Cosa ottieni
Output di esempio di un'esecuzione. Non è generazione dal vivo.
Brief SEO — «come automatizzare il triage del supporto»
Query obiettivo e intento
Query: «come automatizzare il triage del supporto». Le pagine restituite iniziano con passaggi di implementazione, non con pagine prodotto, quindi l’intento si legge come how-to. È una lettura delle pagine, non un’etichetta di intento misurata.
Cosa coprono le pagine attuali
| Pagina | URL | Inizia con |
|---|---|---|
| Automatizzare il triage del supporto: guida pratica | https://example.com/guide | Regole di routing, poi tag |
| Checklist di automazione del triage | https://example.com/checklist | La checklist stessa |
Domande a cui rispondono
- Cosa cambia l’automazione del triage
- Da quali regole di routing iniziare
Domande che mancano
- Come misurare se il triage è davvero migliorato
- Cosa fare quando il classificatore sbaglia
Schema proposto
- Cosa cambia l’automazione del triage — dimostrare che riguarda la coda, non l’organico.
- Le prime tre regole di routing da automatizzare — dimostrarle con un esempio.
- Come misurarlo nel primo mese — dimostrare con una metrica che un responsabile ops può estrarre.
- Quando l’automazione sbaglia — dimostrare il percorso di fallback umano.
Prove
- Esempio di regola di routing, citato da https://example.com/guide (verificato il 2026-10-30)
Non misurato qui
Volume di ricerca, difficoltà delle keyword e posizione. Questo flusso legge pagine pubbliche; non interroga indici di ricerca né tracker di posizione.
Fonti
- https://example.com/guide
- https://example.com/checklist
Le chiamate esatte
Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.
Mostra le chiamate API reali
Guarda chi risponde oggi
Chiedi a Chat della query e ottieni risposta e pagine citate. Quelle pagine sono il contenuto concorrente attuale.
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 }));Output di esempio
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }Leggi le pagine in Markdown
Scarica le tre-cinque pagine più solide con Web Fetch in Markdown, mantenendo titoli e domande.
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 }; }), );Output di esempio
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }Mappa copertura e lacune
Estrai H2/H3 e domande FAQ di ogni pagina e crea una tabella: quali domande sono risposte e quali no.
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]); }Output di esempio
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]Scrivi il brief
Descrivi query, intento, confronto di copertura, domande mancanti, scaletta proposta ed elenco fonti.
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);Output di esempio
# SEO brief — "how to automate support triage"
Salva nel LiveDoc
Salva brief e link delle pagine nel LiveDoc, così il prossimo aggiornamento scarica solo le modifiche.
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 archiveOutput di esempio
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Cosa include
- Elenco pagine con fonti da Chat e link alla risposta
- Pagine principali attuali in Markdown
- Titoli e domande che coprono
- Brief da cui ricavare subito una scaletta
- LiveDoc con fonti per il prossimo aggiornamento
Cosa non fa
- Non misura posizioni, volume, difficoltà o traffico
- Solo pagine pubbliche; login e paywall possono fallire
- Non pubblica né riscrive l’articolo intero
- Un’esecuzione per query; più query richiedono il tuo ciclo
- Non garantisce posizioni
Domande
Misura volume o posizioni?
No. Legge pagine pubbliche e valuta quale contenuto risponde oggi; posizioni e volume restano nei tuoi strumenti SEO.
Da dove vengono i dati?
Chat restituisce pagine con fonti e Web Fetch le trasforma in Markdown. Ogni valutazione punta a una pagina e una data precise.
Posso gestire più query?
Sì, ma una alla volta. Ripeti i passi per ogni query e salva brief separati.
Per quali query funziona?
Informative, comparative e “come fare”, perché le pagine pubbliche danno segnale sufficiente. Le transazionali richiedono i tuoi dati di prodotto e conversione.
Scrive l’articolo?
No. Produce brief e scaletta; la scrittura spetta all’editore o al tuo agent di scrittura.
Quanto costa un’esecuzione?
Chat ed estrazione consumano crediti a consumo; le tariffe attuali sono nella pagina prezzi. Il prompt chiede approvazione prima di spendere.
Workflow correlati
Trasforma una domanda in un brief di ricerca con fonti
Interroga il web, salva come Markdown le pagine dietro la risposta, aggiungi ciò che dicono i professionisti su X e conserva le prove in un LiveDoc che potrai interrogare di nuovo.
Apri il workflowContenutiRiempi un mese di contenuti con le domande del tuo pubblico
Mappa i temi con Chat, trova le domande del pubblico su X, prendi un angolo reale da una trascrizione video e componi un calendario di quattro settimane in cui ogni riga nomina la sua prova.
Apri il workflowContenutiPubblica un digest quotidiano di notizie IA che il team legga davvero
Ottieni una rassegna con fonti, aggiungi le discussioni dei professionisti su X, prendi una trascrizione video, componi l’edizione in Markdown e archiviala in un LiveDoc.
Apri il workflowAdattala a te
La stessa ricetta, adattata a come lavori davvero.
Solo query comparative
Limita a “X vs Y” e “migliore X” per vedere meglio l’angolo di differenziazione.
Aggiungi la tua pagina prodotto
Includi la pagina prodotto come fonte extra, così la scaletta atterra su funzioni e prezzi.
Aggiorna ogni trimestre
Riesegui nello stesso LiveDoc e osserva come cambiano pagine concorrenti e scaletta.
Continua
Le pagine di riferimento dietro questa ricetta e i prossimi passi.