1.

HTML a要素の使い方|href・target・rel noopenerのセキュリティ

編集
この記事の要点
  • a 要素(アンカー要素)はハイパーリンクを作る HTML 要素
  • href 属性がある場合はリンク、ない場合はプレースホルダーとして扱われる
  • 主な属性: href / target / rel / download / hreflang / type
  • target="_blank" を使うときは必ず rel="noopener noreferrer"を付けてセキュリティ対策
  • ブロックレベル要素を中に入れることが HTML5 から許可されており、カード全体をリンクにできる

a 要素とは

a 要素(アンカー要素)は HTML でハイパーリンクを作るための要素です。テキスト、画像、ブロック要素まで何でも包んで「クリックすると別の URL へ遷移する」リンクに変えられます。

基本構文

<!-- 通常のリンク -->
<a href="sample.html">サンプルへ</a>

<!-- 別タブで開く -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">外部サイト</a>

<!-- ダウンロード -->
<a href="report.pdf" download>レポート PDF</a>

<!-- ページ内アンカー -->
<a href="#section3">第 3 章へ</a>

<!-- href なし(プレースホルダー) -->
<a>後で設定予定</a>

a 要素に指定できる主な属性

属性名意味備考
hrefリンク先 URL絶対 / 相対 / ハッシュ / mailto / tel など
targetリンク先の開き方_self / _blank / _parent / _top
relリンクの関連性noopener / noreferrer / nofollow / author など
downloadダウンロードファイル指定属性値がファイル名になる
hreflangリンク先の言語BCP 47(例: jaen-US
typeリンク先の MIME タイプ例: application/pdf
referrerpolicyReferer 送出方針プライバシー / 解析制御

href の書き方

形式挙動
絶対 URLhttps://example.com/about完全な URL を指定
プロトコル相対//example.com/about現在の HTTP/HTTPS を継承
ルート相対/aboutサイトルートからの相対
ドキュメント相対about.html / ../docs/x.html現ファイルからの相対
フラグメント#section3同一ページ内の id へジャンプ
mailtomailto:info@example.comメーラを起動
teltel:+819012345678電話アプリを起動
JavaScriptjavascript:void(0)非推奨。button の方が適切

target 属性とセキュリティ

target="_blank" で新しいタブを開く場合、リンク先が window.opener 経由で元タブに干渉できる脆弱性(タブナビングなど)が知られています。必ず rel="noopener noreferrer" を付けます。

<!-- 推奨 -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
  外部サイト
</a>
rel 値意味
noopener新しいタブから window.opener を切る(必須)
noreferrerReferer ヘッダを送らない(プライバシー)
nofollow検索エンジンにリンクを辿らせない
ugcユーザー生成コンテンツのリンク
sponsored広告 / 有償リンク

download 属性

<!-- ファイル名を指定してダウンロード -->
<a href="/files/report.pdf" download="2026年度報告.pdf">
  レポートをダウンロード
</a>

属性値を省略するとサーバ側のファイル名がそのまま使われます。同一オリジンでないと無視されるブラウザ仕様なので、外部 URL に download を付けても期待通り動かないことがあります。

ブロック要素を中に入れる

HTML5 以降は a 要素の中に divsection などのブロック要素を入れられます。これによりカード全体をクリック可能にできます。

<a href="/article/123" class="card">
  <article>
    <h3>記事タイトル</h3>
    <p>本文の冒頭...</p>
    <img src="thumb.jpg" alt="" />
  </article>
</a>

ただし a の中にさらに abutton など他の対話可能要素を入れることはできません(インタラクティブコンテンツの入れ子禁止)。

アクセシビリティ(aria)

リンクの目的が文脈だけでは伝わらない場合、aria-label を補います。アイコンだけのリンクや「もっと見る」を多用するページで重要です。

<!-- アイコンだけのリンク -->
<a href="/search" aria-label="検索ページを開く">
  <svg>...</svg>
</a>

<!-- 「もっと見る」が複数ある場合 -->
<a href="/news/1" aria-label="ニュース記事『新製品発表』の続きを読む">
  続きを読む
</a>

href なしの a 要素

href を持たない a 要素はプレースホルダーとして扱われます。CSS のホバー効果も付かず、キーボードフォーカスも当たりません。後から JS でリンク化する予定の場所などに使います。

クリックできるが遷移しない要素が必要なときは、a ではなく button 要素を使うのが正解です。

よくあるトラブル

症状原因と対処
外部リンクから戻ると元タブが書き換わっていたrel="noopener" 漏れ。タブナビング対策必須
download が効かないクロスオリジンの可能性。Content-Disposition ヘッダで代替
ページ内アンカーでヘッダに隠れるscroll-margin-top でオフセット指定
クリック時に遷移しないhref="#" + preventDefault 漏れ。button 推奨
SEO で内部リンクが評価されないjavascript: や onclick のみのリンクは評価されにくい

FAQ

Q: a 要素にホバー時の色をデフォルトで付けたい
A: ブラウザ既定で a:link(青)、a:visited(紫)、a:hovera:active の擬似クラスが効きます。CSS でまとめて上書き可能です。

Q: 同一ページ内のリンクで戻るボタンの動きは?
A: フラグメントリンクは履歴に追加されるので、戻るボタンで戻れます。SPA の場合は history.pushState で制御します。

Q: メールリンクで件名を指定したい
A: mailto:info@example.com?subject=お問い合わせ&body=本文 のようにクエリで指定できます。

関連

編集
Post Share
子ページ
  1. href属性
  2. target属性
  3. download 属性
  4. rel 属性
  5. hreflang属性
  6. type属性
同階層のページ
  1. a要素
  2. link要素
  3. button要素

最近更新/作成されたページ