如何在CMS中强制要求编辑填写SEO元数据字段,避免遗漏?

解读

面试官问的是“落地”能力:不是让你解释TDK是什么,而是如何在日常内容生产流程中,用机制而非提醒,把“必填”变成“不能发”。国内主流CMS(织梦、帝国、PHPCMS、WordPress、Shopify、自研后台)权限体系、钩子位置、前后端分离程度差异很大,答案必须体现“对系统、对人、对KPI”的三重控制。面试官想听的是:

  1. 技术层:在哪一步拦截、怎么拦截、能否回滚;
  2. 流程层:怎样让编辑不反感、考核不扯皮;
  3. 数据层:如何证明“强制”后SEO指标真的涨了。

知识点

  1. CMS字段模型:字段属性(not null/default)、字段校验(JS+PHP/Java)、发布钩子(save_post、content_save_pre、doAction、workflow)。
  2. 权限与角色:RBAC粒度,区分“编辑”“审核”“SEO”“管理员”,避免“高权限绕过”。
  3. 前后端分离场景:GraphQL/REST接口层校验,防止Postman直推。
  4. 国内常见坑:
    • 织梦DEDE后台模板被二次开发覆盖,升级会丢;
    • WordPress古腾堡块编辑器,经典编辑器与块编辑器钩子不一致;
    • 企业自研Spring CMS,字段校验在Vue前端,但接口层没二次校验,被爬虫直接POST刷稿。
  5. 灰度与回滚:配置开关、版本号、字段默认值兜底,避免“一刀切”导致当日内容断更。
  6. 数据验证指标:空值率、收录率、关键词排名、流量AB测试,用数据让编辑服气。

答案

分五步落地,每一步都给出国内可直接套用的代码或配置片段,并说明“防绕过”逻辑。

第一步:字段层“硬”约束
在数据库DDL层把title、keywords、description设为not null,并给默认值“NULL占位符”。好处是低权限编辑无法通过SQLyog绕过后台直接插数据;高权限管理员若强写空值,数据库拒绝写入,系统抛500,日志留痕。

第二步:后台表单“软”拦截
以WordPress为例,在functions.php加save_post钩子:

add_action('save_post', 'force_seo_meta', 10, 3);
function force_seo_meta($post_ID, $post, $update){
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if(!current_user_can('edit_post', $post_ID)) return;
    if($_POST['post_status'] != 'publish') return; // 只拦截正式发布
    if(empty($_POST['seo_title']) || empty($_POST['seo_description'])){
        wp_die('SEO标题和描述不能为空,请返回填写!');
    }
}

国内自研SpringBoot CMS,则在Controller层加@Valid注解,配合自定义注解@NotEmptySEO,失败直接抛400,前端统一拦截alert。

第三步:前端“即时”提示
国内编辑习惯用Ctrl+S频繁保存,若每次弹窗会崩溃。做法:

  • 在古腾堡侧边栏SEO面板,用React Hook实时检测空值,红色高亮+禁用“发布”按钮;
  • 织梦后台在模板里加layui.form.verify(),失去焦点即校验,空值无法点击“保存并发布”。

第四步:流程“卡”审核
若公司存在“编辑→审核→发布”三道流程,在审核节点再加一次服务端校验:

UPDATE dede_archives SET arcrank=0 WHERE seo_title='' OR seo_description='';

审核人一键“打回”,编辑绩效扣分,比口头提醒有效。

第五步:数据“闭环”复盘
上线后跑两周数据:

  • 空值率从18%降到0.3%,剩余0.3%为管理员白名单;
  • 新发布内容7天收录率提升22%,目标关键词TOP10数量+15%;
  • 每周邮件自动推送“SEO空值排行榜”,连续三次垫底编辑扣当月KPI 5%。

用数据证明“强制”不是为难人,而是帮编辑拿到更多搜索流量奖金,形成正向循环。

拓展思考

  1. 多语言场景:中英双语站,英文description字段允许155字符,中文允许120字符,如何在一个表单里动态计数并分别拦截?
  2. 大规模历史数据:已上线30万篇文章,空值率40%,强制字段会导致一次性补录成本爆炸,如何设计“分批灰度+AI生成兜底”方案?
  3. headless CMS:前端用Next.js,通过API拉取内容,若SEO字段为空,在getStaticProps阶段直接返回404,让搜索引擎快速删除低质页面,是否比“强制填写”更优雅?
  4. 算法升级:百度即将上线“标题堆砌”过滤,强制填写后编辑可能关键词堆砌,如何再把“质量分”反向写进CMS,用颜色提示“标题蓝>8分可发,<6分禁止发布”?
    把这些问题想透,面试就从“执行层”跳到“策略层”,能直接谈年薪。