直接答案:第 43 期统计的 391 个“没有可见文本”的链接,在合并 aria-label、链接内图片的 alt 与 title 之后,有 254 个(65.0%)仍然有可访问名称:232 个来自图片 alt、17 个来自 title、5 个来自 aria-label。剩下 137 个(35.0%)在静态 HTML 里没有任何名称,分布在 20 个站点。
另一个数字:2,739 个链接里有 567 张链接内图片,其中 274 张的 alt 为空(48.3%)。空 alt 的图片算装饰,不提供名称;如果它是链接里唯一的内容,这个链接就没有名字。
方法:按优先级取名称
沿用第 43 期的同一批 25 个首页缓存,零网络请求。对每个带 href 的 <a>,按简化版可访问名称(accname)顺序取第一个非空来源:
| 优先级 | 来源 | 本期处理 |
|---|---|---|
| 1 | aria-label | 属性非空即采用 |
| 2 | aria-labelledby | 只记录引用,不解析 DOM id |
| 3 | 可见文本 | 去标签后非空 |
| 4 | 链接内图片 alt | 第一张非空 alt |
| 5 | title | 属性非空 |
“无可见文本”沿用第 43 期口径:去掉内部标签后没有文字。空 alt 视为装饰,不提供名称。本期不执行 JavaScript,也不计算 CSS 隐藏文本。
结果:391 个无文本链接,254 个有名字
| 名称来源 | 数量 | 占 391 |
|---|---|---|
| 链接内图片 alt | 232 | 59.3% |
title | 17 | 4.3% |
aria-label | 5 | 1.3% |
| 无任何名称 | 137 | 35.0% |
| 合计 | 391 | 100% |
也就是说,第 43 期的 391 个“无文本”里,65.0% 并不是无名称链接。这个差别来自统计层:第 43 期数的是可见文字,本期数的是可访问名称。
从全量看,137 个无名称链接占 2,739 个链接的 5.0%,出现在 22 个有链接站点中的 20 个。
137 个无名称链接集中在 20 个站点
| 站点 | 无名称链接 | 说明 |
|---|---|---|
| E17 | 20 | 同页还有 5 个 aria-label 链接 |
| E16 | 19 | 13 张链接内图片,12 张 alt 为空 |
| E13 | 18 | 35 个靠 alt 命名 |
| E26 | 12 | 22 个靠 alt 命名 |
| E11 | 8 | 13 张链接内图片全部 alt 为空 |
| 其他 15 站 | 60 | — |
| 合计 | 137 | 20 个站点 |
前 5 个站点占 77 个(56.2%)。E27 与 E30 的 7 个无文本链接全部有名称(E27 靠 title,E30 靠 alt),是 22 个有链接站点里仅有的两个“零无名称”站点。
链接内图片:567 张,274 张 alt 为空
| 项 | 数量 | 说明 |
|---|---|---|
| 链接内图片 | 567 | 出现在 22 个有链接站点 |
| alt 为空 | 274 | 占 48.3%,视为装饰 |
| 靠 alt 命名的链接 | 232 | 17 个站点 |
空 alt 本身不是错误:装饰图应该留空。问题在于“链接里只有这张图,而它 alt 为空”,此时链接对屏幕阅读器就没有名称。274 张空 alt 里有多少属于这种情况,本期用 137 个无名称链接间接体现。
aria-label 只有 5 个,title 有 17 个
aria-label:5 个,全部在 E17,而且都没有可见文本;没有出现用 aria-label 覆盖可见文字的情况。aria-labelledby:0 个。title:17 个,分布在 5 个站点;E12 6 个、E27 5 个、E13 3 个、E04 2 个、E29 1 个。
title 能提供名称,但它在触屏和键盘场景下是否展示取决于浏览器,通常只作为补充,不建议当作唯一名称。
与第 43 期对照
| 口径 | 结果 | 占全部 2,739 |
|---|---|---|
| 第 43 期:无可见文本 | 391 | 14.3% |
| 第 44 期:无可见文本但有名称 | 254 | 9.3% |
| 第 44 期:无任何名称 | 137 | 5.0% |
两期数字不冲突:一个数“看不见字”,一个数“读不出名”。验收时应先看后者,再回看前者。
对验收的启示
- 别把“无文本”直接判为失败。 391 个里 65.0% 能靠 alt、title 或 aria-label 读出名字。
- 先合并 alt 再下结论。 232 个名称来自图片 alt,这是最大的一层。
- 空 alt 链接要单独看。 274 张空 alt 图片中,只有位于“纯图片链接”时才会造成无名称。
- title 不作为唯一名称。 17 个只靠 title 的链接,建议补可见文字或 aria-label。
- aria-label 用得很少。 5 个,全在一个站点;需要时它是成本最低的补救方式。
局限
- 静态近似:不执行 JS,不计算 CSS 隐藏文本;JS 后续补的名称看不到。
- 非完整 accname:未实现 role=presentation、图片自身 aria-label、aria-labelledby 的 id 解析等规则。
- title 计入名称:可访问性实践上并不理想,本期单列,读者可自行剔除。
- 正则解析:不处理嵌套锚点与注释内链接。
- 25 家 pilot:不外推行业。
数据与复算
匿名数据:equipment-link-names-2026.csv(25 行 × 15 列:链接数、可见文本、aria-label、图片 alt、title、labelledby、无名称、无可见文本、按来源拆分、链接内图片与空 alt 数)。仓库内为 docs/research/2026-11-link-names.csv。
解析:scripts/link_name_probe.py;单元测试 scripts/test_link_name_probe.py(18 项,无网络)。运行:
python -m unittest scripts.test_link_name_probe
配套:首页链接结构 pilot(第 43 期)、首页语义结构 pilot、首页图片 alt 覆盖率与文案、文章页链接结构 pilot。
数据来源与口径
- 首页缓存:第 4 期 25 个首页(2026-10-31 至 11-01)。
- 名称顺序:aria-label → aria-labelledby(仅记录)→ 可见文本 → 图片 alt → title。
- 空 alt 视为装饰;无可见文本口径与第 43 期一致。
- 扫描时间:2026-11-03,零网络请求。