מחקר
הפכו שאילתת חיפוש לתקציר תוכן SEO
ראו אילו עמודים עונים היום, קראו אותם כ-Markdown, מפו את השאלות שהם מכסים ומפספסים וכתבו תקציר שממנו הכותב יכול לבנות שלד.
העתיקו את הפרומפט
החליפו את השדות בסוגריים מרובעים והדביקו ב-Claude Code, Codex או AI עם גישה לטרמינל. הוא מתקין את סקיל Felo, שואל לפני שריפת קרדיטים ומריץ את תהליך העבודה.
כתוב תקציר תוכן SEO לשאילתה [שאילתת יעד] עבור [מוצר או אתר]. קהל: [קורא]. שוק ושפה: [אזור], [שפה]. זווית: [מדריך / השוואה / עמוד מוצר]. ההחלטה שהוא תומך בה: [מאמר חדש / רענון / סגירת פער]. קרא קודם מה עונה לשאילתה הזו היום, ורק אחר כך בנה מתווה. הפק תקציר ב-Markdown הכולל: 1. שאילתת היעד והכוונה שאתה מסיק, עם הראיות לקריאה הזו. 2. מה העמודים הנוכחיים מכסים: כותרת, URL ופרקי הפתיחה. 3. שאלות שהעמודים הנוכחיים עונים עליהן ושאלות שהם מפספסים. 4. מתווה מוצע עם שורה אחת לכל פרק על מה הוא חייב להוכיח. 5. ראיות ודוגמאות מהמקורות, עם קישורים. 6. רשימת מקורות מלאה. כללים: - אל תטען לנפח חיפוש, קושי מילת מפתח, דירוג או תעבורה. התהליך הזה לא מודד אותם; כתוב „לא נמדד כאן” במקום מספר. - אל תמציא סטטיסטיקות, ציטוטים או טענות על תוכן מתחרים. - תאר כוונה כקריאה של העמודים, לא כעובדה נמדדת. - שמור ציטוטים קצרים, מיוחסים ומקושרים. - המר את האזור והשפה לערכים מפורשים. - לפני שימוש בקרדיטים, הצג את קריאות ה-API המתוכננות והמתן לאישור שלי. - אל תפרסם, תזמן או תשלח דבר. - כתוב את התוצאה ל-./seo-brief.md וסכם אותה בצ׳אט.
ההעתקה כוללת גם שלבי התקנה וכללי בטיחות.
מה מקבלים
פלט לדוגמה של ריצה אחת. לא יצירה חיה.
תקציר SEO — „איך להפוך את מיון התמיכה לאוטומטי”
שאילתת יעד וכוונה
שאילתה: „איך להפוך את מיון התמיכה לאוטומטי”. העמודים שחזרו מתחילים בשלבי יישום, לא בעמודי מוצר, ולכן הכוונה נקראת how-to. זו קריאה של העמודים, לא תווית כוונה מדודה.
מה העמודים הנוכחיים מכסים
| עמוד | 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. כל הערכה מצביעה על עמוד ותאריך מסוימים.
אפשר לטפל בכמה שאילתות?
כן, אבל אחת בכל פעם. חזרו על השלבים לכל שאילתה ושמרו תקצירים נפרדים.
למי השאילתות מתאימות?
מידעיות, השוואתיות ו„איך לעשות”, כי עמודים ציבוריים נותנים אות מספיק. שאילתות רכישה דורשות את נתוני המוצר וההמרה שלכם.
האם הוא כותב את המאמר?
לא. הוא נותן תקציר ושלד; הכתיבה היא של העורך או סוכן הכתיבה שלכם.
כמה עולה ריצה אחת?
Chat והחילוץ צורכים קרדיטים לפי שימוש; התעריפים העדכניים בעמוד המחירים. הפרומפט מבקש אישור לפני הוצאה.
תהליכי עבודה קשורים
הפכו שאלה אחת לתקציר מחקר עם מקורות
שאלו את האינטרנט, שמרו את העמודים שמאחורי התשובה כ-Markdown, הוסיפו מה שמתרגלים אומרים ב-X ושמרו את הראיות ב-LiveDoc שאפשר לחפש בו שוב.
פתח תהליך עבודהתוכןמלאו חודש של תוכן מהשאלות של הקהל שלכם
מפו נושאים עם Chat, מצאו שאלות קהל ב-X, קחו זווית אמיתית מתמלול וידאו והרכיבו לוח ארבעה שבועות שבו כל שורה מציינת את הראיה שלה.
פתח תהליך עבודהתוכןפרסמו סיכום חדשות AI יומי שהצוות באמת קורא
קבלו סיכום עם מקורות, הוסיפו דיוני מתרגלים ב-X, קחו תמלול וידאו, הרכיבו מהדורה ב-Markdown וארכבו ב-LiveDoc.
פתח תהליך עבודההתאימו
אותו מתכון, מותאם לאיך שאתם באמת מספקים.
רק שאילתות השוואה
הגבילו ל„X מול Y” ו„X הטוב ביותר” כדי לראות טוב יותר את זווית הבידול.
הוסיפו את עמוד המוצר שלכם
הוסיפו את עמוד המוצר כמקור נוסף כדי שהשלד ינחת על התכונות והמחירים שלכם.
עדכנו כל רבעון
הריצו שוב באותו LiveDoc וראו איך משתנים עמודי המתחרים והשלד.
המשיכו
עמודי העזר שמאחורי המתכון והשלבים הבאים.