设计资讯网站、社区、博客或内容型APP时,一篇文章往往不只有标题和正文。详情页上常见的浏览量、点赞、收藏、评论,以及后台使用的发布状态、置顶、推荐等信息,都属于文章系统需要考虑的数据。

不过这些数据并不都属于“文章自身属性”。例如文章有多少点赞可以作为统计值保存,但“当前用户有没有点赞”实际上属于用户与文章之间的关系。产品设计阶段先把这些概念区分清楚,后面的接口和数据库会简单很多。

内容产品的文章字段怎么设计?常见文章属性与互动数据解析

文章最基础的内容字段

一篇文章最核心的属性通常包括:

  • 文章ID,用于唯一识别内容。

  • 标题。

  • 正文。

  • 摘要。

  • 封面图片。

  • 作者。

  • 所属分类。

  • 标签。

  • 创建时间。

  • 发布时间。

  • 最后更新时间。

这些字段主要回答“这篇文章是什么”。对于普通博客、资讯网站和知识社区,这一组数据基本都会存在。

文章通常需要发布状态

内容后台一般不会只有“发布”和“未发布”两个状态。

常见状态包括草稿、待审核、已发布、定时发布、私密和已删除。如果是UGC社区,还可能增加审核中、审核拒绝、重新审核等状态。

比较推荐把“发布状态”和“审核状态”分开。因为一篇已经发布的内容,也可能由于举报或内容修改重新进入审核。

浏览量表示页面被查看次数

浏览量通常使用:

view_count

前台可能显示为“1256次浏览”或“1.2万阅读”。

真正设计时,需要先定义什么算一次浏览。同一个用户刷新10次是否全部统计,机器人访问是否排除,短时间重复访问是否去重,都需要根据产品规模决定。

小型内容产品可以先使用简单累计方式,数据规模增加后再加入用户、设备或时间窗口去重,没有必要一开始把浏览统计设计得过于复杂。

点赞要区分数量和状态

点赞通常至少涉及两个信息。

第一个是整篇文章的点赞总数:

like_count

第二个是当前用户是否点过赞:

is_liked

两者不是同一个字段。

like_count属于文章统计数据,而is_liked取决于当前登录用户。因此系统通常还需要保存用户和文章之间的点赞记录。

这样用户取消点赞时,系统才知道应该删除哪一条关系,而不是只修改一个总数字。

收藏和点赞最好分开

收藏常见字段是:

favorite_count

当前用户的收藏状态可以是:

is_favorited

点赞通常表达认可,收藏更多表示“以后还想看”。用户完全可能收藏文章但不点赞,因此两种行为最好独立设计。

如果产品包含“我的收藏”页面,还需要保留具体收藏关系,而不能只有文章的收藏总数。

评论至少有数量和开关

文章评论通常会涉及:

comment_count
comment_status

comment_count表示已有多少评论,comment_status决定现在是否允许继续评论。

例如一篇文章已经有80条历史评论,运营人员后来关闭评论功能,这时评论数量仍然是80,但评论状态已经关闭。

具体评论内容通常作为独立数据保存,不会直接塞进文章记录中。

分享量不一定必须存在

有些内容产品会记录:

share_count

但需要明确这个数字代表什么。

网站通常只能知道用户点击了多少次站内分享按钮,却不一定知道链接最终有没有真正发送出去。如果用户直接复制浏览器地址分享,系统甚至可能完全不知道。

所以如果产品没有分享排行榜、推荐计算或运营统计需求,没有必要为了字段齐全强行增加分享量。

常见互动数据可以这样选

普通内容产品比较常见的统计字段包括:

view_count
like_count
favorite_count
comment_count
share_count

但不是每个产品都需要全部展示。

教程网站可能更重视浏览和收藏,社区内容更重视点赞和评论,新闻产品则可能主要展示阅读量。

字段应该跟产品实际行为有关,而不是别人有几个数字,自己的详情页也必须放几个。

后台还会有运营属性

内容运营通常还需要一些用户看不到,或者只在特定情况下展示的字段,例如:

  • 是否置顶。

  • 是否推荐。

  • 是否允许评论。

  • 文章来源。

  • 发布时间。

  • 下线时间。

  • 审核人员。

  • 删除原因。

如果产品有推荐系统,还可能存在推荐权重或热度分数。

“热门”这类状态不一定要人工维护,也可以根据近期浏览、点赞、评论和发布时间动态计算。

网页文章还可以增加SEO属性

如果文章除了APP内展示,还会生成公开网页,可以增加:

slug
seo_title
seo_description
canonical_url
og_image

这类字段主要服务搜索引擎和社交分享。

例如文章站内标题和搜索结果标题可以不同,分享时使用的封面图也可能与正文第一张图片不同。

如果内容完全存在于封闭APP中,没有公开Web页面,这部分通常可以省略。

时间字段不要只留一个

文章至少建议区分:

created_at
published_at
updated_at

因为“创建文章”“正式发布”和“最后编辑”可能发生在三个不同时间。

如果有定时发布,还可以增加:

scheduled_at

这种拆分以后做内容排序、展示更新时间和后台审计都会更方便。

哪些属于用户行为数据

下面这些信息虽然经常出现在文章接口里,但严格来说并不是文章自身属性:

is_liked
is_favorited
reading_progress
has_reported

因为它们会随着当前用户变化。

同一篇文章,用户A可能已经点赞,用户B没有点赞,所以不能把is_liked=true永久保存到文章本身。

接口可以把这些信息一起返回给前端,但数据库层面最好仍然区分文章数据和用户关系。

基础版本可以先做哪些字段

如果刚开始设计一个内容产品,不需要一次建立几十个属性。基础版本可以先保留:

id
title
summary
content
cover_image
author_id
category_id

status
comment_status

view_count
like_count
favorite_count
comment_count

created_at
published_at
updated_at

然后根据当前用户返回:

is_liked
is_favorited

如果以后确实需要分享统计、置顶推荐、SEO或阅读进度,再逐步增加即可。

文章字段应该跟产品目标走

文章属性并不是越多越完整。每增加一个统计字段,后面往往还涉及记录规则、接口更新、后台展示和数据一致性。

设计时可以先问一句:这个字段以后具体用来做什么?如果只是为了详情页多显示一个数字,没有推荐、运营、用户反馈或个人管理价值,就可以暂时不做。

对于大多数内容产品,先把标题、正文、作者、时间、发布状态以及浏览、点赞、收藏、评论这几组基础数据设计清楚,已经足够支撑第一阶段使用。

参考资料

  1. WordPress文章字段官方文档

  2. Schema.org Article属性说明