在过去四年里,我用这三种CMS构建过生产项目。有的是绿地项目,有的是从WordPress或即将崩溃的遗留系统迁移而来。每当客户问我"我们应该使用哪个无头CMS?"时,我都会抗拒给出一刀切的答案——但在2025年至2026年交付了数十个项目后,我有了真实的、经验血泪换来的强烈观点。

本文从实际重要的维度对比了Contentful、Sanity和Payload CMS:规模化定价、实战中的开发体验、内容建模灵活性、API设计,以及你的内容团队每天都要使用的编辑工作流。

目录

Contentful vs Sanity vs Payload:无头CMS对比 2026

30秒快速概览

Contentful是现任者。自2013年以来就存在,支撑着企业规模的网站。成熟、可靠、但价格昂贵。

Sanity是开发者的宠儿,具有实时、结构化内容方法和可定制的Studio。功能强大但学习曲线陡峭,定价模式可能会给你惊喜。

Payload是悄悄成为强有力竞争者的后起之秀。它是开源的、默认自托管(现在也有云选项)、用TypeScript编写,零许可费。2025年,Payload 3.0在Next.js基础上完全重写发布,彻底改变了格局。

功能 Contentful Sanity Payload
类型 SaaS SaaS(自托管Studio) 开源/自托管
语言 无(仅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的开发者体验

Contentful的开发者体验……还不错。他们的SDK支持广泛(JavaScript、Python、Ruby、Java、Swift等),文档成熟,REST和GraphQL API记录良好。

但让我沮丧的是:一切都通过网页UI配置。内容类型、字段、验证——全是浏览器中的点击。没错,你可以使用Contentful CLI和迁移脚本来版本控制你的schema,但感觉像是后来才加上去的。这不是代码优先的;这是UI优先的,代码是逃生舱。

迁移工具通过他们的contentful-migration包有所改进,但与在TypeScript中定义schema并获得即时类型安全相比?感觉落后了一代。

Sanity的开发者体验

Sanity的开发者体验在许多方面真的很出色。schema在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的开发者体验

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是一个显而易见的选择。你的CMS和前端住在同一个项目中。相同的部署。同一个仓库。

Contentful vs Sanity vs Payload:无头CMS对比 2026 - 架构

内容建模

内容建模决定了你是为成功做准备还是为多年的噩梦做准备。

Contentful的方法

Contentful使用传统的内容类型→条目模型。你用字段定义内容类型,编辑创建条目。内容类型之间的引用是显式的。它对直接的内容结构运作良好。

局限出现在富文本中。Contentful的富文本字段将内容存储为结构化JSON树,这对渲染灵活性很好,但为嵌套组件建模复杂页面布局需要创意使用嵌入式条目和引用。它可能变得很烦人。

Contentful在基础计划中支持50个内容类型,在高级计划上支持100+。对于有许多内容类型的大型网站,这可能成为限制。

Sanity的方法

Sanity的内容建模可以说是三者中最灵活的。他们的块内容(Portable Text)是富文本的开放规范,将内容存储为结构化数据。你可以定义自定义块类型、内联对象和注解。

schema系统支持深度嵌套对象类型、条件字段和自定义验证。我在Sanity中构建过一些真正复杂的内容模型,在Contentful中会很痛苦。

// 带有Portable Text自定义的Sanity schema
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为你提供草稿/发布工作流和完整文档版本历史,带有diffing。这是内置的,不是付费附加组件。

API:REST、GraphQL及其他

Contentful API

Contentful提供独立的API用于交付(CDN缓存、只读)、预览(非缓存、草稿内容)、管理(CRUD)和图像。分离是合理的,但意味着你在应对多个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。

自托管 vs 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-100ms。它已在规模上经过十年的战场考验。

Sanity的CDN API为缓存内容提供类似性能,实时层为实时查询增加了大约20-30ms。

Payload的性能取决于你的基础设施,但这是关键——当你用Next.js服务器组件使用本地API时,你在对本地数据库进行函数调用。响应时间可以低于10ms。在你的Next.js输出前加上CDN(Vercel、CloudFront等),你在匹配或击败SaaS选项。

对于基于Astro的项目,全部三个都作为API源运作良好,但Payload的REST和GraphQL API特别直接在Astro的数据获取层中消费。

生态与社区

Contentful拥有最大的企业生态。大量集成、应用市场和广泛的机构支持。

Sanity拥有充满激情的开发者社区、优秀的文档和不断增长的插件生态。他们的社区Slack真正有帮助。

Payload拥有三者中增长最快的社区。他们的Discord非常活跃,核心团队定期回答问题。插件生态较小但增长迅速——因为Payload只是Node.js/TypeScript,你可以npm install任何你需要的东西。

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 schema,这意味着零手动schema维护。Contentful的GraphQL API成熟、文档良好。Sanity提供GraphQL但偏好GROQ作为其主要查询语言,他们的GraphQL实现不支持所有GROQ特性。

2026年Contentful值这个价吗? 对于有复杂内容操作、现有Contentful工作流和重视不操心SaaS方法的大企业——是的,它可能值得。对于小到中等规模的团队,当Payload以一小部分价格提供相当(在某些方面优越)的功能时,这成本很难证明。我们看到多个客户特别因为成本从Contentful迁移走。

Payload CMS如何处理图像优化? Payload有内置图像调整和焦点裁剪。当你上传图像时,Payload可以基于你的配置自动生成多个尺寸。在Payload 3.0与Next.js中,你可以将其与Next.js Image优化组合,用于响应式、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配对。