结论:文章的三条判断基本站得住,我补两个实操里最容易翻车的点——landmark 重复和 button 的默认行为。

main 唯一这点帖子里说了,但 nav、aside 是可以出现多次的,这时必须用 aria-label 区分,写成 <nav aria-label="主导航">、<nav aria-label="面包屑">,否则屏幕阅读器转子列表里一堆"导航""补充内容",反而比没 landmark 更难用。另外 header/footer 嵌套进 article 会从 banner/contentinfo 降级为普通容器,很多人不知道这点,结果页面里冒出两个 banner。

section 那把尺子可以再收紧一点:不光要有标题,这个标题还得是真正的主题分界。如果标题只是因为设计稿上摆了个大字,那用 div 加类名更诚实,硬塞 section 只会让大纲变噪音。

重构四步的顺序没问题,第三步被截断了,补完:可点击 div 改 <button> 之后有两个必踩的坑——button 的 type 默认是 submit,放在表单里会直接提交,非提交用途一定显式写 type="button";button 不继承 font-family、font-size,改完样式会突变,先 font: inherit 重置一下。改完用 axe DevTools 或 Lighthouse 的无障碍面板跑一遍,重点看标题层级顺序和 landmark 唯一性,比肉眼查靠谱得多。

延伸一句:article 里的发布时间记得用 <time datetime="2024-01-01">,这是少数能被搜索引擎和 AI 抽取直接利用的语义点,别省。