做了十几年网站相关的工作,从最早手工改HTML页面,到后来折腾各种开源CMS,再到现在帮团队搭内容中台和数字生态,可以说完整经历了这套玩法从石器时代到现在的整个演进过程。每次跟年轻同事聊起“当时我们怎么改一个导航栏”这种话题,他们都会露出难以理解的表情——确实,现在这套工具链,放在二十年前想都不敢想。
这篇不是教科书式的编年史,更像是一个老从业者按自己的记忆和经历,把CMS这三十年的关键节点、背后的技术取舍、以及那些实际踩过的坑重新捋一遍。涉及的都是核心关键词:手工编码、CMS、数字生态。希望能让刚入行的朋友理解现在各种系统“为什么长这样”,也让老同行有共鸣。
1. 前CMS时代:手工编码的黄金年代与切肤之痛
1.1 那个靠纯HTML和FTP过活的日子
1990年代末到2000年初,建网站这件事跟今天完全是两个物种。那时候没有现在这种“后台管理”,一个企业官网基本就是几页静态HTML,设计好首页、公司简介、产品页,然后通过FTP把文件传上去就完事了。
我印象特别深,当时接一个十几个页面的企业站,最痛苦的是“改全局”。客户说“麻烦把顶部电话换一下”,听起来是个小需求,但实际上要把每个页面的顶部HTML片段都手动改一遍。运气好页面少,运气不好几十个页面,就得一个个打开、找到那段代码、复制粘贴替换、保存、重新上传。那时候还没有Notepad++的“在文件中查找”功能,全靠最笨的办法硬扛。
这种纯手工编码模式,本质上是把“内容”和“页面呈现”死死焊在一起。页面即内容,内容即代码。对当时的网站来说,页面少、更新频率低,倒也没觉得多难受。但它有个致命问题:一旦网站规模变大,维护成本就指数级上升,而且网站的信息架构几乎无法演进——想加栏目就加页面,想改结构就动全局,想加交互就得把所有页面重新撸一遍。
1.2 摸爬滚打出的早期“模板化”萌芽
人手改页面实在改不动之后,大家开始琢磨:能不能把公共部分抽出来?
最早期的方案是服务端包含(SSI),在HTML里写一行<!--#include virtual="/header.html"-->,服务器端自动把头部文件塞进来。这样改头部只需要改一个文件,算是最原始、最朴素的“模板思想”。
后来PHP、ASP、JSP这类动态语言普及了,更灵活的include机制出现了。我记得那时候写PHP站,特别喜欢把header.php和footer.php单独抽出来,每个内容页就include一下。当时还觉得挺先进,毕竟改一遍全站更新了。这种“公共部分模板化”虽然只是很小的技术动作,但已经是对手工编码的一次重要解构。
这个阶段的本质变化,是把“重复劳动”变成了“引用关系”。但问题也很明显——它只是把header/footer抽出来了,中间正文部分依然是每个页面一套HTML,内容本身还是没法“动态管理”。真正让内容松绑的,是下一阶段数据库驱动的CMS登场。
1.3 手工编码阶段留下的宝贵遗产
现在回头看不觉得有什么,但手工编码时代留下的几个“底层直觉”,对理解CMS很重要:
第一,页面是模板渲染的结果,不是内容本身。你在浏览器看到的每一个页面,严格来说都是“模板+内容”的合成输出。很多刚接触现代CMS的同学不理解“为什么后台改了内容,页面没变”,本质上就是因为有缓存、有版本、有发布流程这些中间层。
第二,URL结构是一种“记忆锚点”。早期手工站点的URL几乎是文件路径的镜像,比如/about.html、/products/p1.html。后来CMS引入了伪静态、路由映射,URL跟文件系统的对应关系被打破了,但用户对URL的认知惯性一直在,这也是为什么做CMS迁移时URL结构保留策略那么重要。
第三,改版最难的不是设计而是数据结构。手工站改版,其实就是重新做一套模板,然后把原来每个页面的内容手动拷进去。但只要内容进了数据库、被结构化管理了,改版就变成了“换模板”这么简单。这个反差,是理解CMS价值最直观的切入点。
2. 开源百家争鸣:PHP的黄金年代
2.1 为什么是PHP赢了这场开局
进入2000年后,动态网站和数据库驱动的CMS开始爆发。当时市面上的技术栈五花八门:ASP+Access、JSP+Oracle、PHP+MySQL,还有Perl、ColdFusion这些小众玩家。但最后真正把CMS带向大众的,是PHP。
核心原因是“部署门槛”和“经济性”的全面胜利。PHP不需要编译,共享虚拟主机几乎都原生支持,租个几十块钱一年的空间,上传代码再导入一个SQL文件,网站就跑起来了。再加上MySQL完全免费,LAMP(Linux+Apache+MySQL+PHP)这套组合把建站成本打到几乎为零。
对当时的中小网站主来说,这套组合的价值是“零成本起步,所见即所得”。不需要懂服务端配置,不需要会编译环境,甚至不太需要懂编程,装一个CMS,后台点点点就能发布内容。这种普惠性,是ASP和JSP时代完全没有的。
2.2 群雄割据:通用CMS、论坛CMS与分类信息CMS
PHP CMS的生态几乎是野蛮生长,各种程序、各种分支、各种二次开发版本,像极了内容管理界的春秋战国。
先看通用内容管理。国际上WordPress、Drupal、Joomla三足鼎立,WordPress依靠极简的安装体验和主题插件生态后来居上;Drupal以强大的内容类型和权限体系见长,适合复杂社区;Joomla夹在中间,当年也是风光无限。国内则是DedeCMS(织梦)、PHPCMS、帝国CMS的天下,早期相当多企业站和政府站都跑在这些系统上。
再看细分赛道。论坛有Discuz和PHPWind,几乎把中文社区市场包圆了;电商有ECShop、ShopEx;分类信息CMS则是58同城早期那种模式的平民版,很多地方门户和垂直分类站都靠它撑起来。热搜词里提到的“分类信息cms”,就是这个年代的产物,它的典型字段结构是“分类、标题、地区、联系方式”,本质上是把报纸中缝广告搬到线上。
这类系统最火的时候,模板标签成了衡量一个CMS好不好用的关键标准。我记得当时用DedeCMS,它的标签机制是{dede:arclist typeid='1' row='10'}这种写法,能在模板里直接拉数据库内容,不会PHP的人也能做出动态页面。帝国CMS的标签模型更复杂、更灵活,但学习曲线也陡得多。
| 系统 | 定位 | 核心优势 | 典型应用场景 |
|---|---|---|---|
| WordPress | 通用博客/企业站 | 生态庞大、上手快 | 个人博客、中小企业官网 |
| DedeCMS | 中文内容管理 | 模板标签灵活、国内模板多 | 企业站、门户站 |
| Discuz | 社区论坛 | 用户体系完善、插件丰富 | 兴趣社区、地方论坛 |
| 分类信息CMS | 同城分类 | 分类结构清晰 | 地方门户、二手交易站 |
2.3 模板标签与采集规则:CMS普及的双刃剑
模板标签把“建站”变成了“套模板”,但真正让草根站长们疯狂的内容获取方式,是采集。
采集合集里提到的“苹果cms采集规则”就是典型。苹果CMS是视频内容管理系统,它不做原创内容,而是通过采集接口把其他站点的视频数据拉到自己库里。常见实现是后台配置“采集规则”,填写对方站的API接口地址或页面URL规则,程序自动抓取标题、分类、播放地址,再入库。
表面上这是技术便利,实际上埋了不少坑。首先,采集涉及版权和合规问题,内容来源不规范,随时可能惹麻烦;其次,采集规则的维护成本极高,对方站一改页面结构,规则就失效了,需要反复调试正则和字段映射;最后,大量采集站堆积出来的内容质量参差不齐,用户体验极差。
但客观说,采集规则这种机制是CMS“数据接入能力”的先声。它比人工搬运高级的地方在于:用程序语言描述“内容从哪来、字段怎么对应、入库后如何呈现”。今天数字生态里的API对接、数据集成、内容同步,本质上都是同一件事——只不过当年的采集是黑盒操作,现在的API集成是标准化的开放协作。
2.4 PHP CMS时代的乱象与不可持续
那个年代还有一个绕不开的话题:安全与版权。
PHP CMS生态里,代码质量参差不齐,SQL注入、XSS漏洞几乎是家常便饭。尤其是国内一些轻量级CMS,源码不加密、漏洞多年不修复,攻击者拿现成的批量扫描工具,一天能拿下几千个站。很多站长是在站点被挂马、被植入垃圾外链之后,才意识到安全问题的严重性。
版权方面更是一笔糊涂账。不少开源CMS的授权协议是很严格的,但真正遵守的人很少,很多二次开发版本直接把版权信息抹掉。这种对规则忽视的行业氛围,为后来整个生态走向“更正规的框架化开发”埋下了伏笔。
从技术演进角度看,PHP CMS模式的根本瓶颈在于“系统边界太僵化”。你想加功能,要么找插件,要么改源码,但很多CMS的源码结构本身就是面向过程的、全局变量满天飞,改一处崩三处。当业务复杂度超过某个阈值,这套系统就会成为巨大的维护负担。这就是下一个时代——框架化重构——为什么必然到来。
3. 框架时代:从“系统”到“引擎”的重构
3.1 为什么必须向框架化迁移
当我第一次真正接触现代PHP框架Laravel时,有一种“终于能呼吸了”的感觉。CMS类系统的历史包袱太重了:全局函数满天飞、数据库操作耦合在模板里、没有自动加载、没有依赖注入、单元测试完全无从谈起。
框架化最核心的思维转变是:把CMS从“成品系统”变成“可组合的引擎”。
传统CMS给你一套默认路由、一套模板引擎、一套后台界面,你只能在其中做“配置”;而框架不是产品,是积木,它提供路由、数据库ORM、中间件、服务容器等基础设施,具体逻辑完全由开发者用代码定义。这就像一个是精装修的毛坯房,另一个是成体系的模块化建材,后者的自由度是指数级提升的。
对内容管理这件事来说,框架化带来的最直接红利是“内容与展示彻底解耦”。以前你在CMS后台建一篇文章,系统会按它自己的模板输出完整HTML;现在你用框架写一个博客模块,文章的模型、API、前端展示逻辑全部分开管理,同样一篇文章,可以输出成网页、App接口、甚至PDF报告。
3.2 Headless CMS:内容管理的“无头革命”
框架化往前再走一步,就是Headless CMS的无头化。
所谓无头CMS,就是系统只负责内容创作、存储、版本管理和API分发,不负责页面展示。前端完全由开发者自己搭建,用React、Vue、原生HTML都行,通过REST或GraphQL API拉取内容。
这个转变的意义怎么强调都不过分。传统CMS的“前后端一体”模式,本质上是把内容绑死在网页这种单一载体上。但今天的内容要被手机App消费、被小程序消费、被智能音箱读出来、被大屏终端展示、被第三方系统集成——如果内容接口不标准化,这些场景每个都要重新手工适配一遍。
我做过一个实际项目:企业官网和老版内部知识库共用一个内容源,Web端用Vue重新构建了品牌官网,内部知识库则直接调用API渲染成内部工具页面。如果沿用传统CMS,这两个场景要么独立维护两套后台,要么在同一个系统里强行做响应式适配,哪种方案都很别扭。而用无头CMS,内容团队只维护一份数据,两边各自消费API,问题直接消解。
当然,无头CMS也有代价。传统CMS开箱即用,装上后台就能写文章;无头CMS则需要开发者自己搭前端、写路由、做渲染,对非技术用户并不友好。真正的业界实践往往是“混合式架构”:核心内容用无头CMS管理API,前端框架负责渲染,同时为编辑团队保留一个可视化预览环境,兼顾编辑体验和发布灵活性。
3.3 当代框架型CMS的代表:从Halo到Strapi
框架化CMS近年有不少代表性项目,这里聊聊我实际折腾过的两个。
第一个是Halo,一个开源博客系统。它基于Java和Spring Boot,数据存储用PostgreSQL,提供了一套完整的后台管理界面和API。它的开发环境搭建过程很典型:先配置JDK和Gradle环境,然后克隆源码,用Gradle构建项目,再配合pnpm启动前端工程。项目结构里,后端是标准的Spring Boot工程,前端是Vue独立工程,通过API通信。整体来看,它属于“传统体验+现代技术栈”的折中方案,既有现代化代码结构,又保留了后台开箱即用的体验,非常适合个人或中小团队做独立博客和知识库。
第二个是Strapi,典型的Headless CMS代表。安装之后,你在后台定义好内容类型(文章、作者、标签等),它会自动生成对应的CRUD接口,还附带权限控制。前端项目只需按文档写API请求,就能把内容实时同步到界面。Strapi的理念是“内容建模即接口生成”,把开发者从写重复的增删改查接口里解放出来,专心做前端和业务逻辑。
从这两个项目的定位差异可以看出,CMS演进到今天,没有“唯一正确”的路线,只有“适合不同场景”的取舍。Halo式方案适合追求一体化体验的独立站点,Strapi式方案适合多端分发、前后端分离的工程化团队。
3.4 框架化对中小开发者的双重影响
框架化CMS一方面降低了开发复杂度,但另一方面也提高了技术门槛。传统PHP CMS时代,一个会装模板的站长就能建站;框架化时代,不会写代码的人连安装部署都费劲。
但恰恰是这个门槛,倒逼了整个行业进步。开发者的思维从“找模板、改标签”转向“建模型、定接口、写前端”。建站不再是一个“套壳”工作,而是一个“系统工程”。个人开发者通过框架CMS获得的成长速度,远超当年套模板的阶段——因为你不光学会了用工具,还理解了工具背后的架构原理。
4. 数字生态时代:CMS走向“内容底座”
4.1 从管理系统到内容底座的角色跃迁
如果说框架化是从代码层面重塑了CMS的形态,那么数字生态时代则彻底改变了CMS的定位。
过去CMS的核心任务是“管理一个网站的内容”,今天的内容则要覆盖官网、小程序、App、社交媒体、邮件营销、线下大屏等多个触点。很多企业甚至已经不关心这个系统是否“建站”了,它们要的是“内容录入一次,全渠道自动分发”。“数字商业生态”这个词,说的就是这个状态:网站只是内容体系的一个输出端点,而CMS是支撑整个内容矩阵的底座。
在这个阶段,CMS最本质的变化是“内容的结构化”。传统文章就是一篇带标题、正文、图片的大文本;数字生态时代,内容被拆成了更细的字段——产品标题、SKU属性、营销文案、关联FAQ、推荐参数、多语言翻译版本,全部以结构化方式存储。内容从“一篇文章”变成“一组有语义的数据”,系统才能在不同渠道、不同设备上以不同形式重组和呈现。
这个演进很像零售行业的变化。以前开一家店就是把货摆上货架,客户上门来买;现在做品牌,要同时管电商平台、线下门店、社交媒体小店、分销渠道,商品信息入库一次,同步所有渠道。CMS的演进逻辑完全一致:把“内容”当作标准化的商品来统一管理。
4.2 内容中台:企业级CMS的终极形态
顺着结构化内容的思路往下走,企业级应用必然会出现“内容中台”这个概念。
内容中台不是某一个软件产品,而是一套整合了内容建模、权限体系、审核流程、多语言管理、API网关、前端渲染能力的架构方案。它通常由无头CMS、数据存储、API服务、CDN分发、前端展现框架等几层组成。
我参与过的一个实际案例,流程大致是这样的:内容团队在后台创建一篇产品发布文章,选择所属产品线、目标市场、上架渠道(官网、App、小程序、海外站),系统自动触发多语言翻译任务和审核流程,审核通过后内容发布到内容中台API,各前端系统通过API实时拉取,同时通过Webhook通知CDN做缓存刷新。
这套流程看起来复杂,但核心价值非常清晰:内容的一次性管理和全渠道的自动化分发。如果没有内容中台,每个渠道单独维护一套内容体系,必然出现官网说“马上上线”、小程序还在“敬请期待”这种信息不一致,而数字生态最忌讳的就是体验割裂。
当然,内容中台不是小团队该碰的东西,它需要运维、开发、内容运营三个角色长期配合,基础设施成本也不低。两三人的小团队,用一套轻量级开源CMS就足够了;规模上来之后,再考虑做内容中台的规划和演进。
4.3 数字商业生态下的CMS集成能力
现在这个时代,CMS几乎不可能孤立存在。它必须和会员系统打通、和电商系统对接、和营销自动化联动。
举一个常见场景:用户在官网浏览了一篇产品测评文章,点击“加入购物车”跳转到电商系统;下单后CMS根据用户浏览记录自动推送相关新品内容;用户离站后又收到营销系统按照CMS内容标签自动触发的邮件。整个过程涉及三个系统:CMS负责内容、电商系统负责交易、营销自动化负责触达。它们之间依靠标准API和统一的用户ID串起来,构成完整的数字商业闭环。
在这个闭环里CMS承担的角色是“内容和体验的编排中枢”。它不直接产生交易,但决定了用户在哪个页面看到什么信息,用什么语义引导用户走向下一步,以及不同内容对不同用户群体如何差异化呈现。这个价值很难直接用KPI量化,但做增长的人都清楚,内容底座的灵活程度直接决定了转化链路的上限。
4.4 Halo这类项目的启示:独立生态的不可替代性
虽然大厂和成熟企业都在搞内容中台和全渠道架构,但独立建站这个场景,并没有消失。
Halo这类项目的存在说明了一个朴素道理:不是所有人都在乎“数字商业生态”,很多个人开发者、小工作室、独立品牌,需要的只是一个能好好写字、方便管理、发出来好看的博客或品牌站。这类需求不需要多高的并发、多复杂的微服务架构,反而需要极低的维护成本、清爽的后台体验、无需担心被平台规则绑架的独立性。
我自己就长期用一个独立的CMS当作数字花园,记录技术笔记和生活随笔,偶尔导出一条API给小的工具页用。数据全部掌握在自己手里,主题不满意随时改,想加功能就写个小插件,不依赖任何商业平台的规则变化。这种自由度,是这个时代很稀缺的东西,也是CMS这门技术最原始的初心——让内容属于创作者自己。
5. 三十年演进的底层逻辑与未来坐标
5.1 三条贯穿始终的主线
回看CMS这三十年,虽然工具和形态一直在变,但有三条主线是从未变过的。
第一是“内容与呈现的分离”。手工编码阶段,内容直接是HTML的一部分;模板化阶段,公共部分被抽离;数据库驱动阶段,内容进入数据库,模板负责渲染;无头化阶段,内容连“页面”这个概念都剥离了,只以API形式存在。这条主线越走越彻底。
第二是“从面向站点到面向生态”。早期CMS管理的是站点,中期管理的是多站点和频道,现在管理的是全渠道、多触点、多语言的内容矩阵。系统的服务对象,从“站长”变成了“整个商业组织”。
第三是“从工具思维到平台思维”。最初CMS是一种工具,用来减少重复劳动;后来是一种平台,用来承载业务逻辑;现在是一种基础设施,用来支撑生态运转。对使用者来说,思维方式也从“我要选一个CMS”变成了“我要怎么搭建自己的内容基础设施”。
5.2 弹性与规范的永恒张力
整个演进史里,表面上是各种技术选型之争,核心却是两个力量的拉锯:弹性和规范。
弹性代表“我想怎么干就怎么干”,手工编码时代弹性最强,但规范性几乎为零;规范代表“一切都井井有条”,内容中台和信息架构能很好满足企业治理需求,却会牺牲灵活性。优秀CMS的每一次迭代,本质上都是在精确标定这两者的边界——用模板标签换规范,用组件化换弹性,用无头API换跨端弹性,用内容建模和权限体系加固规范。
对项目负责人来说,最忌讳的就是盲目追求“灵活”或“规范”的极端。我个人见过很多失败的建站项目,要么是把内容模型设计得过于灵活,后台每个字段都可以随意配置,结果编辑根本不知道怎么用;要么是模型锁定太死,内容稍微有点新花样,就必须让技术团队改代码。好的CMS实践,是从业务真实需求出发,给内容团队适度留弹性,给审批流程适度上规范。
5.3 低代码、AI与CMS的下一步
现在的低代码、无代码平台,以及AI生成内容,其实都在继续推进CMS的演进方向。
低代码平台解决的是“业务逻辑可视化组装”的问题,它让非技术用户也能搭建具有一定交互和流程的应用。这与CMS的“内容生产去技术化”是一脉相承的——都是把原来需要写代码的能力,包装成普通人可操作的可视化形态。
AI的影响则更深刻。传统CMS的内容生产依赖人来写作、编辑、配图;AI应用之后,写作辅助、自动摘要、多语言翻译、关键词生成、内容标签推荐,这些环节都可以由算法完成大半。未来内容团队更多的工作,会是定义内容策略和审核AI产出,而不是逐字逐句敲稿子。
但不管工具怎么变,有一点不会变:内容背后的“人”始终是产品的灵魂。CMS只是把内容的发布成本降到趋近于零,但内容的洞察力、表达方式、情感温度,仍然只能从真实的创作者和行业经验里长出来。
5.4 我个人的选择建议
如果你想学习或使用CMS相关技术,我的建议是按场景分层来选型。
个人博客或独立知识库,优先考虑静态站点生成器或轻量级开源系统,不要过度设计;小团队做企业官网,考虑成熟的通用CMS或轻量Headless方案,重点看维护便捷性和模板生态;中大型企业的多品牌、多市场内容管理,才需要考虑内容中台或企业级DXP平台,但务必先把组织流程梳理清楚,再引入复杂系统。
多年的建站经历让我最大的体会是:CMS从来不是一个软件问题,而是一个组织问题。工具能帮你把内容存好、发好、管好,但它无法替你回答“你的内容到底为用户创造什么价值”这个问题。技术选型永远是简单的,内容策略和持续经营才是真正见功夫的地方。
而每当行业出现新热点,出现“又要颠覆XX”的论调时,我都会想起当年那些被扔进历史角落的CMS。它们不是被新技术打败的,而是被自己对内容本质的偏离打败的。只要能持续解决真实需求,任何形式的内容管理工具,都永远有它存在的理由。