网页上最常见的图片无障碍问题,不是没有alt文本,而是alt文本写了等于没写。WebAIM发布的2026年WebAIM Million报告显示,在全球排名前一百万的网站首页中,有16.2%的图片缺失alt属性;而在已经填写alt文本的图片里,又有10.8%提供的是无描述价值的属性值,比如alt="image"、原始文件名,或者直接复制相邻图片的描述。两项加起来意味着,超过四分之一的图片在alt文本上存在缺失、含糊或重复的问题。
Taarik Ashenafi曾在GitHub无障碍团队担任软件工程实习生。他和团队为GitHub Accessibility Scanner开发了一个alt文本插件,专门用来识别那些能通过自动化检查、却对用户没有实际帮助的alt文本。这个插件的设计思路,是把“机器能证明的问题”和“机器只能怀疑的问题”明确分开。
自动化检查为什么放过坏alt文本
现有的大多数alt文本检查工具,只判断图片是否存在可访问名称,而不判断这个名称是否真的描述了图片内容。这并非技术疏漏,而是一种刻意的设计选择:如果一条面向质量的规则频繁产生误报,开发团队往往会直接关闭它。因此,alt="IMG_2847.png"可以通过检查,五个不同星形图标共用同一个alt="3/5 stars"也可以通过检查。
插件默认运行五条确定性规则,不需要调用AI模型,也不需要网络请求。这些规则只基于alt文本字符串本身,不查看图片内容:
- alt属性缺失,或只包含空白字符。
- alt是文件名,例如hero.png、IMG_2847.jpg。
- alt是待替换的占位符,例如TODO、tbd。
- alt只是描述媒介类型的泛化词,例如image、logo、chart。
- 同一alt文本在相邻图片之间重复出现。
这些检查的共同点是,它们都是对字符串本身的判断,不涉及对图片内容的理解。另有一条可选规则,会调用模型,结合提供的图片内容和周围上下文进行判断,用于处理仅靠alt字符串无法支持的场景。
先确定哪些图片需要被检查
在扫描网页时,插件使用Playwright基于角色的定位器,而不是直接使用querySelectorAll('img')。这样,任何没有进入浏览器无障碍树的元素都会被排除,包括所有携带alt=""的图片。这个排除逻辑对后续判断有实际影响,因为空alt通常表示图片是装饰性的,不应被当作内容图片来要求描述。
团队在开发过程中遇到的最严重bug,并不是解析问题,而是布局问题。这个发现也反过来印证了他们的核心判断:自动化检查的边界,往往不在算法本身,而在它如何与页面结构、无障碍树和实际渲染结果交互。
让模型进入判断链路之后
当模型被引入后,插件能够处理一些字符串规则无法覆盖的情况。例如,alt文本在字面上看起来合理,但与图片实际内容不符,或者与周围上下文冲突。这类判断需要图像内容和上下文信息,单靠alt字符串无法完成。团队没有把模型判断设为默认开启,而是作为可选规则,原因在于调用模型需要凭证,也会带来额外的网络请求和不确定性。
这种“确定性规则默认运行、模型判断按需开启”的分层方式,适用于更广泛的自动化检查场景。无论是无障碍检查还是其他质量检查,先明确哪些结论可以被证明,哪些只能被怀疑,再决定是否引入模型,能够减少误报,也更容易让团队接受检查结果。
对于正在构建自动化检查工具的开发者来说,这个插件的取舍逻辑可以迁移。机器能够可靠判断的是字符串层面的客观事实,比如属性是否存在、是否为空、是否匹配文件名模式、是否在相邻节点重复。而“这个描述是否足够好”往往需要结合图片内容和上下文,属于判断性结论。把这两类问题分开处理,是让检查工具既可用又不被关闭的关键。
热门跟贴