# 新しいタブで開くことを伝えないリンク

Source: https://easeweb.dev/learn/new-tab-links
Topics: ボタンとリンク > 新しいタブで開くリンクやファイルへのリンクが、そのことを伝える (WCAG 3.2.5)
The fix: リンクから target="_blank" を外し、同じタブで開きます。どうしても新しいタブが必要な場合は、そのことをリンクの言葉で伝えます。「（新しいタブで開きます）」のような見える文字にするか、リンクに付けたアイコンの名前にします。
Test with: keyboard, screen reader, zoom, mouse
References: https://www.w3.org/WAI/WCAG22/Understanding/change-on-request.html https://www.w3.org/WAI/WCAG22/Techniques/failures/F22 https://www.w3.org/WAI/WCAG22/Techniques/html/H83 https://www.w3.org/WAI/WCAG22/Techniques/general/G200 https://www.w3.org/WAI/WCAG22/Techniques/general/G201 https://design-system.service.gov.uk/styles/links/ https://www.nngroup.com/articles/new-browser-windows-and-tabs/

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

## 場面

ある衣料品のショップの商品ページで、リネンのシャツを4つのサイズで売っています。価格の下には「どのサイズにするか迷ったら」という文があり、サイズガイドへリンクしています。ショップは利用者に戻ってきて買ってほしいので、このリンクは `target="_blank"` で新しいタブに開くようにしてあります。リンクの言葉は、そのことを何も伝えません。スクリーンリーダーの利用者がリンクへ移動すると「サイズガイドを見る、リンク」と聞こえます。たどると、ほかの新しいページと同じようにガイドが読み上げられます。手持ちのシャツを測ってMサイズだと分かり、選ぶために「戻る」を押します。何も起きません。ガイドは新しいタブの最初のページなので、パソコンのChrome、Edge、Firefoxには戻る先がなく、ボタンは灰色になっています。シャツのページは、左隣のタブで開いたままです。しかし、そこにあることを伝えるものは何もありませんでした。

同じリンクは、ほかの形でもつまずきます。

- リンクの言葉の後に、四角から矢印が出るアイコンがある。新しいタブを表すおなじみの印だが、`aria-hidden="true"` のため、スクリーンリーダーでは「サイズガイドを見る、リンク」としか聞こえない。アイコンを知らない人にも、知らせとしては伝わらない。
- コンテンツ管理システムが、配送会社の追跡ページなど、サイトの外へ出るリンクすべてに `target="_blank"` を付ける。ページのリンクのほとんどが新しいタブで開くのに、それを伝えるものは1つもない。
- ボタンやリンクのクリックのハンドラーが `window.open()` を呼ぶ。結果は同じだが、マークアップを見ても、それと分かる属性がない。

## 確認できる問題

達成基準3.2.5「要求による変化」はレベルAAAです。新しいウィンドウやタブを開くといった状況の変化は、利用者が求めたときにだけ起きるようにするか、そうした変化を止める手段を用意しなければなりません。このリンクは失敗例F22に当たります。新しいウィンドウを開くことを伝える文字のないリンクは、利用者が求めていないウィンドウを開きます。リンクをたどることは新しいページを求めることで、そのページを別の場所で開くことまで求めてはいません。ページは属性1つでこれができ、ブラウザーはそのことを何も伝えないため、利用者は変化が起きてから気づくことになります。

リンクで新しいウィンドウを開く場合の十分な達成方法の1つがH83です。`target` はそのままにして、知らせる言葉をリンクのテキストに入れるため、誰もが押す前に分かります。同じタブで開けば、リンクをたどって求めたこと以外は何も変わらないため、これも適合します。参考の達成方法G200は、新しいタブを開くのは必要な場合だけにするよう勧めています。アイコンだけでは、文字で伝えたことになりません。この例のように名前がなければスクリーンリーダーは何も読み上げず、見える人にも、意味を知らなければ伝わりません。

## 利用者への影響

スマートフォンでは新しいタブが画面全体に表示され、それまでのページは別のタブに隠れて見えなくなります。これは見落とされがちです。

## 自動チェックとAIの限界

リンクには分かりやすい名前があるため、axeなどの自動チェックは合格にします。どのルールも `target` を見ていません。EaseWebの診断は、`_self`、`_parent`、`_top` 以外の `target` を持つリンクや、`onclick` 属性で `window.open()` を呼ぶリンクのうち、名前にも説明にも新しいタブやウィンドウを知らせる言葉がないものを、確認の依頼として挙げます。3.2.5はレベルAAAで、新しいタブが必要か、その言葉が知らせになっているかは、人にしか判断できないからです。上の最後の例のように、スクリプトから登録したクリックのハンドラーはマークアップにないため、診断では見つけられません。AIのコードアシスタントに外部へのリンクを頼むと、習慣のように `target="_blank"` と `rel="noopener noreferrer"` を付け、言葉のないアイコンを添えることがあります。アクセシブルにしてと頼むと、そのアイコンに `aria-hidden="true"` を付けることもあり、そうなるとスクリーンリーダーの利用者には何も伝わりません。

## 修正前：伝えずに新しいタブで開くリンク

```html
<p>
  Not sure which size to choose?
  <a href="/size-guide" target="_blank">See the size guide</a>
</p>
```

`target="_blank"` で、ブラウザーはガイドを新しいタブに開きます。リンクの名前は「See the size guide」で、どこに開くかは何も伝えません。利用者が新しいタブに気づくのは、開いた後です。気づかないこともあります。

## 修正前：名前のないアイコン

```html
<p>
  Not sure which size to choose?
  <a href="/size-guide" target="_blank">
    See the size guide
    <svg viewBox="0 0 24 24" width="16" height="16" aria-hidden="true">…</svg>
  </a>
</p>
```

アイコンは、それが見えて意味を知っている人のためにあります。しかし `aria-hidden="true"` でリンクの名前から外れるため、スクリーンリーダーでは「See the size guide、リンク」としか聞こえません。ほかの人にとっても、知らせになるかどうかはアイコンを知っているかどうか次第です。

## 修正後：ガイドを同じタブで開く

```html
<p>
  Not sure which size to choose?
  <a href="/size-guide">See the size guide</a>
</p>
```

`target` がなければ、ガイドは同じタブで開き、「戻る」でシャツのページに元のまま戻れます。ガイドをシャツの横に並べたい人は、中クリック、CtrlキーかCommandキーを押しながらのクリック、コンテキストメニュー、スマートフォンでの長押しで、自分で新しいタブに開けます。リンクをたどって求めたこと以外は何も変わらないので、知らせる必要もありません。

## 修正後：リンクの言葉で伝える

```html
<p>
  Not sure which size to choose?
  <a href="/size-guide" target="_blank">See the size guide (opens in a new tab)</a>
</p>
```

達成方法H83の形です。言葉は画面にもリンクの名前にもあるため、誰もがリンクをたどる前に、読むか「See the size guide (opens in a new tab)、リンク」と聞くことになります。言葉はリンクの最初にある見える言葉の後に続くため、名前は今までどおり、見えている言葉で始まります。音声操作の利用者が口にするのも、この言葉です。

## 修正後：アイコンに名前を付ける

```html
<p>
  Not sure which size to choose?
  <a href="/size-guide" target="_blank">
    See the size guide
    <svg viewBox="0 0 24 24" width="16" height="16" role="img" aria-label="(opens in a new tab)">…</svg>
  </a>
</p>
```

デザインのアイコンはそのまま残し、アイコンに名前を付けます。この名前がリンクの名前の一部になります。スクリーンリーダーでは「See the size guide (opens in a new tab)、リンク」と聞こえます。リンクの名前を聞いたり読んだりする人には、これで適合します。ページを見る人に見えるのはアイコンだけなので、四角から出る矢印の意味を知っている人にしか伝わりません。認知障害のある人をはじめ、知らない人は多くいます。

## どの方法を選ぶか

3つとも3.2.5を満たします。ガイドは同じタブで開いてください。どのブラウザーでも「戻る」が使えたままになるのはこの方法だけで、言葉もいらず、新しいタブがほしい人は自分で開けます。新しいタブは、入力途中のフォームの横で開くヘルプのように、それがないとページが何かを失う場合だけにし、その場合は知らせる言葉をリンクに入れて、誰にでも見えて聞こえるようにします。アイコンに名前を付けるのは、デザインにアイコンがあり、言葉を表示できない場合です。スクリーンリーダーの利用者には伝わりますが、アイコンを知らない人には推測を強いることになります。

## 実装の判断

新しいタブで開くリンクがいくつも並ぶ場合は、GOV.UKが勧めるように、「以下のリンクは新しいタブで開きます」のような一文をその前に置くと、リンクごとに言葉を繰り返さずに済みます。ただし、リンクからリンクへ移動するスクリーンリーダーの利用者はその一文を聞かないため、各リンクの名前にも、隠した文字で言葉を加えてください。

知らせる言葉を `title` 属性に入れないでください。ブラウザーはマウスを載せたときのツールチップとして表示し、ほとんどはキーボードやタッチ操作では何も表示しません。スクリーンリーダーも確実には読みません。G201の例の1つのように `aria-describedby` だけで伝える方法は、スクリーンリーダーの利用者にしか届かず、説明を読み上げない設定のスクリーンリーダーもあります。達成方法H83は知らせる言葉をリンクのテキストに入れるため、誰にでも届きます。

上の例のように、見えている言葉を名前の先頭に置いたままにし、名前が利用者に見えるラベルで始まるようにします。[表示と名前が食い違うボタンとリンク](/ja/learn/label-in-name)も参照してください。

新しいウィンドウを開く方法には、どれにも同じ知らせが必要です。`target="help"` のようにほかの名前の `target` も、`window.open()` を呼ぶスクリプトも同じです。ページを離れると入力した内容が失われるフォームでは、ヘルプを新しいタブで開くより、入力した内容を保持して、ヘルプを同じタブで開けるようにするほうがよい解決です。

## 修正の確認

1. ページのリンクをすべてたどり、`target` かスクリプトで新しいタブやウィンドウを開くものを書き留める。
2. スクリーンリーダーで、そうしたリンクへそれぞれ移動し、たどる前に、名前の一部として知らせる言葉が聞こえるか確認する。
3. リンクにアイコンがある場合は、アイコンに新しいタブで開くことを伝える名前があるか、言葉がリンクのテキストにあるか確認する。
4. 画面拡大ソフトとスマートフォンで、そうしたリンクをそれぞれたどり、元のページへ戻る方法が分かるか確認する。それぞれ、そもそも新しいタブが必要かも考える。

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ページのリンクや、それを書き出すコンテンツ管理システムを変更した際は、再度確認します。

## 制限

このサンプルは、どのページでも同じ結果になることを保証するものではありません。対象は新しいタブを開くリンクです。PDFを開くリンクやファイルをダウンロードするリンクも、ファイルの種類と大きさでそのことを伝えるべきで、文書そのものもアクセシブルである必要があります。[スクリーンリーダーで読めない、スキャンやタグなしのPDF](/ja/learn/accessible-pdfs)を参照してください。リンクの言葉がリンク先を伝えているかは、別の問題です。[名前のないバナーや画像のリンク](/ja/learn/empty-links)を参照してください。ページを読み込んだときなど、リンクを押していないのに開くウィンドウは、別の形で同じ基準に適合しません。利用者が使うスクリーンリーダー、画面拡大ソフト、スマートフォンで確認してください。

---

このガイドをコーディングエージェントで使う: MCP https://easeweb.dev/mcp（設定は https://easeweb.dev/ja/services/developers）
