写HTML这事儿,说难不难,说简单也真不简单。很多人觉得套个标签就完事了,结果后面改样式、调SEO、搞无障碍的时候,各种坑一个个往外冒。其实问题的根儿,往往就埋在那些最基础的结构标签里——嵌套严不严谨、语义对不对,直接决定了后续开发是顺风顺水还是补丁叠补丁。

下面这几个点,看起来都是基本功,但恰恰是线上项目里最容易翻车的地方。一个一个说。
为什么里必须有
少写这一行,你就等着收乱码投诉吧。中文、emoji、特殊符号,一提交表单或者AJAX返回数据,字段值里突然冒出一堆问号或者方块——这种问题排查起来特别费劲,因为浏览器默认按ISO-8859-1解析,而现代网页清一色用的都是UTF-8。
必须放在最前面,越靠前越好,千万别排在或后面- 别再写那种啰嗦的
,冗余不说,兼容性还差点意思 - VS Code或WebStorm新建文件时默认会自带这条,但如果你从旧项目里复制粘贴代码,很容易漏掉——吃过亏的都懂
不只是浏览器标签页上显示的文字
搜索引擎结果页的第一行就是它,屏幕阅读器朗读页面时第一个标识也是它。你要是空着不写,或者随便写个“首页”,那SEO权重掉分、无障碍体验打折,都是必然的。
- 每个页面的
必须唯一,长度控制在50–60个字符以内,超了会被截断 - 推荐格式:
页面核心内容 - 站点名,比如登录 - GitHub、React Hooks 使用指南 - 前端手册 - 服务端渲染或SPA里动态更新
的时候,千万别只改DOM——得同步调用document.title = "...",否则微信内置浏览器那类环境可能根本不理你
里不能直接塞堆内容
满屏的嵌套,看着是省事了,但机器根本分不清哪是导航、哪是主内容、哪是侧边栏。结构扁平化之后,CSS重置和JS选择器都容易失控,改起来那叫一个酸爽。
- 优先用语义化容器:
、、、、,它们自带隐式ARIA role 必须且只能出现一次,而且不应该被或包裹——它是页面主体内容的根容器,地位特殊- 老项目改造时,别急着把
删掉——先加个role="banner"过渡,再逐步替换成,这样风险最小
到不是字号调节器
它们构成页面的逻辑大纲(outline),爬虫和辅助技术都靠这个来理解页面结构。要是跳着用——比如后面直接接——大纲就断了,部分屏幕阅读器会报错甚至跳过中间内容。
- 一个页面有且仅有一个
(通常对应页面主题),其余按逻辑递进,别为了样式好看就打破层级 - 视觉大小交给CSS控制,而不是靠
假装——语义上永远是二级标题,别混淆 - Logo文字别用
:它属于内容层级,不是装饰品。Logo该用或配合aria-label
结构标签看起来就那么几个,可一旦在首屏HTML里埋下隐患,后面所有的CSS布局、JS交互、SEO优化都得打补丁,越补越崩。最容易被忽略的是的唯一性和的大纲位置——这两处一出错,连Lighthouse的无障碍评分都会直接掉档。所以下次写页面的时候,不妨多花一分钟检查一下这些基础,后期能省下大把时间。
