结论先说:把内容实体和栏目展示分开。内容只在一个地方存“正文与字段”,多个栏目只保存指向它的引用或标签;展示层再根据栏目决定标题、摘要和排序。这样改一次正文,所有栏目同步更新,不会出现三个版本互相矛盾。下面用一个假设情境把取舍讲清楚。
假设你维护一个培训类站点,有一篇课程介绍《前端基础班》。它既该出现在“最新课程”栏目,也该出现在“就业方向 > 前端”栏目,还可能被首页推荐位引用。运营希望三个位置显示不同摘要,但正文和价格必须一致。此时有两种常见做法,代价完全不同。
最直接的方式是在每个栏目下分别创建一条记录,各自填写标题、摘要和正文。它的成立条件是:栏目内容确实不同,比如“新课”只讲开课时间,“就业方向”只讲岗位路径,两条内容除了主题相关,实质信息并不共享。
代价是同步成本。价格、讲师、课时一旦调整,你要记住改了几处。漏改一处,用户在不同页面看到不同信息。用site:你的域名 课程名去抽查,如果两个栏目页的摘要描述不一致,通常说明这里已经分叉。这个现象只能提示“可能存在多份副本”,不能单独证明哪份是权威版本,还需要回到后台确认更新时间和字段来源。
另一种做法是建立唯一的内容实体,栏目只保存它的 ID 或标签关系。展示时由模板决定:在“新课”栏目显示开课日期,在“就业方向”栏目显示岗位标签,正文和价格始终来自同一字段。
它成立的条件是:多个栏目共享的是同一份事实信息,差异只在展示角度。这时你需要提前决定三件事:哪些字段允许栏目层覆盖(如栏目内标题),哪些字段禁止覆盖(如价格、正文、更新时间),以及删除栏目关系时是否连带删除内容。第三点最容易被忽略,处理错会导致内容从所有栏目消失。
不必争论哪种做法更“正确”,先列出字段,再逐项判断归属。下面是一个假设的归属表,用于说明判断方法,不是通用规范。
判断标准很简单:这个字段描述的是内容本身,还是描述内容与某个位置的关系?前者归实体,后者归关系。按这张表执行后,你会得到一个可验证的结果:修改一次价格,所有引用该内容的栏目页都应同步变化。如果某个栏目页没变,说明那里残留了一份手工副本,下一步就是找出并合并它。
如果站点已经在用多份副本,不要一次性删除。先给每条内容加一个稳定标识,把疑似重复的记录标出来,再逐组确认哪条是权威版本。确认后先把栏目页改为引用权威版本,观察一段时间,确认没有页面报错或字段缺失,最后才删除旧副本。
这个顺序的价值在于可回退。假设你直接删除旧记录,一旦发现某个栏目依赖了它独有的字段,恢复成本会很高。先改引用、后删数据,等于把一次不可逆操作拆成两步可检查的动作。检查时重点看三类页面:栏目列表页、内容详情页、以及被其他内容引用的位置,比如相关推荐。
并非所有重复都要消除。如果两个栏目面向完全不同的读者,且内容需要独立演进——例如面向企业的版本和面向个人的版本,价格口径、服务条款都不同——那么它们本质上是两条内容,只是主题相近。这时应明确命名区分,而不是强行合并成一条再靠条件判断输出不同内容,后者会让模板逻辑越来越难维护。
区分标准是:两份内容的未来修改是否会互相牵连。会牵连,就合并为单一来源;不会牵连,就保留为独立内容并接受同步成本。这个判断比“看起来像不像重复”更可靠,也更容易在团队内达成一致。