跳转到主要内容

网站迁移 — 内容架构

分享专业领域知识,为WordPress协作构建提供参考

EN 中文

SCA正在从Webflow迁移到WordPress。我准备了这份简报,分享我在学校内容架构方面的工作,并与我们的实施合作伙伴开启对话,共同探讨如何结合双方的专业领域来实现SCA的目标。

本简报是一份活文档,可以随着我们对话的深入持续更新。本文档通过AI辅助的编辑流程管理——我用自然语言描述修改需求,系统自动完成修订、构建和部署。

本文档将完整的目标架构作为路线图呈现。同一内容模型可以支持分阶段方案:即使主站以基础阶段启动,特定项目也可以立即利用结构化内容基础设施。

我准备的内容架构
  • 12种内容类型建模,含类型化字段和关联关系——可直接映射到WordPress CPT + 自定义字段
  • 已提取所有Webflow内容:9个页面、7个项目、13篇新闻文章、87张图片
  • 公开内容API + 最小化参考前端:web-beta-lilac-27.vercel.app — 用于验证数据模型,并非设计方案

这套基础设施目前在Sanity CMS中正式运营,通过实时API提供内容服务——问题是WordPress如何最好地与这一现有运营系统衔接。完整的架构细节详见附录

需要共同探讨的问题
  • WordPress架构方案:如何最好地实现此内容模型——CPT + 字段、外部API,还是混合方案
  • 迁移范围:哪些页面、什么功能、什么时间线
  • 如何在编辑易用性与结构完整性之间取得平衡
1

起点

当前网站及迁移的原因

斯普林菲尔德联邦学院(SCA)的网站 springfieldcommonwealthacademy.org 目前运行在 Webflow 平台上。这是一个专业的营销网站——大约20个页面,涵盖学术、体育、学生生活、招生和新闻——配有专业摄影和简洁的布局。

Webflow 网站包含的内容
信息页面 约9个页面(关于、历史、愿景、招生、联系等)
学术项目 学术栏目下5个项目页面
体育 3个页面(概览+各运动项目)
新闻文章 CMS驱动的新闻列表和文章详情页
教职工目录 约12名教职工的照片网格
摄影 87+张校园、学生生活和体育照片
Gradelink 集成 指向注册入口的外部链接

Webflow 在 SCA 需求上的不足之处:内容被锁定在 Webflow 的可视化编辑器中。没有API可以程序化查询学校数据。新闻文章不能在通讯邮件中重复使用,也不能被其他系统消费。没有办法实现内容工作流自动化——每次更新都需要在 Webflow 设计器中手动编辑。随着学校的发展,这些限制会越来越明显。

学校决定迁移离开 Webflow。问题是:迁移到哪里,以及如何确保迁移创造的价值不仅仅是换了一个平台?

2

内容架构

SCA的内容需要如何结构化——以及我目前的建设成果

我没有将内容从一个网站建设工具搬到另一个,而是将学校的内容建模为结构化数据——有类型、可查询、可通过API访问。这代表了SCA的内容需要如何组织才能支持我们的AI优先定位。网站只是这些数据的一个消费者,而不是数据唯一存在的地方。我期待在WordPress最佳实践方面获得指导,以实现这一结构。

核心理念

在 Webflow 中,一篇新闻文章是一个视觉布局。而在结构化内容系统中,一篇新闻文章是数据:它有标题、发布日期、正文、分类、作者和图片——每个都是独立的、有类型的字段。同一篇文章可以在网站上渲染、出现在电子邮件通讯中、响应API查询,或被AI助手读取。内容只需编写一次,就可以在各处使用。

Sanity的博客将这一转变描述为"The Quiet Reshape of Content Operations"(内容运营的静默重塑)——将内容视为机构资产而非网站填充物,拥有自己的结构和访问层。AI系统、自动化工具和多渠道发布都依赖于内容的结构化,而不是被困在页面布局中。

建设成果:12种文档类型 + 3种共享对象

我在 Sanity CMS 中定义了12种文档类型和3种可复用对象类型,对 SCA 的运营进行建模。文档类型是主要内容——页面、新闻、项目。对象类型(SEO元数据、社交链接、公告)是嵌入在多种文档类型中的可复用结构,确保一致性。完整模式详情见附录

内容类型 代表内容
页面(Page) 具有父子层级关系的信息页面(关于、愿景、历史等)
新闻(News) 带来源追踪的文章(手动录入、Instagram导入、外部链接)
项目(Program) 学术和体育项目,包含描述、教练、升学数据
人员(Person) 教职工信息,含角色、简介、部门关系
部门(Department) 人员所属的组织单元
活动(Event) 学校活动,含日期、地点、描述
学生项目(Student Project) 学生作品,含自动Google Drive文件夹配置
校友故事(Alumni Story) 毕业生成果和推荐信
媒体画廊(Media Gallery) 用于校园生活、活动、体育的照片集
寄宿特色(Boarding Feature) 面向国际家庭的寄宿项目亮点
招生路径(Admissions Path) 按入学类型划分的申请步骤和要求
网站设置(Site Settings) 全局配置:校名、联系方式、社交链接、公告

这些类型之间有关联关系——项目可以引用其教练(人员),人员属于某个部门,页面有父子层级。这就是使数据可以以扁平页面无法实现的方式进行查询的关键。

关键决策 — 我的专业领域

四个架构决策塑造了这项工作。这些反映了SCA的机构需求——如何在WordPress中最佳实现,正是平台专业知识的发挥之处。

  1. 使用 Sanity 作为内容层。Sanity 提供实时API、代码定义的类型化模式,以及编辑人员无需开发人员帮助即可使用的内容工作室。内容可通过HTTP访问——任何能发送GET请求的系统都可以读取。
  2. 使用 Astro 构建参考前端。我构建了一个有意简约的参考网站来验证内容层的工作效果。它将所有结构化数据渲染为真实页面,但视觉设计有意退居次要——因为架构使数据和展示完全独立。任何前端都可以用不同的设计消费相同的内容。
  3. 先提取内容再重建。我没有手动重新创建内容,而是程序化地从 Webflow 网站提取了所有内容——页面文本、项目描述、新闻文章、图片——并以结构化数据的形式导入 Sanity。这项工作无需重复。
  4. AI可读设计。网站输出静态HTML,包含JSON-LD结构化数据和语义标记。阅读任何页面无需JavaScript。任何具有网络访问能力的LLM——ChatGPT、搜索引擎爬虫、潜在家长的AI助手——都可以直接解析内容。公开API意味着AI代理也可以程序化查询学校数据。
3

现有成果

参考网站、内容API和诚实的差距分析

目前有三项具体的交付成果已上线:一个参考网站、一个内容API,以及供任何前端消费的已提取内容。

已上线内容
参考网站 web-beta-lilac-27.vercel.app — 基于令牌的设计基础、响应式、自托管字体
内容API 公开的GROQ端点——任何系统都可以通过HTTP查询学校内容
已导入内容 9个信息页面、7个项目、13篇新闻文章、87张图片——全部从Webflow提取并在Sanity中结构化
自动化 学生项目系统,自动配置Google Drive文件夹

参考网站将结构化内容渲染为可用的页面:包含项目亮点的首页、带文章详情页的新闻版块,以及关于、学术、体育、学生生活、招生和联系等内容页面。它拥有完整的设计系统,定义了排版比例、色彩方案和响应式布局。这不是一个模型——它是一个消费内容API实时数据的工作网站。

范围清单:Webflow网站 vs. 已建成果

以此作为范围参考。绿色 = 同等或更好。黄色 = 部分完成(数据模型存在,前端未完成)。红色 = 未开始。当前网站不具备的新功能单独标注。

功能 Webflow(现状) Sanity + Astro(已建) 状态
首页 带主图的完整设计 设计令牌基础:主视觉(纯文本)、价值主张、项目展示、行动号召。无主图。 部分
关于/历史/愿景 带摄影的丰富页面 内容已导入,有样式模板。图片需迁移。 部分
学术+项目 5个项目页面 Sanity中7个带类型字段的项目。模板渲染。 部分
体育 3个带照片的页面 带条件字段(季节性运动)的模式。基础页面。 部分
教职工目录 约12名教职工的照片网格 模式已就绪(人员+部门)。数据尚未导入。 未开始
学生生活 丰富的照片页面 模式已就绪,基础页面含内容。 部分
社区/参与 2个带画廊的页面 模式已就绪。无前端页面。 未开始
新闻与文章 CMS驱动的列表 已导入13篇文章。列表+详情页。数据完整;前端为参考级。 数据完整
招生 多版块页面 模式+基础页面。完整招生路径模式已就绪。 部分
Gradelink 注册 外部链接按钮 网站设置中的URL字段。尚未连接到前端。 部分
联系页面 表单+嵌入式地图 基础页面。无联系表单或地图集成。 部分
校友故事 当前网站无此功能 模式已就绪——毕业生成果、推荐信
媒体画廊 当前网站无此功能 模式已就绪——分类照片集
学生项目 当前网站无此功能 Drive自动化可用。前端为基础版。 系统可用
寄宿特色 当前网站无此功能 模式已就绪——面向国际家庭的寄宿项目亮点
内容API 完整的公开API——任何系统都可以查询所有学校内容 完成
编辑工作流 来源追踪、导入内容QA标记

"部分"表示数据模型和内容存在但前端未达到Webflow原版的视觉丰富度。"未开始"表示模式存在但无前端页面或数据。"新"标记Webflow网站完全不具备的功能——这些是可选的范围扩展。

4

价值所在

WordPress构建可用的资源,以及仍需关注的方面

内容模型和已提取的内容是WordPress构建的基础。以下是我的工作如何映射到WordPress概念——平台专业知识将决定如何最好地实现这些模式。

内容模型 → WordPress CPT + 自定义字段

12种内容类型可直接转换为WordPress Custom Post Types + Advanced Custom Fields(或等效方案)。每种类型都有定义好的字段和关联关系:

  • 项目(Programs)含类别、级别、描述、教练引用、升学数据 → CPT + ACF字段 + Person关联
  • 人员(People)含角色、简介、部门引用 → CPT + 分类法或关联字段
  • 页面(Pages)含父子层级、富文本、SEO字段 → 原生WordPress页面 + 自定义字段
  • 新闻、活动、学生项目、校友故事 → 各为独立CPT,使用类型化字段而非自由排版的页面构建器内容

所有字段和关联关系的完整模式详情见附录。这可以作为CPT注册和字段组设置的起点——欢迎基于WordPress实施经验提出优化建议。

已提取的内容
  • 所有文本内容已从Webflow程序化提取——页面文本、项目描述、新闻文章——存储为结构化数据。可直接导入WordPress或通过API消费。
  • 87张图片已下载并托管在Sanity CDN。可重新导入WordPress媒体库。
  • WordPress可以直接实现此模型(CPT + 字段),与现有内容API集成,或采用混合方案——欢迎提出最佳方案建议。
运营基础设施
  • Google Drive自动化。学生项目系统在创建项目时自动配置Drive文件夹。独立于网站前端。
  • 编辑工作流。来源追踪(手动、Instagram、外部)和导入内容QA标记。
  • 新内容类型(校友故事、媒体画廊、寄宿特色、招生路径)模式已定义但尚无内容。
实施机会
  • 联系表单——需标准WordPress表单实现。
  • Gradelink集成——网站设置中已有URL字段;注册按钮需连接到前端。
  • 教职工数据迁移——需手动导入或针对Webflow照片网格格式的自定义解析方案。模式已准备好接收数据。
  • 图片关联映射——资产已提取并托管;与特定内容条目的关联将在WordPress迁移期间完成。
  • 社区/参与页面——后端模式完成;前端实现待设计决策。
5

实施方案

如何将内容架构与WordPress专业知识相结合

SCA的机构目标是结构化内容。实施可根据组织优先级分阶段推进——基础阶段和基础设施阶段都是合理的专业方案。以下是可选路径,欢迎对推荐方案提出专业意见。

战略方向

无论从基础阶段还是基础设施阶段开始,目标是可演进的架构。基础阶段(专业网站展示)是可行的起点,前提是能够在不推倒重来的情况下迁移到基础设施阶段(结构化内容)。需要管控的具体风险不是页面构建器本身,而是内容被锁定在专有短代码或特定布局格式中,导致后续无法干净提取。我不执着于任何特定的WordPress模式——重要的是内容保持可移植性。

方案A:WordPress原生实现模型

构建Custom Post Types + 自定义字段,复制12种内容类型。内容直接导入WordPress。Sanity作为内容模型的参考;WordPress全面接管。

  • 标准WordPress架构:CPT + ACF(或等效方案)+ 模板
  • 内容从Sanity导出导入或手动重新录入
  • 模式设计、字段定义和关联关系已记录,可直接实现
  • 所有前端工作(主题、表单、插件、SEO)在WordPress中完成

这代表基础设施阶段路径。内容模型定义了"项目"、"人员"和"活动"对SCA的含义,使WordPress构建从清晰的数据架构开始,而非从空白开始。如果从基础阶段使用常规主题开始,架构应将内容保存在标准WordPress结构中(文章、页面、原生字段),而非嵌入页面构建器短代码或专有块格式——这样迁移到CPT时是数据操作,而非内容重建。一个值得讨论的问题:是否存在WordPress直接消费Sanity API更合理的场景,还是原生CPT实现更适合SCA的需求?欢迎对此提出意见。

技术讨论要点

以下是希望获得专业意见的领域:

  • 鉴于这些内容关联关系,WordPress架构建议
  • 平衡编辑易用性与结构完整性的方法
  • WordPress内容可导出性的最佳实践
  • 如从基础阶段开始:哪些主题架构最有利于未来迁移到CPT?如从基础设施阶段开始:推荐的CPT架构方案
  • 自定义字段的标准方案:ACF、块,或其他选项
  • 性能/SEO基线:Core Web Vitals、图片、缓存
6

合作期待

核心需求、开放领域,以及我们如何协作

我希望坦诚说明哪些是固定的,哪些是可以讨论的。SCA的机构需求设定了某些约束条件。其他一切都可以对话。

分阶段实施

Angelene对SCA AI优先定位的愿景可以通过渐进阶段实现,具体取决于实施范围和时间线:

基础阶段聚焦于专业网站展示,包括视觉优化、移动端适配和基础内容管理。内容通过成熟的WordPress主题呈现。此阶段可以使用页面构建器工具快速部署,但前提是内容将在基础设施阶段迁移到结构化CPT。目标是可桥接的架构,而非永久的页面构建器依赖。这可以立即交付机构价值,并为未来增强做好准备。

基础设施阶段实现本文档中描述的完整结构化内容模型——CPT配合定义好的字段、内容类型之间的可查询关系、API可访问性,以及AI就绪架构。这将实现自动化内容工作流、多渠道发布,以及区分SCA定位的完整AI优先能力。

两个阶段都服务于SCA的发展旅程。问题是现在就实施完整的基础设施,还是先建立基础,在后续阶段演进到完整结构。

机构目标架构

以下描述SCA基础设施阶段的目标——完整的结构化内容架构。这些并非全部是第一阶段的要求。基础阶段可以使用常规主题和人工维护作为可行的起点,逐步向目标架构演进。目标包括:

  • 内容以结构化数据存储。CPT配合定义好的字段。一个"项目"有名称、类别、教练和描述作为独立的可查询字段。
  • 内容类型之间的关联关系可查询。项目引用其教练(人员)。人员属于部门。页面有父子层级。这些连接必须在代码中可导航。
  • 内容可导出、可移植。如果SCA未来更换平台,所有内容和关联关系都能干净地提取出来。
  • AI可读输出。静态HTML配合语义标记和结构化数据(JSON-LD)。解析内容无需JavaScript。这是潜在家长的AI助手、搜索引擎和SCA自身AI工具与网站交互的方式。
实施灵活性

我不打算指定WordPress的实施细节——那是平台专业知识的领域:

  • 主题架构、插件选型、托管环境
  • 自定义字段方案——ACF、原生块,或其他模式
  • 编辑工作流和内容管理用户体验
  • 性能优化、缓存策略、部署流程
共识 — 重要的成果

为确保满足SCA的机构需求,以下是我希望我们达成一致的成果。实施选择将决定如何在WordPress中实现这些目标:

  • 教职工、项目、新闻和活动从结构化数据模板驱动生成——而非手动组装的页面
  • 内容关联关系得到保留(项目→教练,人员→部门,页面层级)
  • 网站渲染语义化HTML,AI工具和搜索引擎无需执行JavaScript即可解析
  • 内容可随时导出为JSON或其他可移植格式
未来应用 / 可选性

本文档描述的结构化内容架构的价值不仅限于当前的网站迁移。一旦内容以类型化、关联性数据存储:

  • AI工具可直接查询机构内容——回答家长问题、生成营销材料、支持招生工作流
  • 内容可从单一来源发布到多个渠道(网站、移动应用、印刷材料、社交媒体)
  • 机构知识作为可查询数据保存,而非锁定在页面布局中
  • 未来平台迁移变为数据迁移,而非内容重建

无论基础设施阶段何时实施,这些能力都将可用。架构是前提条件,时机是组织决策。

协作模式

我提供内容架构、业务需求和AI就绪战略。实施专业知识指导WordPress特定决策。如果基础阶段是起点,我可以确定哪些当前决策有助于日后向基础设施阶段过渡。我的首要任务是确保我们不会关闭通向Angelene完整愿景的大门。

7

附录:内容模型与设计系统

完整模式参考、设计令牌和实时API访问

本节面向希望检查底层数据模型和设计系统的开发者和外部机构。此处所有内容均可在不克隆代码仓库的情况下访问。

内容模型 — 12种文档类型

每种文档类型都是具有类型字段和关系的结构化内容定义。您可以通过公共API查询其中任何一种(见下方试用API)。

类型 关键字段 关联关系
page title, slug, body(富文本), seo parent → page(层级关系)
news title, slug, date, summary, body, image, source, featured, editorialFlags
program name, slug, category, level, description, image, collegePlacementSummary coach → person
person name, role, bio, photo, email, order department → department
department name, slug
event title, slug, startDate, endDate, location, category, description
studentProject title, slug, studentEmail, year, summary, body, gallery, visibility, status student → person, program → program。触发Google Drive自动化。
alumniStory name, slug, graduationYear, university, achievement, quote, story, photo
mediaGallery title, slug, date, description, images[](含说明/alt), category
boardingFeature title, slug, summary, body, order
admissionsPath title, slug, audience(运动员/国际/国内), summary, body, applyUrl
siteSettings schoolName, tagline, address, phone, email, enrollmentUrl, socialLinks[], announcement 单例(每站一个)
共享对象类型(3种)

这些是嵌入在文档类型中的可复用结构——不是独立内容。它们确保系统的一致性。

对象 字段 使用者
seo title, description(160字符), 社交图片 page, news, siteSettings
socialLink platform(facebook, instagram, twitter等), url siteSettings
announcement enabled, text, link siteSettings
当前内容清单

系统中现有的实际内容(实时数据,可通过API查询):

页面(从Webflow导入的信息页面) 9
新闻文章 13
项目(学术+体育) 7
学生项目(含Drive集成) 4
上传到Sanity CDN的图片 87
教职工、活动、画廊、校友、寄宿、招生路径 模式已就绪,尚无内容
试用API — 无需身份验证

内容API对读取操作是公开的。您可以将这些URL粘贴到任何浏览器中查看实时数据。无需设置、无需令牌、无需插件。

所有项目及其字段:

https://wesg5rw8.api.sanity.io/v2024-01-01/data/query/production?query=*[_type=="program"]{name,slug,category,description}

最新新闻文章:

https://wesg5rw8.api.sanity.io/v2024-01-01/data/query/production?query=*[_type=="news"]|order(date desc){title,slug,date,summary}

页面层级(父子关系):

https://wesg5rw8.api.sanity.io/v2024-01-01/data/query/production?query=*[_type=="page"]{title,slug,"parent":parent->title}

这是标准HTTP。WordPress可以用wp_remote_get()消费这些端点。任何支持HTTP的语言都可以使用。

设计方法 — 令牌基础

参考前端使用设计令牌——颜色、排版和间距的命名值——而非临时样式。这是一个起始词汇表,而非完整的设计系统。价值在于方法本身:令牌可以映射到任何CSS框架、WordPress主题或设计工具,AI工具可以系统性地迭代。更改视觉设计无需更改内容。

色彩方案
令牌 用途
Navy 900 #0A1628 页脚、深色背景
Navy 600 #2c5d8a 链接、交互元素
Gold 500 #C9A227 主要强调色、按钮、徽章
Neutral 900 #1A1F2A 正文文本
Neutral 50 #FAFBFC 页面背景
排版
标题 Cormorant Garamond(自托管,可变字重600-700)
正文 Inter(自托管,可变字重400-600)
字号比例 12px → 48px(9级),使用clamp()响应式适配
内容宽度 42rem(672px)最佳阅读宽度,64rem宽幅,80rem全宽

要查看所有实际效果:访问参考网站。设计系统以CSS自定义属性(设计令牌)实现——任何开发者都可以在浏览器的DevTools中检查它们。

WordPress 概念映射

对于熟悉WordPress的开发者,以下是Sanity概念的对应关系:

Sanity 概念 WordPress 对应
文档类型(如 program Custom Post Type
对象类型(如 seo ACF 字段组
引用(如 coach → person) ACF Relationship / Post Object 字段
Portable Text(富文本正文) Gutenberg 块或 ACF WYSIWYG
GROQ 查询 WPGraphQLWP_Query