Penyelidikan
Tukar pertanyaan carian kepada brief kandungan SEO
Lihat halaman mana menjawab hari ini, baca sebagai Markdown, petakan soalan yang diliputi dan terlepas, lalu tulis brief yang penulis boleh jadikan rangka.
Salin prompt
Ganti medan dalam kurungan siku lalu tampal ke Claude Code, Codex atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum kredit digunakan dan menjalankan aliran kerja.
Tulis ringkasan kandungan SEO untuk carian [carian sasaran] bagi [produk atau laman]. Audiens: [pembaca]. Pasaran dan bahasa: [wilayah], [bahasa]. Sudut: [panduan / perbandingan / halaman produk]. Keputusan yang disokong: [artikel baharu / kemas kini / isi jurang]. Baca apa yang menjawab carian ini sekarang sebelum membuat rangka. Hasilkan ringkasan Markdown dengan: 1. Carian sasaran dan niat yang anda rumuskan, dengan bukti bacaan itu. 2. Apa yang halaman semasa liputi: tajuk, URL dan bahagian pembuka. 3. Soalan yang halaman semasa jawab dan soalan yang terlepas. 4. Rangka cadangan dengan satu baris setiap bahagian tentang apa yang perlu dibuktikan. 5. Bukti dan contoh daripada sumber, dengan pautan. 6. Senarai sumber penuh. Peraturan: - Jangan dakwa volum carian, kesukaran kata kunci, kedudukan atau trafik. Aliran kerja ini tidak mengukurnya; tulis “Tidak diukur di sini” bukan nombor. - Jangan reka statistik, petikan atau dakwaan tentang kandungan pesaing. - Huraikan niat sebagai bacaan halaman, bukan fakta yang diukur. - Pastikan petikan pendek, diberi atribusi dan dipautkan. - Tukar wilayah dan bahasa kepada nilai jelas. - Sebelum menggunakan kredit, tunjukkan panggilan API yang dirancang dan tunggu kelulusan saya. - Jangan terbitkan, jadualkan atau hantar apa-apa. - Tulis hasil ke ./seo-brief.md dan ringkaskan dalam chat.
Salinan turut menyertakan langkah pemasangan dan peraturan keselamatan.
Apa yang anda dapat
Contoh output daripada satu larian. Bukan penjanaan langsung.
Ringkasan SEO — “cara mengautomasikan triaj sokongan”
Pertanyaan sasaran dan niat
Pertanyaan: “cara mengautomasikan triaj sokongan”. Halaman yang dikembalikan bermula dengan langkah pelaksanaan, bukan halaman produk, jadi niat dibaca sebagai how-to. Ini bacaan halaman, bukan label niat yang diukur.
Apa halaman semasa liputi
| Halaman | URL | Bermula dengan |
|---|---|---|
| Mengautomasikan triaj sokongan: panduan praktikal | https://example.com/guide | Peraturan penghalaan, kemudian tag |
| Senarai semak automasi triaj | https://example.com/checklist | Senarai semak itu sendiri |
Soalan yang dijawab
- Apa yang berubah dengan automasi triaj
- Peraturan penghalaan mana untuk mula
Soalan yang terlepas
- Cara mengukur sama ada triaj benar-benar bertambah baik
- Apa dilakukan apabila pengelas tersilap
Rangka cadangan
- Apa yang berubah — buktikan ia tentang baris gilir, bukan bilangan kakitangan.
- Tiga peraturan penghalaan pertama — buktikan setiap satu dengan contoh.
- Cara mengukurnya pada bulan pertama — buktikan dengan metrik yang boleh diambil ketua operasi.
- Apabila automasi salah — buktikan laluan sandaran manusia.
Bukti
- Contoh peraturan penghalaan, dipetik daripada https://example.com/guide (disemak 2026-10-30)
Tidak diukur di sini
Volum carian, kesukaran kata kunci dan kedudukan. Aliran ini membaca halaman awam; ia tidak bertanya indeks carian atau penjejak kedudukan.
Sumber
- https://example.com/guide
- https://example.com/checklist
Panggilan sebenar
Untuk pembangun: aliran kerja sama sebagai kod, mengikut urutan pelaksanaan.
Tunjukkan panggilan API sebenar
Lihat siapa menjawab hari ini
Tanya Chat tentang pertanyaan dan dapatkan jawapan serta halaman dipetik. Halaman itu kandungan pesaing semasa.
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 }));Contoh output
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }Baca halaman sebagai Markdown
Muat turun tiga hingga lima halaman terkuat dengan Web Fetch sebagai Markdown, simpan tajuk dan soalan.
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 }; }), );Contoh output
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }Petakan liputan dan ruang
Ekstrak H2/H3 dan soalan FAQ setiap halaman lalu buat jadual: soalan mana dijawab dan mana tidak.
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]); }Contoh output
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]Tulis brief
Terangkan pertanyaan, niat, perbandingan liputan, soalan hilang, rangka cadangan dan senarai sumber.
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);Contoh output
# SEO brief — "how to automate support triage"
Simpan dalam LiveDoc
Simpan brief dan pautan halaman dalam LiveDoc supaya kemas kini seterusnya hanya memuat turun perubahan.
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 archiveContoh output
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Termasuk
- Senarai halaman bersumber dari Chat dan pautan jawapan
- Halaman teratas semasa sebagai Markdown
- Tajuk dan soalan yang diliputi
- Brief yang boleh terus dijadikan rangka
- LiveDoc dengan sumber untuk kemas kini seterusnya
Apa yang tidak dilakukan
- Tidak mengukur kedudukan, volum, kesukaran atau trafik
- Halaman awam sahaja; login dan paywall mungkin gagal
- Tidak menerbitkan atau menulis semula artikel penuh
- Satu larian setiap pertanyaan; beberapa pertanyaan perlukan gelung anda
- Tidak menjamin kedudukan
Soalan
Adakah ia mengukur volum atau kedudukan?
Tidak. Ia membaca halaman awam dan menilai kandungan mana menjawab hari ini; kedudukan dan volum di alat SEO anda.
Dari mana datanya?
Chat memulangkan halaman bersumber dan Web Fetch menukarnya kepada Markdown. Setiap penilaian menunjuk halaman dan tarikh tertentu.
Boleh urus beberapa pertanyaan?
Boleh, tetapi satu demi satu. Ulang langkah setiap pertanyaan dan simpan brief berasingan.
Untuk pertanyaan apa sesuai?
Maklumat, perbandingan dan “cara buat”, kerana halaman awam memberi isyarat cukup. Pertanyaan transaksi perlukan data produk dan penukaran anda.
Adakah ia menulis artikel?
Tidak. Ia menghasilkan brief dan rangka; penulisan oleh editor atau writing agent anda.
Berapa kos satu larian?
Chat dan pengekstrakan menggunakan kredit mengikut penggunaan; kadar semasa di halaman harga. Prompt meminta kelulusan sebelum berbelanja.
Aliran kerja berkaitan
Tukar satu soalan kepada brief penyelidikan bersumber
Tanya web, simpan halaman di sebalik jawapan sebagai Markdown, tambah apa yang pengamal katakan di X dan simpan bukti dalam LiveDoc yang boleh dicari semula.
Buka aliran kerjaKandunganIsi sebulan kandungan dengan soalan audiens anda
Petakan tema dengan Chat, cari soalan audiens di X, ambil sudut sebenar dari transkrip video dan susun kalendar empat minggu yang setiap baris menyebut buktinya.
Buka aliran kerjaKandunganTerbitkan ringkasan berita AI harian yang benar-benar dibaca pasukan
Dapatkan ringkasan bersumber, tambah perbualan pengamal di X, ambil transkrip video, susun edisi Markdown dan arkibkan dalam LiveDoc.
Buka aliran kerjaSesuaikan
Resipi sama, disesuaikan dengan cara anda benar-benar menyampaikan.
Pertanyaan perbandingan sahaja
Hadkan kepada “X vs Y” dan “X terbaik” untuk melihat sudut pembezaan.
Tambah halaman produk anda
Sertakan halaman produk sebagai sumber tambahan supaya rangka berpijak pada ciri dan harga anda.
Kemas kini setiap suku
Jalankan semula dalam LiveDoc sama dan lihat perubahan halaman pesaing serta rangka.
Teruskan
Halaman rujukan di sebalik resipi ini dan langkah seterusnya.