alt 是 `
![]()
` 标签的必填属性,这一点没有商量余地。省略它,或者填得不对,都会导致 W3C 验证失败、浏览器在可访问性面板中报出警告,甚至让 Lighthouse 的可访问性审计直接得零分。
对于装饰性的图片——比如分隔线、纯背景纹理、或者仅仅为了视觉强化而存在的图标——正确的做法是写成 `alt=""`(注意,是空的字符串,没有空格)。这既符合规范,又能告诉屏幕阅读器“这张图不用读”,跳过它,避免造成干扰。
需要特别提醒几个常见的操作误区:
- 写成 `alt=" "`(带空格)——屏幕阅读器会把它当作一个空白字符读出来,反而成了干扰。
- 写成 `alt="decorative"` 或 `alt="spacer"` ——这类做法违反了 WCAG 1.1.1 标准,属于“无效替代文本”。
- 用 CSS 的 `background-image` 来替代 `
![]()
` 标签,同时又想加 alt 属性——背景图本身不支持 alt,正确做法是改用 `
![]()
` 配合 `alt=""`,或者加上 `aria-hidden="true"` 来明确告知辅助工具忽略这张图。
对于内容型图片,关键不在于“描述画面”,而是“说明功能”。举个例子:
- 商品列表页的缩略图,应该写成:`alt="iPhone 15 Pro 深空黑色 256GB 官方正品图"`,把品牌、型号、颜色、容量、可信来源这些关键信息一次性的交代清楚。
- 楼盘展示图,写:`alt="北京朝阳XX楼盘实景园林图"`,城市、区域、楼盘名、场景,一个都不能少,形容词能省则省。
- 按钮类的图片,推荐用动词开头:`alt="提交注册表单"`,直接告诉用户点击后会触发什么动作。
千万别写成“一张产品图”“IMG_20240101.jpg”或者“超赞户型!”,这些说法对于屏幕阅读器用户和搜索引擎来说,等于什么都没说。
在外贸、房产这类多语言、多地域、多图类型的业务场景中,alt 的管理最容易出问题。同一张图出现在不同页面里,alt 必须跟着上下文变化。比如首页的轮播图写“上海浦东XX楼盘售楼处入口实拍”,到了详情页就应该改成“上海浦东XX楼盘售楼处内部接待区实景”。
另外,AI 搜索(Google Images、百度识图)非常依赖 alt 中的实体词进行匹配。如果漏掉了“城市”“楼盘名”“户型面积”等关键词,图片几乎不会出现在 GEO 搜索结果中。自动构建的 CMS 页面如果没强制校验 alt 字段非空,上线后很可能批量缺失——建议在构建脚本里加上 `if (!img.alt) throw new Error("Missing alt on: " + img.src)` 这样的检查。
说到底,最容易被忽视的其实是“图片加载失败时用户看到什么”——那个破碎图标旁边空荡荡的一片。这就是你没写 alt 的直接后果。它不是什么高科技,但缺了,就真的不行。