我在過去四年內使用過這三個CMS構建生產項目。有些是全新開發,有些是從WordPress或正在瓦解的舊系統遷移過來的。每當客戶問我「我們應該使用哪個無頭CMS?」時,我都會抗拒給出一刀切的答案——但在2025年及至2026年期間運送了數十個項目後,我有基於真實經驗備受折磨而得出的強烈看法。

本文從在構建真實項目時實際重要的各個維度分析Contentful、Sanity和Payload CMS:大規模定價、開發人員實戰體驗、內容建模靈活性、API設計,以及您的內容團隊會喜歡或討厭的日常編輯工作流。

目錄

Contentful vs Sanity vs Payload:2026年無頭CMS比較

30秒概述

Contentful是現任者。它自2013年以來就已存在,為企業級站點大規模提供服務。它精拋、可靠且昂貴。

Sanity是開發人員的寵兒,具有實時、結構化內容方法和可自訂的studio。它功能強大,但學習曲線陡峭,定價模式可能令人驚訝。

Payload是無聲地成為認真競爭者的新興者。它是開源的、默認自託管(現在有雲選項)、用TypeScript編寫,且不收取許可費。在2025年,Payload 3.0發佈,在Next.js之上完全重寫,這完全改變了方程式。

特性 Contentful Sanity Payload
類型 SaaS SaaS(自託管studio) 開源/自託管
語言 N/A(僅API) JavaScript/React TypeScript/Next.js
許可費 是(基於使用) 無(MIT)
GraphQL 是(優選GROQ) 是(自動生成)
REST API 是(自動生成)
實時協作 受限 出色 良好(2.0+)
自託管 僅Studio 完整堆棧
數據庫 專有 專有 MongoDB或Postgres

定價明細:您實際支付的費用

這是事情變得真實的地方。定價是我看到的團隊在項目中期切換CMS的第一原因,也是人們在評估期間低估最多的東西。

Contentful定價(2026年)

Contentful的免費層給您1個space、5個用戶和25K個API調用。這對博客來說還不錯。

基本計畫起價300美元/月,為您提供更多環境和角色。高級計畫——這是大多數認真團隊需要的——是自訂價格,但通常對中型組織起價約2,000-3,000美元/月。我見過北端企業合同達80K美元/年。

關鍵是:API調用超額費用。Contentful單獨為內容交付API調用、內容管理API調用和資產帶寬收費。在進行10M+頁面瀏覽量/月的高流量站點上,您可以輕鬆超過包含配額。我與之共事的一位客戶在病毒式產品推出後看到他們的月度賬單從2,500美元跳至4,800美元,原因是他們未預見的CDN和API超額費用。

Sanity定價(2026年)

Sanity使用基於使用的模式,他們稱之為「隨增長付費」。免費計畫包括3個非管理員用戶、500K個API請求、20GB帶寬和10GB存儲。對於入門來說很慷慨。

增長計畫15美元/用戶/月加上使用超額。企業計畫是自訂價格。

Sanity定價中咬人的地方是這樣的:GROQ查詢和API CDN請求是計量的,成本根據您的內容複雜性而縮放。單個GROQ查詢提取深層嵌套的、引用的內容可能消耗比您預期更多的配額。Sanity在這方面改進了透明度,但我仍然建議團隊及早設置預算警報。

典型的中型項目成本:200-800美元/月取決於團隊規模和流量。

Payload定價(2026年)

Payload是MIT許可。CMS本身花費0美元。永遠。沒有每座費用、沒有API調用計量、沒有來自Payload的帶寬費用。

您的成本是基礎設施:託管Node.js應用和數據庫。在Railway、Render或基本AWS/DigitalOcean設置等服務上,大多數項目您查看20-100美元/月。即使是大規模部署,在AWS RDS上帶託管Postgres、合適大小的EC2或ECS以及CloudFront前置,也很少超過300-500美元/月——這是針對認真的流量。

Payload Cloud(他們的託管產品)起價50美元/月,計畫根據存儲和帶寬縮放,但它完全是可選的。

場景 Contentful Sanity Payload(自託管)
獨立開發者,小型站點 0美元(免費層) 0美元(免費層) 20-40美元/月(託管)
5人團隊,中等流量 300-500美元/月 200-400美元/月 50-100美元/月(託管)
10人團隊,高流量 2,000-4,000美元/月 500-1,500美元/月 150-400美元/月(託管)
企業,50+名編輯 5,000-10,000美元+/月 2,000-5,000美元/月 300-800美元/月(託管)

定價故事是明確的。Payload在每個層級都贏得了。

開發人員體驗

定價讓人上門。開發人員體驗讓他們留下來——或者驅使他們離開。

Contentful DX

Contentful的開發人員體驗...還不錯。他們的SDK支持廣泛(JavaScript、Python、Ruby、Java、Swift等),文檔成熟,REST和GraphQL API文檔完善。

但這是讓我沮喪的地方:所有東西都通過Web UI配置。內容類型、字段、驗證——在瀏覽器中全部點擊點擊點擊。是的,您可以使用Contentful CLI和遷移腳本對您的模式進行版本控制,但它感覺是栓上去的。它不是代碼優先;它是UI優先,帶有代碼逃脫門。

遷移工具隨著他們的contentful-migration包已有改進,但與在TypeScript中定義您的模式並獲得即時類型安全相比?它感覺落後了一代。

Sanity DX

Sanity的開發人員體驗在許多方面都是真正優秀的。模式在JavaScript/TypeScript文件中定義。Studio是您可以廣泛自訂的React應用——自訂輸入組件、自訂視圖、工作流插件。

GROQ是他們的查詢語言,一旦學習就功能強大。但「一旦學習」在該句中負擔繁重。GROQ不是SQL。它不是GraphQL。它是自己的東西,您的團隊中的每個新開發人員都需要學習它。我見過初級開發人員與GROQ投影掙扎數周。

// GROQ查詢 - 功能強大但獨特的語法
*[_type == "post" && publishedAt < now()] | order(publishedAt desc) [0...10] {
  title,
  slug,
  "author": author->{ name, image },
  "categories": categories[]->{ title, slug },
  body[] {
    ...,
    _type == "image" => {
      "url": asset->url
    }
  }
}

Sanity的實時功能令人驚嘆。多個編輯在同一文檔上工作,具有存在指示器和無保存衝突——它就是有效。內容湖架構以競爭者無法匹配的方式實現了這一點。

Payload DX

Payload 3.0改變了一切。構建在Next.js上,完全用TypeScript編寫,您的配置文件作為單一事實來源。您在代碼中定義集合、字段、鉤子、訪問控制和自訂端點。

這是典型的Payload集合的樣子:

import { CollectionConfig } from 'payload'

export const Posts: CollectionConfig = {
  slug: 'posts',
  admin: {
    useAsTitle: 'title',
    defaultColumns: ['title', 'status', 'publishedAt'],
  },
  access: {
    read: () => true,
    create: ({ req: { user } }) => Boolean(user),
    update: ({ req: { user } }) => Boolean(user),
    delete: ({ req: { user } }) => user?.role === 'admin',
  },
  fields: [
    {
      name: 'title',
      type: 'text',
      required: true,
    },
    {
      name: 'content',
      type: 'richText',
    },
    {
      name: 'author',
      type: 'relationship',
      relationTo: 'users',
    },
    {
      name: 'status',
      type: 'select',
      options: ['draft', 'published'],
      defaultValue: 'draft',
    },
    {
      name: 'publishedAt',
      type: 'date',
      admin: {
        position: 'sidebar',
      },
    },
  ],
  hooks: {
    beforeChange: [
      ({ data, operation }) => {
        if (operation === 'create') {
          data.publishedAt = new Date()
        }
        return data
      },
    ],
  },
}

所有東西都是類型化的。您的IDE自動完成字段名稱。鉤子為您提供生命週期控制。訪問控制定義為與您的字段相鄰的函數,而不是某個單獨的權限UI。因為它只是一個Next.js應用,您可以添加自訂頁面、API路由或服務器操作與您的CMS代碼一起。

對於進行Next.js開發的團隊,Payload 3.0是從DX角度看的明確選擇。您的CMS和前端住在同一項目中。相同的部署。相同的回購。

Contentful vs Sanity vs Payload:2026年無頭CMS比較 - 架構

內容建模

內容建模是您要麼為自己設置成功,要麼創建多年將與之生活的噩夢的地方。

Contentful的方法

Contentful使用傳統的內容類型→條目模型。您使用字段定義內容類型,編輯者創建條目。內容類型之間的引用是明確的。它適用於直接的內容結構。

限制出現在富文本中。Contentful的富文本字段將內容存儲為結構化JSON樹,這對於渲染靈活性很好,但使用嵌入條目和引用建模複雜頁面佈局需要創意使用。它可能變得繁瑣。

Contentful在基本計畫上支持50個內容類型,在高級上支持100多個。對於具有許多內容類型的大型站點,這可能成為約束。

Sanity的方法

Sanity的內容建模可能是三者中最靈活的。他們的塊內容(Portable Text)是一個富文本開放規範,將內容存儲為結構化數據。您可以定義自訂塊類型、內聯對象和註釋。

模式系統支持深層嵌套的對象類型、條件字段和自訂驗證。我在Sanity中構建了一些非常複雜的內容模型,在Contentful中會很痛苦。

// 帶Portable Text自訂的Sanity模式
export default {
  name: 'post',
  type: 'document',
  fields: [
    {
      name: 'body',
      type: 'array',
      of: [
        { type: 'block',
          marks: {
            annotations: [
              { name: 'internalLink', type: 'object',
                fields: [{ name: 'reference', type: 'reference', to: [{ type: 'post' }] }]
              }
            ]
          }
        },
        { type: 'image', options: { hotspot: true } },
        { type: 'codeBlock' },
        { type: 'callout' },
      ]
    }
  ]
}

Payload的方法

Payload的內容建模位於Contentful的結構化簡單性和Sanity自由形式靈活性之間的某處——但完全在TypeScript中的優勢。

Payload的塊字段對於頁面構建特別強大。您定義塊類型,每個都帶有自己的字段,編輯者可以從這些塊組合頁面。與佈局字段類型和條件邏輯相結合,您幾乎可以建模任何東西。

Payload 3.0的Lexical富文本編輯器是一個傑出之作。它用現代編輯器替換了Slate(不錯但陳舊),支持自訂節點、內聯塊和開箱即用的服務器端渲染。您可以直接在富文本內容中嵌入React組件。

版本控制系統值得一提。Payload為您提供草稿/發佈工作流和帶有差分的完整文檔版本歷史。這是內置的,不是付費附加功能。

API:REST、GraphQL和介於兩者之間的一切

Contentful API

Contentful為交付(CDN緩存、只讀)、預覽(非緩存、草稿內容)、管理(CRUD)和圖像提供單獨的API。分離是合理的,但意味著您在進行多個API令牌和基本URL。

他們的GraphQL API是穩固的,但有深度限制和速率限制,在建模深層引用內容時可能令人沮喪。複雜查詢可能需要多次往返。

Sanity API

Sanity的主要查詢語言是GROQ,通過HTTP服務。他們確實提供GraphQL API,但它是單獨部署的,感覺像是二等公民。對於大多數Sanity用例,GROQ無論如何都更強大。

真正的魔力是Sanity的實時監聽器API。您可以訂閱任何查詢上的更改並獲得即時更新。這支持真正令人印象深刻的實時預覽體驗。

Payload API

Payload從您的集合配置自動生成REST和GraphQL API。無需額外設置。定義一個集合,立即為兩個REST和GraphQL獲得完整的CRUD端點。

# 自動生成的GraphQL查詢
query {
  Posts(where: { status: { equals: published } }, sort: "-publishedAt", limit: 10) {
    docs {
      id
      title
      content
      author {
        name
      }
      publishedAt
    }
    totalDocs
    hasNextPage
  }
}

但這是Payload有獨特優勢的地方:因為它在與Next.js應用相同的進程中運行,您可以跳過API並使用Payload的本地API進行服務器端數據獲取。直接數據庫查詢,具有相同的訪問控制、鉤子和驗證——但零HTTP開銷。

// 本地API - 無HTTP、無序列化開銷
const posts = await payload.find({
  collection: 'posts',
  where: { status: { equals: 'published' } },
  sort: '-publishedAt',
  limit: 10,
})

這對服務器渲染頁面是一個巨大的性能勝利。沒有到CMS API的網絡往返。只是一個函數調用。

編輯體驗

開發人員選擇CMS,但編輯每天住在其中。忽視他們的體驗會造成風險。

Contentful具有最成熟的編輯UI。它乾淨、可預測,您的非技術團隊將快速拿起它。高級計畫中的調度、工作流和批准鏈是穩固的。但是,它可能感到僵硬——自訂編輯界面需要構建Contentful應用,這是一個完全單獨的React應用。

Sanity Studio是最可自訂的。您可以構建完全定制的編輯體驗。但該自訂擁有成本:開箱即用,Sanity Studio對非技術編輯來說可能感到不知所措。結構構建器需要開發人員時間來配置得很好。

Payload的管理面板在3.0中大幅改進。它乾淨、快速(它是一個Next.js應用)、支持自訂組件、條件字段渲染和實時預覽。它不如Contentful的UI那麼拋光,但它比Contentful更可自訂,費力較少,比Sanity對編輯更容易接近。

自託管與SaaS:真實的權衡

這是哲學分歧。Contentful和Sanity是SaaS平台。您不管理基礎設施;您支付他們來做它。Payload默認是自託管的。

SaaS論證:更少的運維開銷、內置CDN、託管正常運行時間。這些是真實的好處,特別是對於沒有DevOps經驗的小團隊。

自託管論證:數據所有權、無供應商鎖定、可預測成本、法規合規(GDPR、HIPAA、數據駐留),以及自由自訂任何東西。

對於進行無頭CMS開發的機構,如我們的,自託管已成為2026年大多數客戶的建議。基礎設施工具已成熟到在Railway、Vercel或AWS上部署Payload應用很簡單。Docker使其可重現。成本節省相對於SaaS CMS在年復年複合。

如果您關心運維負擔,Payload Cloud為您處理託管,同時保持開源優勢。

性能和可擴展性

Contentful的CDN支持交付API是快速的。典型的響應時間是邊緣節點的50-100毫秒。它已在大規模上經過十年戰鬥測試。

Sanity的CDN API為緩存內容提供類似的性能,其實時層為實時查詢添加大約20-30毫秒。

Payload的性能取決於您的基礎設施,但這是事情——當您與Next.js服務器組件使用本地API時,您對本地數據庫進行函數調用。響應時間可以在10毫秒以下。在您的Next.js輸出前添加CDN(Vercel、CloudFront等),您匹配或擊敗SaaS選項。

對於基於Astro的項目,所有三個都用作API源,但Payload的REST和GraphQL API在Astro的數據獲取層中特別容易使用。

生態系統和社區

Contentful擁有最大的企業生態系統。大量集成、應用市場和廣泛的機構支持。

Sanity擁有充滿激情的開發人員社區、優秀文檔和不斷增長的插件生態系統。他們的社區Slack真正有幫助。

Payload擁有三者中增長最快的社區。他們的Discord非常活躍,核心團隊定期回應問題。插件生態系統更小,但增長迅速——因為Payload只是Node.js/TypeScript,您可以npm安裝任何需要的東西。

Payload的GitHub在2026年初有超過30K星標,軌跡陡峭。

最終判決

我會直接說:Payload是2026年大多數項目的最佳無頭CMS。

原因如下:

  1. 在任何規模下零許可費。您的50編輯企業團隊不向Payload支付一分錢。
  2. TypeScript原生配置意味著您的內容模型是代碼、版本控制的、類型安全的和可在PR中審查的。
  3. 本地API + Next.js集成為您提供SaaS CMS在物理上無法比較的性能。
  4. 數據所有權——您的內容住在您的數據庫中,而不是其他人的專有存儲中。
  5. 無供應商鎖定——如果您想切換,您的數據在Postgres或MongoDB中。只需查詢它。

還有其他人贏的場景:

  • 選擇Contentful如果您是具有成熟內容團隊的大型企業,需要拋光、零運維編輯體驗,並有預算。
  • 選擇Sanity如果實時協作對您的工作流至關重要,您需要Portable Text無與倫比的結構化富文本,或您正在構建高度自訂的studio體驗。
  • 為所有其他情況選擇Payload。初創公司、機構、中端市場公司、開發人員主導的團隊、需要數據控制的受管制行業,以及任何不想在驚喜賬單前醒來的人。

如果您為新項目評估無頭CMS並想根據具體情況進行討論,我們很樂意幫助。我們已運送生產Payload、Sanity和Contentful項目,並可以根據您的實際需求和預算給您誠實的建議。

常見問題

Payload CMS真的免費嗎? 是的。Payload是MIT許可的開源軟體。沒有許可費、沒有每用戶費用、沒有來自Payload的API調用限制。您唯一的成本是託管基礎設施(服務器和數據庫),這通常根據規模運行20-500美元/月。如果您不想管理基礎設施,Payload Cloud可作為付費託管選項。

Sanity可以自託管嗎? 部分地。Sanity Studio(管理UI)是您可以在任何地方部署的React應用。但是,內容湖——您的實際數據住的地方——是由Sanity管理的託管服務。您無法自託管數據層。這意味著您的內容始終住在Sanity的基礎設施上,這可能對數據駐留或合規要求是一個問題。

哪個無頭CMS具有最好的GraphQL支持? Contentful和Payload都提供強大的GraphQL API。Payload直接從您的集合配置自動生成其GraphQL模式,這意味著零手動模式維護。Contentful的GraphQL API是成熟且文檔完善的。Sanity提供GraphQL但優選GROQ作為其主要查詢語言,其GraphQL實現不支持所有GROQ功能。

Contentful在2026年值得價格嗎? 對於具有複雜內容操作、現有Contentful工作流和重視動手不管方法的大型企業——是的,它可能值得。對於小型到中型團隊,成本在Payload提供比較(在某些方面優越)功能,價格只是幾分之一時變得越來越難以證明。我們已看到多個客戶特別因為成本而遷移離開Contentful。

Payload CMS如何處理圖像優化? Payload具有內置的圖像調整大小和焦點裁剪。上傳圖像時,Payload可根據您的配置自動生成多種大小。在Payload 3.0與Next.js中,您可以將其與Next.js圖像優化組合以進行響應式、WebP/AVIF服務。它不如Contentful的圖像API功能豐富(提供基於URL的轉換),但它涵蓋90%的用例而無需第三方服務。

我可以從Contentful遷移到Payload嗎? 是的。由於Payload使用標準數據庫(Postgres或MongoDB),遷移涉及通過其管理API導出您的Contentful內容並將其導入到Payload集合。從Contentful內容類型到Payload集合的內容建模轉換通常很簡單。我們已處理多個此類遷移——最複雜的部分通常是富文本轉換,而不是結構化數據。

對於非技術編輯來說,哪個CMS最好? Contentful對非技術用戶具有最直觀的開箱即用編輯體驗。Payload的管理面板是接近第二位的,並迅速改進。Sanity Studio可以是三者中最好的,如果開發人員投入時間定制它,但默認體驗對編輯有更陡峭的學習曲線。

Payload CMS適用於Next.js以外的框架嗎? 絕對地。雖然Payload 3.0使用Next.js作為其管理UI框架,但REST和GraphQL API與任何前端一起工作——Astro、Nuxt、SvelteKit、Remix,甚至移動應用。本地API是Next.js特定的,但外部API沒有框架依賴。我們定期根據項目要求將Payload與Next.js和Astro配對。