お前らはまだ img タグの alt 属性の付け方を間違っている

# 1行で
`alt`属性は、「全ての **画像をその`alt`属性のテキストに置き換えたときにページの意味が変わらない** 」ようにつける。
（[HTMLの標準規格書より](https://html.spec.whatwg.org/multipage/images.html#general-guidelines)）

マジでこれに尽きる。

# 具体例

## 例１：ロゴ
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354612/1a517966-c64b-9a6a-0912-9f7c0de3e9a5.png)


### ❌ 間違ったマークアップ
```html:間違い
<h1><img src="ABC_inc.gif" alt="会社ロゴ"></h1>
<p>我々の使命、それは世界にイノベーションを〜</p>
```

画像を`alt`属性のテキストに置き換えると以下のように意味がおかしくなる。

```html:間違いの置き換え
<h1>会社ロゴ</h1>
<p>我々の使命、それは世界にイノベーションを〜</p>
```

### ✅ 正しいマークアップ
```html:正しい
<h1><img src="ABC_inc.gif" alt="株式会社ABC"></h1>
<p>我々の使命、それは世界にイノベーションを〜</p>
```

画像を`alt`属性のテキストに置き換えても以下のように意味が通じる。

```html:正しいの置き換え
<h1>株式会社ABC</h1>
<p>我々の使命、それは世界にイノベーションを〜</p>
```

## 例２：アイコンボタン1

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354612/6d098078-8f84-112f-6bf5-b925338b4a64.png)


### ❌ 間違ったマークアップ
```html:間違い
<button>
  <img src="save.png" alt="保存アイコン">
</button>
```
### ✅ 正しいマークアップ
```html:正しい
<button>
  <img src="save.png" alt="保存">
</button>
```

## 例３：アイコンボタン2
![スクリーンショット 2022-05-02 23.26.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354612/b364d5f7-b56f-c3cc-15b7-06842c762e11.png)

### ❌ 間違ったマークアップ
```html:間違い
<button>
  <img src="save.png" alt="保存">保存
</button>
```

この場合は画像を`alt`属性のテキストに置き換えると以下のようにおかしくなる。

```html:間違いの置き換え
<button>
  保存保存
</button>
```

### ✅ 正しいマークアップ
```html:正しい
<button>
  <img src="save.png" alt="">保存
</button>
```

`alt`属性を空文字にすることで置き換えても以下のように意味が通じる。

```html:正しいの置き換え
<button>
  保存
</button>
```

## 例４：顔写真

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354612/8576048c-6254-a20d-08b6-4a104c3437d8.png)


### ❌ 間違ったマークアップ
```html:間違い
<h1>メンバー</h1>
<section>
  <img src="佐藤たかし.jpeg" alt="佐藤たかしの写真">
  <h1>佐藤たかし</h1>
  <p>××大学を卒業後〜</p>
</section>
<section>
  <img src="山田花子.jpeg" alt="山田花子の写真">
  <h1>山田花子</h1>
  <p>××での経験から◯◯に精通し〜</p>
</section>
```
### ✅ 正しいマークアップ
```html:正しい
<h1>メンバー</h1>
<section>
  <img src="佐藤たかし.jpeg" alt="">
  <h1>佐藤たかし</h1>
  <p>××大学を卒業後〜</p>
</section>
<section>
  <img src="山田花子.jpeg" alt="">
  <h1>山田花子</h1>
  <p>××での経験から◯◯に精通し〜</p>
</section>
```

顔写真で何か明確な伝えたいことがあるならそれを`alt`に書くが、普通はただ視覚的なアイキャッチのために入れてるだけだと思うので空でよい。厳密には写真を入れることでその人の顔を覚えてほしいという意味があって、その場合`alt="丸顔で目じりが下がったおでこの広い男"`のように書くべきなのかもしれない。が、しょせん文章で個人を識別できるだけの顔の特徴を説明できるわけないし、だったら空文字でいいと思う。


## 例５：挿絵
### ❌ 間違ったマークアップ
```html:間違い
<p>
 あなたは家の西の開けた野原に立っている。
 <img src="house.jpeg" alt="板張りの玄関ドアのついた白い家">
 そこには小さな郵便箱があった。
</p>
```

画像を`alt`属性のテキストで置き換えると以下のように前後との繋がりがおかしくなる。

```html:間違いの置き換え
<p>
 あなたは家の西の開けた野原に立っている。
 板張りの玄関ドアのついた白い家
 そこには小さな郵便箱があった。
</p>
```

### ✅ 正しいマークアップ
```html:正しい
<p>
 あなたは家の西の開けた野原に立っている。
 <img src="house.jpeg" alt="家は白く、板張りの玄関ドアがついている。">
 そこには小さな郵便箱があった。
</p>
```

純粋な挿絵ならあってもなくても文書の意味は変わらないので`alt=""`でもよい。

# 補足
- `alt`属性を付けないのと空文字の`alt`属性をつける（`alt=""`）のとでは意味が全く異なる。空の`alt`属性は画像と置き換えた時にテキストが必要ない場合に使用する。一方で`alt`属性を付けないのは画像と置き換えた時にテキストが必要になる可能性があるのだが、それが提供できない場合である。例えばSNSでユーザが投稿した画像がこの場合に当たると考えられる。
- アイコンやロゴ以外の画像（特に写真）は`alt=""`とすべき場面が多い。なぜなら伝えたいことを画像のみでしか表現しないことはまれだから。普通は伝えたいことを文で書いたうえで、理解の助けとするための図示をしたりアイキャッチのために関連する画像を置いたりすることが多い。これらの用途の画像に空文字以外の`alt`属性を付けようとしても周囲の文章と同じ内容にしかならず、画像を`alt`属性のテキストに置き換えた時に同じことを2回言うような不自然なことになる。文章で画像で伝えたいことを書いてあるなら画像の`alt`属性でそれをもう一度書く必要はなく空文字でよい。

# 参照
標準規格書にはここで挙げた他にも、`alt`属性の正しい使い方の例をこれでもかというほど沢山載せている。たぶん間違った使い方が多いからだろう。
[https://html.spec.whatwg.org/multipage/images.html#alt](https://html.spec.whatwg.org/multipage/images.html#alt)