Riset
Ubah kueri pencarian menjadi brief konten SEO
Lihat halaman mana yang menjawab hari ini, baca sebagai Markdown, petakan pertanyaan yang tercakup dan terlewat, lalu tulis brief agar penulis bisa menyusun kerangka.
Salin prompt
Ganti kolom dalam kurung siku lalu tempel ke Claude Code, Codex, atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum memakai kredit, dan menjalankan alur kerja.
Tulis ringkasan konten SEO untuk kueri [kueri target] untuk [produk atau situs]. Audiens: [pembaca]. Pasar dan bahasa: [wilayah], [bahasa]. Sudut: [panduan / perbandingan / halaman produk]. Keputusan yang didukung: [artikel baru / penyegaran / menutup celah]. Baca dulu apa yang saat ini menjawab kueri ini sebelum menyusun outline. Hasilkan ringkasan Markdown berisi: 1. Kueri target dan niat pencarian yang kamu simpulkan, dengan bukti pembacaan itu. 2. Apa yang dicakup halaman saat ini: judul, URL, dan bagian pembuka. 3. Pertanyaan yang dijawab halaman saat ini dan pertanyaan yang terlewat. 4. Outline usulan dengan satu baris per bagian tentang apa yang harus dibuktikan. 5. Bukti dan contoh dari sumber, dengan tautan. 6. Daftar sumber lengkap. Aturan: - Jangan mengklaim volume pencarian, kesulitan kata kunci, peringkat, atau lalu lintas. Alur ini tidak mengukurnya; tulis “Tidak diukur di sini” alih-alih angka. - Jangan mengarang statistik, kutipan, atau klaim tentang konten pesaing. - Jelaskan niat sebagai pembacaan halaman, bukan fakta terukur. - Jaga kutipan tetap singkat, diberi atribusi, dan bertautan. - Ubah wilayah dan bahasa menjadi nilai eksplisit. - Sebelum memakai kredit, tampilkan panggilan API yang direncanakan dan tunggu persetujuan saya. - Jangan menerbitkan, menjadwalkan, atau mengirim apa pun. - Tulis hasilnya ke ./seo-brief.md dan ringkas di chat.
Salinan juga menyertakan langkah pemasangan dan aturan keamanan.
Yang Anda dapatkan
Contoh keluaran dari satu eksekusi. Bukan pembuatan langsung.
Ringkasan SEO — “cara mengotomatiskan triase dukungan”
Kueri target dan niat
Kueri: “cara mengotomatiskan triase dukungan”. Halaman yang dikembalikan dimulai dengan langkah implementasi, bukan halaman produk, jadi niatnya terbaca sebagai how-to. Ini pembacaan halaman, bukan label niat terukur.
Apa yang dicakup halaman saat ini
| Halaman | URL | Dimulai dengan |
|---|---|---|
| Mengotomatiskan triase dukungan: panduan praktis | https://example.com/guide | Aturan routing, lalu tag |
| Checklist otomatisasi triase | https://example.com/checklist | Checklist itu sendiri |
Pertanyaan yang dijawab
- Apa yang berubah dengan otomatisasi triase
- Aturan routing mana yang pertama
Pertanyaan yang terlewat
- Cara mengukur apakah triase benar-benar membaik
- Apa yang dilakukan saat classifier salah
Kerangka usulan
- Apa yang berubah — buktikan ini soal antrean, bukan jumlah staf.
- Tiga aturan routing pertama — buktikan masing-masing dengan contoh.
- Cara mengukurnya di bulan pertama — buktikan dengan metrik yang bisa diambil pemimpin ops.
- Saat otomatisasi salah — buktikan jalur fallback manusia.
Bukti
- Contoh aturan routing, dikutip dari https://example.com/guide (diperiksa 2026-10-30)
Tidak diukur di sini
Volume pencarian, kesulitan kata kunci, dan posisi. Alur ini membaca halaman publik; tidak meminta indeks pencarian atau pelacak posisi.
Sumber
- https://example.com/guide
- https://example.com/checklist
Panggilan persisnya
Untuk developer: alur kerja yang sama sebagai kode, sesuai urutan eksekusi.
Tampilkan panggilan API asli
Lihat siapa yang menjawab hari ini
Tanya Chat tentang kueri dan dapatkan jawaban serta halaman yang dikutip. Halaman itu adalah konten pesaing saat ini.
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 keluaran
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }Baca halaman sebagai Markdown
Unduh tiga sampai lima halaman terkuat dengan Web Fetch sebagai Markdown, simpan judul dan pertanyaan.
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 keluaran
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }Petakan cakupan dan celah
Ekstrak H2/H3 dan pertanyaan FAQ tiap halaman lalu buat tabel: pertanyaan mana yang terjawab dan mana yang 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 keluaran
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]Tulis brief
Jelaskan kueri, intent, perbandingan cakupan, pertanyaan yang hilang, kerangka usulan, dan daftar 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 keluaran
# SEO brief — "how to automate support triage"
Simpan di LiveDoc
Simpan brief dan tautan halaman di LiveDoc agar pembaruan berikutnya hanya mengunduh 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 keluaran
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
Termasuk
- Daftar halaman bersumber dari Chat dan tautan jawaban
- Halaman teratas saat ini dalam Markdown
- Judul dan pertanyaan yang dicakup
- Brief yang bisa langsung dijadikan kerangka
- LiveDoc dengan sumber untuk pembaruan berikutnya
Yang tidak dilakukan
- Tidak mengukur peringkat, volume, kesulitan, atau traffic
- Hanya halaman publik; login dan paywall bisa gagal
- Tidak menerbitkan atau menulis ulang seluruh artikel
- Satu eksekusi per kueri; beberapa kueri butuh loop Anda
- Tidak menjamin peringkat
Pertanyaan
Apakah mengukur volume atau peringkat?
Tidak. Ia membaca halaman publik dan menilai konten mana yang menjawab hari ini; peringkat dan volume ada di alat SEO Anda.
Dari mana datanya?
Chat mengembalikan halaman bersumber dan Web Fetch mengubahnya menjadi Markdown. Setiap penilaian menunjuk halaman dan tanggal tertentu.
Bisa menangani beberapa kueri?
Bisa, tetapi satu per satu. Ulangi langkah per kueri dan simpan brief terpisah.
Untuk kueri apa cocok?
Informasional, perbandingan, dan “cara melakukan”, karena halaman publik memberi sinyal cukup. Kueri transaksional butuh data produk dan konversi Anda.
Apakah ia menulis artikelnya?
Tidak. Ia menghasilkan brief dan kerangka; penulisan oleh editor atau writing agent Anda.
Berapa biaya satu eksekusi?
Chat dan ekstraksi memakai kredit sesuai pemakaian; tarif saat ini di halaman harga. Prompt meminta persetujuan sebelum mengeluarkan biaya.
Alur kerja terkait
Ubah satu pertanyaan menjadi brief riset bersumber
Tanya web, simpan halaman di balik jawaban sebagai Markdown, tambahkan apa yang dikatakan praktisi di X, dan simpan bukti dalam LiveDoc yang bisa ditelusuri lagi.
Buka alur kerjaKontenIsi satu bulan konten dengan pertanyaan audiens Anda
Petakan tema dengan Chat, temukan pertanyaan audiens di X, ambil sudut nyata dari transkrip video, dan susun kalender empat minggu di mana setiap baris menyebut buktinya.
Buka alur kerjaKontenTerbitkan ringkasan berita AI harian yang benar-benar dibaca tim
Dapatkan ringkasan bersumber, tambahkan diskusi praktisi di X, ambil transkrip video, susun edisi Markdown, dan arsipkan di LiveDoc.
Buka alur kerjaSesuaikan
Resep yang sama, disesuaikan dengan cara Anda benar-benar mengirim.
Hanya kueri perbandingan
Batasi ke “X vs Y” dan “X terbaik” untuk melihat sudut diferensiasi.
Tambahkan halaman produk Anda
Sertakan halaman produk sebagai sumber tambahan agar kerangka berpijak pada fitur dan harga Anda.
Perbarui tiap kuartal
Jalankan ulang di LiveDoc yang sama dan lihat perubahan halaman pesaing serta kerangka.
Lanjut
Halaman referensi di balik resep ini dan langkah berikutnya.