HTML语义化不是CR一票否决项,而是可修复的结构性问题;真正需阻断的是破坏DOM解析、影响屏幕阅读器读取或导致JS选择器失效的硬性错误。

HTML语义化是否必须在CR中一票否决?
不是。语义化错误(比如用 div 冒充 button)属于可修复的结构性问题,但不应直接阻断合并——除非它已引发可访问性失败或交互异常。真正需要阻断的是破坏 DOM 结构或导致渲染崩溃的问题,例如:unclosed <table>、<main> 嵌套在 <header> 内、或缺失 <html> 根标签。
判断依据是:该 HTML 是否还能被浏览器正确解析、是否影响屏幕阅读器读取、是否让 JS 选择器失效。工具如 axe-core 或 htmlhint 的 attr-accessible 规则能自动识别这类高风险项。
如何给HTML质量打分而不流于形式?
建议按三类维度加权,总分100分,CR中只关注扣分项:
-
基础合规(40分):W3C 验证通过、
<DOCTYPE>存在、<title>不为空、所有标签闭合 —— 每项不满足扣10分 -
语义合理(35分):标题层级连续(无跳级)、
<nav>/<aside>使用符合内容意图、列表用ul/ol而非div+br—— 每处误用扣5分 -
可访问性(25分):图片含
alt、表单控件配label或aria-labelledby、焦点顺序自然 —— 每处缺失扣8分
得分低于70分应要求作者返工;60分以下需暂停合并,由前端负责人介入确认。
立即学习“前端免费学习笔记(深入)”;
为什么团队常把HTML评审变成“挑div”运动?
因为缺乏明确边界。很多团队默认“用了语义标签就算过关”,却忽略实际内容与标签的匹配度。比如:
- 把整页布局包装进
<section>——<section>要求有标题,否则语义失效 - 用
<article>包裹广告位 —— 广告不是独立、可分发的内容,应改用<aside> - 为 SEO 强塞
<h1>多次 —— 违反“每页仅一个<h1>”规则,且破坏结构逻辑
真正要盯的是“内容是否驱动标签选择”,而不是“有没有换掉 div”。建议在 CR checklist 中写明:“请说明此处为何选用 <main> 而非 <div role="main">”,倒逼作者思考。
自动化工具能替代人工HTML评审吗?
不能,但能筛掉 70% 的机械错误。工具擅长检测:
- 语法错误:
unclosed tag、unknown attribute - 硬性规范:
duplicate-id、missing-alt、heading-order - 可访问性陷阱:
color-contrast、no-autofocus
但无法判断:
-
<section>里没<h2>是疏忽还是故意降级语义? - 用
<button>触发页面跳转,是功能错位还是合理封装? - ARIA 属性是否冗余或冲突?
所以 CR 中 HTML 部分的重心,应从“有没有用对标签”,转向“为什么这样用、是否带来真实收益”。这恰恰是最容易被跳过的环节。



















