外部リンク
a target=_blank, rel=noopener noreferrer
target="_blank" で新しいタブに開く外部リンクを作成できる。セキュリティのため rel="noopener noreferrer" の併用が必須。
外部リンクのデモ
target="_blank" と rel="noopener noreferrer" を組み合わせた外部リンクの例。アイコンや視覚的な手がかりでユーザーに新タブで開くことを伝えるのが推奨される。
<!-- 基本形: rel="noopener noreferrer" は必須 -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
外部サイト
</a>
<!-- アクセシビリティ: 新タブで開くことをスクリーンリーダーに伝える -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
外部サイト
<span class="sr-only">(新しいタブで開く)</span>
</a>
/* スクリーンリーダー専用テキスト */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
}セキュリティ: タブナビング攻撃とは
rel="noopener noreferrer" を付けない場合、リンク先のページが window.opener を通じて元のページを操作できる脆弱性(タブナビング)が発生する。
危険: rel なし
<a href="https://malicious.example" target="_blank">リンク</a> // リンク先の悪意あるページが実行できること: window.opener.location = "https://phishing.example"; // → 元タブを偽サイトにリダイレクト可能!
安全: rel="noopener noreferrer" あり
<a href="https://example.com" target="_blank" rel="noopener noreferrer">リンク</a> // window.opener は null になり、 // 元のページへのアクセスが不可能になる
<!-- noopener: window.opener を null にする -->
<!-- noreferrer: Refererヘッダーを送信しない(noopenerも含む) -->
<a href="https://example.com"
target="_blank"
rel="noopener noreferrer">外部リンク</a>
/* 現代のブラウザでは target="_blank" に自動で noopener が付与されるが、
明示的に書くことで古いブラウザでも安全になる */target 属性の値
target 属性はリンク先をどのコンテキストで開くかを指定する。
_blank新しいタブ(またはウィンドウ)で開く。最もよく使われる。rel="noopener noreferrer" を必ず付ける。
_self現在のタブで開く(デフォルト動作)。target属性を省略した場合と同じ。
_parent親フレーム(iframe の親)で開く。フレームなし環境では _self と同様。
_top最上位のブラウジングコンテキストで開く。フレームを全て無効化して遷移する。
<!-- 新しいタブで開く -->
<a href="#" target="_blank" rel="noopener noreferrer">新しいタブ</a>
<!-- 現在のタブで開く(デフォルト) -->
<a href="#" target="_self">現在のタブ</a>
<!-- 親フレームで開く -->
<a href="#" target="_parent">親フレーム</a>
<!-- 最上位コンテキストで開く(全フレームを破壊) -->
<a href="#" target="_top">最上位</a>referrerpolicy 属性
referrerpolicy 属性でリンク遷移時に送る Referer ヘッダーを細かく制御できる。rel="noreferrer" より詳細な設定が可能。
| 値 | 送信内容 |
|---|---|
no-referrer | Referer を一切送らない |
origin | オリジン(scheme + host + port)のみ送る |
strict-origin-when-cross-origin | 同一オリジン時はフルURL、クロスオリジン時はオリジンのみ(デフォルト) |
no-referrer-when-downgrade | HTTPS→HTTP の場合は送らない、それ以外はフルURL |
unsafe-url | 常にフルURLを送る(非推奨) |
<!-- Refererを送らない -->
<a href="#" referrerpolicy="no-referrer">リンク</a>
<!-- オリジンのみ送る -->
<a href="#" referrerpolicy="origin">リンク</a>
<!-- rel="noreferrer" は referrerpolicy="no-referrer" と同等 + noopener も含む -->
<a href="#" target="_blank" rel="noopener noreferrer">リンク</a>比較表: target 属性の値
| 値 | 開く場所 | rel="noopener" 必要 | 主な用途 |
|---|---|---|---|
_blank | 新しいタブ / ウィンドウ | 必須 | 外部リンク、PDF、別サービスへの遷移 |
_self | 現在のタブ(デフォルト) | 不要 | 通常のページ内遷移 |
_parent | 親フレーム | 状況による | iframe 内からの遷移 |
_top | 最上位コンテキスト | 状況による | フレームを全て抜け出した遷移 |
Tips: rel="noopener noreferrer" はセキュリティの必須対策
target="_blank"を使う際は 必ずrel="noopener noreferrer"を付ける。これが最も重要なルール。noopener: リンク先ページからwindow.opener経由で元ページを操作できなくする(タブナビング防止)。noreferrer: Referer ヘッダーを送らないことに加え、noopenerの効果も含む。両方書くのは後方互換性のため。- NEWモダンブラウザ(Chrome 88+, Firefox など)では
target="_blank"に自動的にnoopenerが適用されるが、明示的に書くことで古いブラウザでの安全性も確保できる。 - 外部リンクには視覚的なインジケーター(外部リンクアイコン)を付け、ユーザーが新しいタブで開くことを事前に把握できるようにするとアクセシビリティが向上する。
🤖 AIプロンプトテンプレート
以下の要件を満たす、外部リンクのHTML・CSSサンプルを作成してください。 - `target="_blank"` と `rel="noopener noreferrer"` を必ず組み合わせること - 外部リンクであることを示すアイコン(SVGまたは Unicode)を付与すること - `rel="noopener"` が防ぐセキュリティリスク(タブナビゲーション攻撃)を説明すること - `rel="noreferrer"` がリファラー情報を送信しない効果も説明すること - スクリーンリーダー向けに「新しいタブで開く」旨を `aria-label` で伝えること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。