วิจัย
เปลี่ยนคำค้นเป็นบรีฟเนื้อหา SEO
ดูว่าหน้าใดตอบวันนี้ อ่านเป็น Markdown ทำแผนที่คำถามที่ครอบคลุมและที่ขาด แล้วเขียนบรีฟให้นักเขียนร่างโครงได้
คัดลอกพรอมป์ต์
แทนช่องในวงเล็บเหลี่ยมแล้ววางใน Claude Code, Codex หรือ AI ที่เข้าถึงเทอร์มินัล ระบบจะติดตั้งสกิล Felo ถามก่อนใช้เครดิต และรันเวิร์กโฟลว์
เขียนสรุปเนื้อหา SEO สำหรับคำค้น [คำค้นเป้าหมาย] ของ [ผลิตภัณฑ์หรือเว็บไซต์] ผู้อ่าน: [ผู้อ่าน] ตลาดและภาษา: [ภูมิภาค], [ภาษา] มุมมอง: [คู่มือ / เปรียบเทียบ / หน้าสินค้า] การตัดสินใจที่รองรับ: [บทความใหม่ / อัปเดต / เติมช่องว่าง] อ่านสิ่งที่ตอบคำค้นนี้อยู่ก่อน แล้วจึงร่างโครง สร้างสรุป Markdown ที่มี: 1. คำค้นเป้าหมายและเจตนาการค้นที่คุณอนุมาน พร้อมหลักฐานของการตีความนั้น 2. สิ่งที่หน้าเว็บปัจจุบันครอบคลุม: ชื่อเรื่อง URL และหัวข้อเปิด 3. คำถามที่หน้าเว็บปัจจุบันตอบ และคำถามที่ยังขาด 4. โครงร่างที่เสนอ โดยหนึ่งบรรทัดต่อหัวข้อว่าต้องพิสูจน์อะไร 5. หลักฐานและตัวอย่างจากแหล่งข้อมูล พร้อมลิงก์ 6. รายการแหล่งอ้างอิงทั้งหมด กฎ: - ห้ามอ้างปริมาณการค้นหา ความยากของคำค้น อันดับ หรือทราฟฟิก เวิร์กโฟลว์นี้ไม่ได้วัดสิ่งเหล่านั้น ให้เขียน “ไม่ได้วัดที่นี่” แทนตัวเลข - ห้ามแต่งสถิติ คำพูด หรือข้อกล่าวอ้างเกี่ยวกับเนื้อหาคู่แข่ง - อธิบายเจตนาเป็นการอ่านหน้าเว็บ ไม่ใช่ข้อเท็จจริงที่วัดได้ - เก็บคำพูดให้สั้น ระบุที่มา และมีลิงก์ - แปลงภูมิภาคและภาษาเป็นค่าที่ชัดเจน - ก่อนใช้เครดิต ให้แสดงการเรียก API ที่จะทำและรอการอนุมัติจากฉัน - ห้ามเผยแพร่ ตั้งเวลา หรือส่งสิ่งใด - เขียนผลลัพธ์ลง ./seo-brief.md และสรุปในแชท
สำเนายังรวมขั้นตอนติดตั้งและกฎความปลอดภัย
สิ่งที่คุณได้รับ
ตัวอย่างผลลัพธ์จากการรันหนึ่งครั้ง ไม่ใช่การสร้างสด
สรุป SEO — “วิธีทำให้การคัดแยกงานสนับสนุนเป็นอัตโนมัติ”
คำค้นเป้าหมายและเจตนา
คำค้น: “วิธีทำให้การคัดแยกงานสนับสนุนเป็นอัตโนมัติ” หน้าที่ส่งกลับเริ่มด้วยขั้นตอนใช้งาน ไม่ใช่หน้าผลิตภัณฑ์ เจตนาจึงอ่านเป็นการทำตามขั้นตอน นี่คือการอ่านหน้า ไม่ใช่ป้ายเจตนาที่วัดได้
หน้าที่มีอยู่ครอบคลุมอะไร
| หน้า | URL | เริ่มด้วย |
|---|---|---|
| ทำให้การคัดแยกงานสนับสนุนเป็นอัตโนมัติ: คู่มือปฏิบัติ | https://example.com/guide | กฎการกำหนดเส้นทาง แล้วแท็ก |
| เช็กลิสต์ระบบอัตโนมัติการคัดแยก | https://example.com/checklist | ตัวเช็กลิสต์ |
คำถามที่หน้าตอบ
- ระบบอัตโนมัติเปลี่ยนอะไร
- เริ่มจากกฎการกำหนดเส้นทางใด
คำถามที่ขาด
- จะวัดได้อย่างไรว่าการคัดแยกดีขึ้นจริง
- ทำอะไรเมื่อตัวจำแนกผิด
โครงร่างที่เสนอ
- ระบบอัตโนมัติเปลี่ยนอะไร — พิสูจน์ว่าเป็นเรื่องคิว ไม่ใช่จำนวนคน
- กฎการกำหนดเส้นทางสามข้อแรกที่ควรทำอัตโนมัติ — พิสูจน์แต่ละข้อด้วยตัวอย่าง
- วิธีวัดในเดือนแรก — พิสูจน์ด้วยตัวชี้วัดที่หัวหน้าปฏิบัติการดึงได้
- เมื่อระบบอัตโนมัติผิด — พิสูจน์เส้นทางสำรองของมนุษย์
หลักฐาน
- ตัวอย่างกฎการกำหนดเส้นทาง อ้างจาก https://example.com/guide (ตรวจสอบ 2026-10-30)
ไม่ได้วัดที่นี่
ปริมาณการค้นหา ความยากของคำค้น และอันดับ บริบทนี้อ่านหน้าสาธารณะ ไม่ได้ถามดัชนีค้นหาหรือตัวติดตามอันดับ
แหล่งข้อมูล
- https://example.com/guide
- https://example.com/checklist
การเรียกที่แน่นอน
สำหรับนักพัฒนา: เวิร์กโฟลว์เดียวกันในรูปโค้ดตามลำดับการทำงาน
แสดงการเรียก API จริง
ดูว่าใครตอบวันนี้
ถาม Chat เกี่ยวกับคำค้นและรับคำตอบกับหน้าที่อ้างอิง หน้าเหล่านั้นคือเนื้อหาคู่แข่งปัจจุบัน
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 }));ตัวอย่างผลลัพธ์
{ "answer": "Readers searching this usually want a step-by-step …", "sources": [ { "link": "https://example.com/guide", "title": "…", "snippet": "…" } ] }อ่านหน้าเป็น Markdown
ดาวน์โหลดสามถึงห้าหน้าที่แข็งที่สุดด้วย Web Fetch เป็น Markdown เก็บหัวข้อและคำถาม
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 }; }), );ตัวอย่างผลลัพธ์
{ "url": "https://example.com/guide", "checkedAt": "2026-10-30", "content": "# Automating support triage\n\n## Routing rules\n…" }ทำแผนที่ความครอบคลุมและช่องว่าง
สกัด H2/H3 และคำถาม FAQ ของแต่ละหน้า แล้วทำตาราง: คำถามใดตอบแล้วและใดยังขาด
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]); }ตัวอย่างผลลัพธ์
// questions [ { "page": "…", "heading": "What routes should you automate first?" } ]เขียนบรีฟ
อธิบายคำค้น เจตนา เปรียบเทียบความครอบคลุม คำถามที่ขาด โครงร่างที่เสนอ และรายการแหล่ง
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);ตัวอย่างผลลัพธ์
# SEO brief — "how to automate support triage"
เก็บใน LiveDoc
เก็บบรีฟและลิงก์หน้าใน LiveDoc เพื่อให้อัปเดตถัดไปดาวน์โหลดเฉพาะการเปลี่ยนแปลง
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 archiveตัวอย่างผลลัพธ์
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
รวมอะไรบ้าง
- รายการหน้าพร้อมแหล่งจาก Chat และลิงก์คำตอบ
- หน้าเด่นปัจจุบันเป็น Markdown
- หัวข้อและคำถามที่ครอบคลุม
- บรีฟที่ร่างโครงได้ทันที
- LiveDoc พร้อมแหล่งสำหรับอัปเดตถัดไป
สิ่งที่ไม่ทำ
- ไม่วัดอันดับ ปริมาณค้น ความยาก หรือทราฟฟิก
- เฉพาะหน้าสาธารณะ ล็อกอินและเพย์วอลล์อาจล้มเหลว
- ไม่เผยแพร่หรือเขียนบทความทั้งชิ้นใหม่
- หนึ่งครั้งต่อคำค้น หลายคำค้นต้องวนเอง
- ไม่รับประกันอันดับ
คำถาม
วัดปริมาณหรืออันดับไหม?
ไม่ อ่านหน้าสาธารณะและประเมินว่าเนื้อหาใดตอบวันนี้ อันดับและปริมาณอยู่ในเครื่องมือ SEO ของคุณ
ข้อมูลมาจากไหน?
Chat คืนหน้าพร้อมแหล่ง และ Web Fetch เปลี่ยนเป็น Markdown ทุกการประเมินชี้หน้าและวันที่ชัดเจน
จัดการหลายคำค้นได้ไหม?
ได้ แต่ทีละคำค้น ทำขั้นตอนซ้ำต่อคำค้นและเก็บบรีฟแยก
เหมาะกับคำค้นแบบไหน?
ข้อมูล เปรียบเทียบ และ “วิธีทำ” เพราะหน้าสาธารณะให้สัญญาณพอ คำค้นเชิงธุรกรรมต้องใช้ข้อมูลสินค้าและการแปลงของคุณ
เขียนบทความไหม?
ไม่ ให้บรีฟและโครงร่าง การเขียนเป็นของบรรณาธิการหรือ writing agent
การรันหนึ่งครั้งมีค่าใช้จ่ายเท่าไร?
Chat และการสกัดใช้เครดิตตามการใช้งาน อัตราปัจจุบันที่หน้าค่าบริการ พรอมป์ต์ขออนุมัติก่อนใช้จ่าย
เวิร์กโฟลว์ที่เกี่ยวข้อง
เปลี่ยนคำถามหนึ่งข้อเป็นบรีฟวิจัยที่มีแหล่งอ้างอิง
ถามเว็บ บันทึกหน้าเว็บที่อยู่เบื้องหลังคำตอบเป็น Markdown เพิ่มสิ่งที่ผู้ปฏิบัติพูดบน X และเก็บหลักฐานใน LiveDoc ที่ค้นซ้ำได้
เปิดเวิร์กโฟลว์เนื้อหาเติมเนื้อหาหนึ่งเดือนด้วยคำถามของผู้ชม
ทำแผนที่หัวข้อด้วย Chat หาคำถามผู้ชมบน X ดึงมุมจริงจากทรานสคริปต์วิดีโอ และประกอบปฏิทินสี่สัปดาห์ที่ทุกแถวระบุหลักฐาน
เปิดเวิร์กโฟลว์เนื้อหาเผยแพร่สรุปข่าว AI รายวันที่ทีมอ่านจริง
รับสรุปข่าวพร้อมแหล่ง เพิ่มการพูดคุยของผู้ปฏิบัติบน X ดึงทรานสคริปต์วิดีโอ ประกอบฉบับเป็น Markdown และเก็บใน LiveDoc
เปิดเวิร์กโฟลว์ปรับให้เป็นของคุณ
สูตรเดิม ปรับตามวิธีที่คุณส่งมอบจริง
เฉพาะคำค้นเปรียบเทียบ
จำกัดที่ “X vs Y” และ “X ที่ดีที่สุด” เพื่อเห็นมุมแตกต่างชัดขึ้น
เพิ่มหน้าสินค้าของคุณ
ใส่หน้าสินค้าเป็นแหล่งเพิ่ม เพื่อให้โครงร่างลงบนฟีเจอร์และราคาของคุณ
อัปเดตทุกไตรมาส
รันใหม่ใน LiveDoc เดิมและดูว่าหน้าคู่แข่งกับโครงร่างเปลี่ยนอย่างไร
ไปต่อ
หน้าเอกสารอ้างอิงเบื้องหลังสูตรนี้และก้าวต่อไป