用统一内容模型同时服务浏览器和AI Agent
Walden Robotics网站用Prismic建模19个内容组件,同时输出HTML给用户和Markdown给AI爬虫,实现内容一次管理多端分发,并提供了发现端点供自动化系统查询。
完整中文译文
Walden Robotics 网站使用了 19 个可复用内容组件,并为自动化客户端发布了 6 个发现面(discovery surface)。两者都始于同一个架构决策:内容只建模一次,然后以每种客户端所需的形式进行分发。
我们使用 Prismic 和 Next.js App Router 构建了这个平台。编辑从结构化组件中组装页面,访问者收到生成的 HTML,而偏好结构化文本的客户端可以请求 Markdown。发现端点告诉自动化系统在哪里可以找到 API、授权元数据、Agent 文档和新闻内容。

这种架构将内容建模、分发和发现连接在一起。HTML 和 Markdown 仍然绑定到同一条记录,而发现层则标识出可供自动化客户端使用的资源。
在分发格式之前先构建内容模型
Walden Robotics 网站上的每个页面都是从 Prismic 中的结构化内容组装而成的。我们创建了 19 个 Slice Machine 组件,覆盖英雄区域(hero sections)、行动号召(calls to action)、潜在客户表单、内容块、导航、公告和支持性布局。
Slice 定义了编辑可控制的字段,而应用程序控制这些字段的渲染方式。编辑可以将各个区块组合成新页面,而无需更改组件代码。开发者保留对渲染、可访问性、搜索优化和视觉一致性的控制权。
平台还将页面内容与共享记录分离。导航、页脚内容、SEO 默认值和全局公告各自拥有一个单一事实来源。在 Prismic 中对全局公告进行一次更改,就会反映在应用程序渲染该记录的任何地方。
这种区分赋予内容模型清晰的所有权:
页面内容:编辑在单个页面内排列的各个区块。
全局内容:跨路由共享的导航、默认值和公告。
行为配置:影响应用程序行为的表单定义和消息。
这些类别可以共存于同一个 CMS 中,但它们并不承载相同的风险。更改标题影响呈现。更改验证规则影响应用程序接受输入的方式。
将发布和性能保持在同一工作流中
网站使用 Next.js App Router,配合静态生成、缓存和在 Prismic 中内容变化时自动重新验证。访问者收到生成的页面,而编辑可以在不请求手动重建的情况下发布更新。
Draft Mode 为未发布的工作提供了一条独立的路径。授权编辑可以在发布前预览页面,而无需更改公共流量的服务方式。预览仍是一种编辑状态,公共站点保持静态分发的性能特征。

静态生成使缓存新鲜度成为发布的明确部分。平台将 Prismic 内容更改连接到重新验证,因此编辑在 CMS 中工作时,应用程序会更新其生成的输出。
将 CMS 配置的表单视为不可信输入
Walden 的营销团队在 Prismic 中定义表单,包括字段类型、验证规则、占位符文本和成功消息。同一系统支持联系表单、活动落地页和促销体验。
一旦 CMS 数据控制了应用程序行为,浏览器就成为了不可信的边界。浏览器验证改善了用户体验,但用户或脚本可以在提交前修改请求。平台在表单到达浏览器之前使用 HMAC 对每个表单字段定义进行签名,并在服务器上验证提交的数据。
HMAC,即基于哈希的消息认证码,使用密钥为消息生成签名。服务器可以重新计算该签名,以确定字段定义在发出后是否被更改。HMAC 验证完整性和真实性;但它不会加密定义。
表单管道也仅接受来自已批准的 Basin 端点的请求。蜜罐字段(honeypot fields)、请求超时和重定向控制为防止自动化滥用和恶意请求提供了额外保护。每种控制措施针对一种独立的故障模式。

可复用模式是围绕行为配置的信任边界:
签名跨不可信客户端的配置。
在服务器上再次验证提交的数据。
限制可能接收请求的服务和目标。
用超时和重定向控制绑定外部交互。
将滥用检测与验证和端点限制相结合。
编辑灵活性扩展了营销团队可以配置的范围;服务器端强制执行将这种灵活性保持在定义的限制内。
将运营数据保留在其操作系统中
同一所有权原则适用于职位列表。可用职位来自 Rippling 的公开申请人跟踪系统,招聘人员已经在其中管理职位开放。 Careers 部分保持最新状态,无需营销或工程团队将每个职位复制到 Prismic 中。

Prismic 仍然是这些列表周围编辑体验的权威来源。Rippling 仍然是招聘数据的权威来源。Next.js 在渲染页面中组合这两个来源,保留了对每种信息类型负责的团队的工作流程。
从同一记录中提供 HTML 和 Markdown
平台支持 HTTP 内容协商,允许客户端在结构化文本优于 HTML 时请求 Markdown。新闻文章、CMS 页面和支持性内容也可以通过熟悉的 .md URL 获取。
HTTP 内容协商允许客户端和服务器选择资源的表示形式。在 Walden 的平台上,人类访问者可以接收完整的网站体验,而自动化客户端可以接收从相同底层内容生成的 Markdown。
Markdown 不替代 HTML。HTML 携带文档语义、链接、界面行为和浏览器呈现。Markdown 为主要需要标题、段落和列表的客户端提供内容的直接表示。从 Prismic 生成两者避免第二个编辑仓库,并使表示形式绑定到相同的权威来源记录。
自动化客户端如何找到内容?
如果软件必须猜测内容所在位置,干净的表示形式价值有限。Walden 的平台发布了 6 个发现面:
/.well-known/api-catalog
/.well-known/mcp/server-card.json
/.well-known/agent-skills/
/.well-known/oauth-authorization-server
sitemap.md with Link headers
/api/news/articles with an OpenAPI 3.1 description
发现和表示解决不同的问题。Markdown 以自动化客户端可以处理的形式提供内容。目录、描述和 Link 头帮助该客户端找到可用资源并了解如何使用它们。
/.well-known/ 前缀有特定作用。RFC 8615 将其定义为已注册 well-known 位置的路径前缀。Walden 的 /.well-known/api-catalog 端点遵循 RFC 9727,该 RFC 定义了 API 目录的可发现位置和链接关系。
新闻 API 使用 OpenAPI 3.1,这是 HTTP API 的语言无关接口描述。它允许人和软件在无需检查源代码或观察网络流量的情况下理解服务。
列表中的其他资源(包括 MCP 服务器卡片和 Agent 技能文档)应根据其遵循的实现或约定进行描述。将资源放在 /.well-known/ 下并不会自动使其内容成为官方标准。
其他团队可以复用什么
Walden Robotics 平台确立了 4 条超越本项目的原则:
保持所有权明确:将每种信息类型存储在负责维护它的团队所在的系统中。
从共享记录生成表示形式:使用结构化内容生成 HTML、Markdown 或其他格式,而不重复编辑工作。
在行为边界应用信任:签名配置、在服务器上验证请求,并限制外部交互。
将分发与发现分离:提供有用的表示形式,然后发布使它们可被发现的目录、描述和链接。
在 Monogram,我们将这些视为同一平台架构的组成部分。内容所有权决定系统可以渲染什么,验证决定它可以信任哪些指令,发现决定哪些客户端可以使用结果。
在存在正式标准的地方使用正式标准,其余表面精确记录,并使每个表示形式与其权威来源保持关联。