תשובה קצרה: מודל תוכן ב-Headless CMS הוא תיאור של התוכן כרשומות מוגדרות שאפשר לעשות בהן שימוש חוזר (מאמר, כותב, מוצר, סניף), עם שדות וקישורים ביניהן, כשהעיצוב של העמוד נשאר באחריות החזית. ממדלים את מה שהעסק מדבר עליו, מחליטים מוקדם אילו שדות מתורגמים לעברית ואילו משותפים, ואז אותו תוכן משרת את האתר, את האפליקציה ואת מנועי התשובות של AI.
עיקרי הדברים
- סוגי תוכן מחזיקים רשומות: ב-Strapi, Collection Type מנהל רשומות רבות ו-Single Type מנהל רשומה אחת בלבד, כמו הגדרות האתר.
- קומפוננטות הן קבוצות שדות: הן לא קיימות בפני עצמן, וה-Dynamic Zones של Strapi מאפשרים לעורכים לסדר אותן בכל סדר.
- תרגום הוא החלטת מידול: ב-Payload וב-Contentful מתרגמים ברמת השדה, ו-Sanity מתעדת גם תרגום ברמת השדה וגם ברמת המסמך.
- המבנה עובר לחיפוש: שדות מסודרים מקלים להפיק תגי hreflang, נתונים מובנים וטקסט נקי שמערכות AI יכולות לצטט.
סוגי תוכן, קומפוננטות וקישורים
מתחילים משמות עצם ולא מעמודים. רושמים מה העסק מפרסם: שירותים, תיקי עבודות, אנשי צוות, סניפים, מאמרים. כל אחד מהם הופך לסוג תוכן עם שדות מוגדרים וכללי ולידציה. קבוצת שדות שחוזרת בכמה סוגים, למשל בלוק SEO עם כותרת, תיאור ותמונת שיתוף, הופכת לקומפוננטה. ה-Content-type Builder של Strapi מגדיר את שלושתם, ול-Sanity, Contentful ו-Payload יש מקבילות בשמות אחרים.
הקישורים מחברים בין הרשומות. מאמר מפנה לכותב ולשירותים הקשורים אליו. את השם והתמונה של הכותב הוא לא מעתיק לשדות שלו. משנים את הכותב פעם אחת וכל העמודים מתעדכנים.
תרגום לעברית ולאנגלית
מחליטים לכל שדה אם הוא מתורגם. כותרות, גוף הטקסט וה-slug תלויים בשפה; מחירים, תאריכים ומק״טים בדרך כלל לא. ב-Payload מסמנים שדה ב-localized: true, וכשחסר ערך הוא נלקח משפת ברירת המחדל. Contentful מתרגמת ברמת השדה כברירת מחדל. המדריך של Sanity מסביר את הפשרה: ברמת השדה כל השפות במסמך אחד ומתפרסמות יחד, וברמת המסמך כל שפה עולה בזמן שלה. ב-Strapi מפעילים תרגום לכל סוג תוכן ולכל שדה.