部落格

與文件共用內容處理流程。預設啟用並附有測試文章,替換內容後即可發布。

Saavo 範本已內建部落格列表與文章頁面,並與文件系統共用 Content Collections 管理內容。部落格預設啟用,可以透過 /blog 顯示及瀏覽文章。

如果產品需要部落格,只要替換測試文章,再依支援的語言加入自己的內容即可。部落格採用檔案式內容管理,不需要獨立的 CMS,也沒有提供後台視覺化編輯器。

既有功能

範本初始化後,部落格路由預設已啟用:

功能預設值說明
開關enabled: trueconfig/deploy.ts → content.blog
路由/blog列表,文章路徑為 /blog/:slug
內容目錄/content/blog依語言分成子目錄
草稿狀態status: 'draft'不顯示於列表與 sitemap,但知道 URL 時仍可存取

啟用後會註冊下列路由:

/blog
/blog/:slug

部落格頁面會依目前語言使用不同路徑。預設語言直接使用 /blog,其他語言則使用 /{code}/blog。啟用部落格後,已發布的文章會自動加入 Sitemap。

範本在 content/blog/en、content/blog/zh-Hans 與 content/blog/zh-Hant 中,各提供一篇 000_test-post.mdx,用來驗證列表與文章頁面。正式發布前,應替換或移除這些測試文章。

先體驗部落格

啟動開發伺服器後,開啟 /blog,應能看到預設語言的測試文章,並進入文章頁面。

切換至簡體中文或繁體中文後,也可以檢查對應的測試文章。如果不需要部落格,將 content.blog.enabled 設為 false,重新啟動後就不會再註冊 /blog。

部落格列表

設定部落格

設定位於 config/deploy.ts:

content: {
    blog: {
        enabled: true,
        baseUrl: '/blog',
        contentDir: '/content/blog',
    },
}

需要部落格時:

  1. 保持 enabled: true。
  2. 替換 content/blog/{locale}/ 中的測試文章,新增語言時建立對應目錄。
  3. 撰寫自己的 MDX,並維護對應的 meta.json。
  4. 執行 npm run dev 預覽,必要時執行 npm run gen:collections。

frontmatter 與文件類似,常見欄位包括 title、description,以及選用的 date、dateModified、imageUrl、tags、categories 與 author。status 可以是 draft、published、archived 或 featured。

目前列表只特別處理 draft 與 featured。draft 會被排除,featured 會進入精選區,其他狀態都會進入一般文章列表。因此,archived 目前不會隱藏文章。如果需要下架內容,請移除該文章,或修改列表與文章頁面的篩選邏輯。

文章 URL 只有一段 slug,不支援 /blog/category/post 這類多層路徑。排序前綴規則與文件相同,請參考文件系統。

如果不需要部落格,就停用這項功能,不要為了「以後可能會寫」而保留空白列表。

發布與管理文章

部落格是由內容驅動的頁面,沒有需要在 API 中個別呼叫的業務 service。

營運端需要做的是撰寫 MDX。列表頁會略過 draft,將 featured 顯示於精選區,並讓精選與一般文章分別依 date 由新到舊排列。如果產品頁面需要連到文章,使用已產生的 /blog/:slug 即可。

不要將產品更新記錄直接寫在 React 元件中,再當成部落格。Changelog 有自己的模組,部落格適合用來發布相對獨立的文章。

上線檢查

部落格屬於公開內容,上線前建議至少確認:

  • 不需要部落格時,enabled 已設為 false,無法存取 /blog。
  • 需要部落格時,每個啟用的語言都有內容,或你可以接受該語言缺少頁面。
  • 列表可以開啟,也能透過已發布文章的 slug 直接進入文章。
  • 草稿不會出現在列表與 sitemap,且未對外公開草稿 URL。
  • 沒有誤用 archived 隱藏文章,目前的實作仍會顯示此狀態的文章。
  • 文章標題、說明與封面已換成自己的品牌內容,不再使用占位內容。

修改 enabled 後需要重新建置,因為 collections 會在建置時讀取設定。

常見問題

接下來

依接下來要開發的功能,可以繼續閱讀:

如果暫時沒有內容規劃,可以先停用部落格。

等有文章後再啟用,避免上線後出現空白的部落格頁面。