# PayloadCMS Implementation Plan: FAQ & Keywords Fields > **目的**:在 `~/Dev/website-ricenoodletw-cms/` 專案中新增 `faq` 和 `keywords` 欄位 > > **這份文件供另一個 Agent 在 CMS workspace 中執行** --- ## 概述 在 PayloadCMS 的 `posts` collection 新增兩個欄位,讓每篇文章可以有獨立的 FAQ 和關鍵字,前端會自動產生對應的 JSON-LD 結構化資料。 --- ## 步驟 1:找到 Posts Collection 設定檔 找到 `posts` collection 的設定檔,通常在: - `src/collections/Posts.ts` - `src/collections/posts.ts` - `collections/Posts.ts` --- ## 步驟 2:新增 FAQ 欄位 在 `fields` 陣列中新增: ```typescript { name: 'faq', type: 'array', label: '文章專屬 FAQ', admin: { description: '為這篇文章新增 FAQ,將自動產生 FAQPage JSON-LD 結構化資料,有助於 SEO 和 Perplexity 引用', condition: (data) => data?.status === 'published' || true, // 可選:條件顯示 }, fields: [ { name: 'question', type: 'text', label: '問題', required: true, admin: { placeholder: '例如:榕樹下米苔目為什麼有兩家?', }, }, { name: 'answer', type: 'textarea', label: '答案', required: true, admin: { placeholder: '提供完整且有引用價值的答案...', }, }, ], }, ``` --- ## 步驟 3:新增 Keywords 欄位 在 `fields` 陣列中新增: ```typescript { name: 'keywords', type: 'array', label: 'SEO 關鍵字', admin: { description: '文章關鍵字標籤,用於 JSON-LD 結構化資料', }, fields: [ { name: 'keyword', type: 'text', label: '關鍵字', required: true, admin: { placeholder: '例如:台東美食', }, }, ], }, ``` --- ## 步驟 4:完整範例 以下是完整的欄位定義,可直接複製貼上: ```typescript // 加在 Posts collection 的 fields 陣列中 // 建議放在 content 欄位之後,meta 欄位之前 // FAQ 欄位 { name: 'faq', type: 'array', label: '文章專屬 FAQ', admin: { description: '每題 FAQ 會自動產生 FAQPage JSON-LD,有助於 Perplexity 等 AI 搜尋引擎引用', }, fields: [ { name: 'question', type: 'text', label: '問題', required: true, }, { name: 'answer', type: 'textarea', label: '答案', required: true, }, ], }, // Keywords 欄位 { name: 'keywords', type: 'array', label: 'SEO 關鍵字', admin: { description: '用於 Article schema 的 keywords 屬性', }, fields: [ { name: 'keyword', type: 'text', label: '關鍵字', required: true, }, ], }, ``` --- ## 步驟 5:資料庫遷移 修改 collection 後,根據你的設定: ### 如果使用 MongoDB 通常不需要額外遷移,新欄位會自動可用。 ### 如果使用 Postgres/SQLite 可能需要執行: ```bash npm run payload migrate:create npm run payload migrate ``` --- ## 步驟 6:驗證 1. 重啟 CMS 開發伺服器 2. 進入後台編輯任一文章 3. 確認看到「文章專屬 FAQ」和「SEO 關鍵字」欄位 4. 新增測試資料並儲存 5. 透過 API 確認資料正確回傳: ``` GET /api/posts?limit=1&depth=1 ``` --- ## API 回傳格式 新增欄位後,API 會回傳: ```json { "id": "...", "title": "文章標題", "faq": [ { "question": "問題一", "answer": "答案一" }, { "question": "問題二", "answer": "答案二" } ], "keywords": [ { "keyword": "台東美食" }, { "keyword": "米苔目" } ] } ``` --- ## 相關文件 - 前端 TypeScript 型別需同步更新:`src/types/blog.ts` - 前端 JSON-LD 產生邏輯:`src/pages/[category]/[slug].astro`