缺或根标签会触发怪异模式,导致样式错乱、脚本异常;和必须存在且正确嵌套,至少含和,所有标签须闭合,语义化与可访问性为合规基础。

HTML结构完整性检查
缺 或 <code> 根标签,浏览器会触发怪异模式,导致样式错乱或脚本行为异常。这不是“能跑就行”的问题,而是渲染引擎底层解析逻辑的切换。
- 必须确认
和存在且嵌套正确;里至少含<title></title>和<meta charset="utf-8"> - 所有标签必须闭合:
<p></p>不能只写开标签,<img>在 HTML5 中可省略斜杠但不能写成<img>(XHTML 风格) - 避免嵌套错误:比如
<div><p><span><div></div></span></p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a> <p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p> </div> <a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div></div>——<div> 不能直接放在 <code><span></span>里语义化与可访问性审查
用一堆
<div> 堆出导航栏,视觉上没问题,但屏幕阅读器无法识别,键盘用户 tab 键跳不过去,SEO 也会降权。这不是“锦上添花”,是基础合规要求。 <ul> <li>优先使用 <code><header></header>、<nav></nav>、<main></main>、<section></section>、<aside></aside>、<footer></footer>,而不是靠 class 名模拟语义 -
<img>必须有alt属性:空字符串alt=""表示装饰图,非空则需准确描述图像内容 -
<input>、<textarea></textarea>等表单控件必须配<label></label>,用for+id关联,或把控件包进<label></label>内 - 标题层级不能跳级:
<h1></h1>后直接<h3></h3>是常见疏漏,影响结构感知和 SEO
安全与运行环境风险点
在线运行平台或 CMS 模板编辑器里,用户提交的 HTML 若不加约束,<script></script> 或 onclick 就是 XSS 入口。审查不是“看有没有”,而是“能不能执行”。
- 禁止
<script></script>标签(除非沙箱 iframe 显式启用allow-scripts) - 过滤所有内联事件属性:
onclick、onload、onerror、onmouseover等一律移除 - 拦截
javascript:、data:协议的href或src,比如<a href="javascript:alert(1)"></a> - 外部资源仅允许 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></nav> 里没放 <a></a> 或 <button></button>,语义存在但功能缺失;或者 alt 写了但值是 “image123”,等于没写。这些点既不在 W3C 报错里,也不触发 axe 警告,只能靠人盯。










