缺<!DOCTYPE html>或<html>根标签会触发怪异模式,导致样式错乱、脚本异常;<head>和<body>必须存在且正确嵌套,<head>至少含<title>和<meta charset="utf-8">,所有标签须闭合,语义化与可访问性为合规基础。

HTML结构完整性检查
缺 <!DOCTYPE html> 或 <html> 根标签,浏览器会触发怪异模式,导致样式错乱或脚本行为异常。这不是“能跑就行”的问题,而是渲染引擎底层解析逻辑的切换。
- 必须确认
<head>和<body>存在且嵌套正确;<head>里至少含<title>和<meta charset="utf-8"> - 所有标签必须闭合:
<p>不能只写开标签,<img>在 HTML5 中可省略斜杠但不能写成<img />(XHTML 风格) - 避免嵌套错误:比如
<div><p><span><div></div></span></p></div>——<div>不能直接放在<span>里
语义化与可访问性审查
用一堆 <div> 堆出导航栏,视觉上没问题,但屏幕阅读器无法识别,键盘用户 tab 键跳不过去,SEO 也会降权。这不是“锦上添花”,是基础合规要求。
- 优先使用
<header>、<nav>、<main>、<section>、<aside>、<footer>,而不是靠 class 名模拟语义 -
<img>必须有alt属性:空字符串alt=""表示装饰图,非空则需准确描述图像内容 -
<input>、<textarea>等表单控件必须配<label>,用for+id关联,或把控件包进<label>内 - 标题层级不能跳级:
<h1>后直接<h3>是常见疏漏,影响结构感知和 SEO
安全与运行环境风险点
在线运行平台或 CMS 模板编辑器里,用户提交的 HTML 若不加约束,<script> 或 onclick 就是 XSS 入口。审查不是“看有没有”,而是“能不能执行”。
- 禁止
<script>标签(除非沙箱 iframe 显式启用allow-scripts) - 过滤所有内联事件属性:
onclick、onload、onerror、onmouseover等一律移除 - 拦截
javascript:、data:协议的href或src,比如<a href="javascript:alert(1)"> - 外部资源仅允许 HTTPS 且域名白名单(如
cdn.jsdelivr.net),拒绝相对路径或未知 CDN
静态分析工具链落地建议
人工逐行看 HTML 效率低还易漏,但只靠工具又容易误报或忽略上下文。关键是让工具跑在对的地方、用对的规则。
立即学习“前端免费学习笔记(深入)”;
-
w3c validator解决语法硬伤,但不查语义和安全 —— 它是 baseline,不是终点 -
htmlhint可配置规则,比如强制attr-no-duplication、禁用inline-style、要求img-alt,适合集成进 pre-commit 或 CI -
axe-core或Lighthouse扫描可访问性,但结果需人工判读:比如 “contrast ratio too low” 要结合设计规范判断是否真违规 - 不要把
prettier当 HTML 质量工具 —— 它只格式化,不验证结构或语义
<nav> 里没放 <a> 或 <button>,语义存在但功能缺失;或者 alt 写了但值是 “image123”,等于没写。这些点既不在 W3C 报错里,也不触发 axe 警告,只能靠人盯。



















