html结构需语义化且可访问:标签须真实表达内容意图,导航用、主内容用、侧边栏用;交互控件需role="button"和tabindex="0";表单必配;class命名应遵循bem规范,禁用位置描述类;img必有alt,a外链需rel="noopener noreferrer";禁用废弃属性,自定义属性须data-开头;模板逻辑不得侵入html,禁用内联样式与脚本。

HTML结构是否语义化且可访问
语义化不是“写得像HTML5”就行,而是标签要真实表达内容意图。比如用 <div> 包裹导航栏、用 <code><span></span> 替代 <button></button> 触发交互,都会破坏屏幕阅读器识别和SEO基础。
实操建议:
- 导航必须用
<nav></nav>,主内容区域优先用<main></main>,侧边栏用<aside></aside>,避免通篇<div class="header"><li>所有交互控件(尤其是 <code><div> 或 <code><span></span>模拟的按钮)必须带role="button"和tabindex="0",否则键盘用户无法聚焦 - 表单控件缺失
label或仅靠 placeholder 提示,属于常见可访问性硬伤;aria-label不能替代<label for="xxx"></label>,后者才触发原生 focus 关联 - 禁止使用
left/right/top等描述位置的 class,布局应由 CSS 控制,HTML 只负责结构含义 - 组件级 class 建议采用 BEM 风格,如
user-card__avatar,避免user-avatar这种跨组件易冲突的扁平命名 - 检查是否存在“CSS-only class”,即只用于样式、无语义、也无 JS 绑定的 class(如
mt-12),这类应统一收口到 utility 类系统,而非散落在 HTML 中 -
<img>必须有alt,空值允许alt=""(当图纯装饰),但绝不能省略 -
<a></a>指向外部链接时,应带rel="noopener noreferrer",防止 opener 漏洞;指向邮件或 tel 时,确保href格式合法(如mailto:xxx@xx.com) - 禁用已废弃属性:如
target="_blank"单独出现(必须配rel)、align、border等 presentational 属性 - 自定义属性必须以
data-开头,且不能包含大写字母或特殊符号(如data-user-id✅,data-userID❌) - 禁止在 HTML 中使用类似
<!-- if: user.isAdmin -->...<!-- endif -->这类模板语法(除非项目明确约定并统一处理) - 静态资源路径(如
src、href)不应硬编码,而应通过构建工具注入或由 JS 动态生成,避免上线后 404 - 内联样式(
style="color:red")和内联脚本(onclick="doSomething()")必须清理,交由 CSS 类和事件委托控制
class命名是否符合团队规范且无冗余
class 名不是越短越好,也不是越详细越好,关键是能否让其他开发者一眼判断作用域和用途。比如 btn、wrap、clearfix 这类泛化命名,在多人协作中极易引发歧义或重复覆盖。
实操建议:
是否遗漏关键属性或存在无效属性
HTML 属性不是可有可无的装饰,有些是浏览器行为开关,有些是安全底线。比如 img 缺 alt 不仅影响可访问性,还可能在图片加载失败时完全不可读;form 缺 method 或 action 会导致提交逻辑不可预测。
实操建议:
模板逻辑是否侵入HTML导致难以维护
HTML 文件里混写条件判断、循环、变量插值,表面看“快”,实际让结构变得脆弱。尤其当同一份 HTML 被多个框架(Vue/React/SSR)复用时,这种写法会直接卡死后续迁移或自动化处理。
实操建议:
真正容易被忽略的,是 HTML 在 CR 中常被当作“不重要”的配角——但它恰恰是整个应用可访问性、SEO、渐进增强和 SSR 渲染稳定性的第一道防线。一次漏掉 alt 或误用 role,可能比 JS 里一个未捕获的 Promise 更早暴露在线上。











