読み込み中...

HTMLで画像にリンクを貼る方法7選

HTMLで画像とリンクを使ったウェブページの作成方法 HTML
この記事は約20分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

画像にリンクを付ける作業は、商品ページ、ポートフォリオ、バナー、ギャラリー、資料ページなど多くのウェブ開発で使われます。見た目だけなら画像を置くだけで済みますが、クリック後の移動先、代替テキスト、読み込み速度、スマートフォンでの押しやすさまで整えると、ユーザーが迷いにくい構造になります。

その中心になるのは、<a>タグでクリック範囲を作り、その中に<img>タグを入れる書き方です。画像の埋め込みとリンクの役割を分けて考えると、レイアウト崩れやアクセシビリティの不足を避けやすくなるのが基本です。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

画像リンクの結論と最小構成

画像にリンクを貼る最小構成は、<a href="...">の内側に<img src="..." alt="...">を置く形です。リンク先はhref、画像ファイルはsrc、代替テキストはaltで決まります。

<a href="/web/2387/">
  <img src="/images/sample-banner.jpg" alt="アンカーリンクの解説ページへ移動するバナー">
</a>

結果: 期待される表示は、バナー画像をクリックすると指定したページへ移動する状態です。

動作確認環境
  • HTML Living Standard
  • Google Chrome 126 / Firefox 127 / Safari 17
  • CSS: Cascading Style Sheets Level 2 Revision 1 以降の一般的なブラウザ実装

公式ドキュメントによれば、MDNのa要素はハイパーリンクを作る要素で、href属性に移動先を入れます。同様に、MDNのimg要素ではsrcaltが画像表示と代替情報の中心になります。

📖 この記事で学べること
  • 画像リンクを作るタグの組み合わせ
  • 別タブ、ページ内移動、ダウンロード向けリンクの書き方
  • CSSでクリック範囲と見た目を整える考え方
  • アクセシビリティとSEOで見落としやすい設定
  • ウェブ開発で使いやすい埋め込みパターン

画像リンクで使う要素と属性の早見表

これらの要素と属性は、画像の埋め込み、リンク先の設定、表示サイズ、読み込み方を分担するのが目安です。そのため、どれか一つだけを暗記するより、役割を表で整理したほうが実装時に迷いにくくなります。

分類書き方役割使いどころ注意点
リンク<a>クリックできる範囲を作る画像全体を移動ボタンにするhrefなしでは移動先が決まりません
属性href移動先URLを決める内部リンクや外部リンクに使う自分自身のURLを入れないよう確認します
画像<img>画像を表示するバナーやサムネイルを置くaltを空欄にする判断は慎重に行います
属性src画像ファイルの場所を示す.jpg.pngを読み込むパスの誤りで非表示になります
属性alt代替テキストを渡す読み上げや画像非表示時に使う装飾画像なら空文字も候補です
属性width表示幅の手がかりを渡すレイアウトの揺れを抑えるCSSとの関係を合わせます
属性height表示高の手がかりを渡す画像領域を先に確保する縦横比の不一致に注意します
属性loading="lazy"遅延読み込みを使う下部の画像に向きますファーストビューの主画像では慎重に扱います
属性decoding="async"画像デコードを非同期寄りにする多数の画像を置くページで使う体感差はページ構成で変わります
属性target="_blank"別タブで開く外部サイトへの移動に使うrelを併用します
属性rel="noopener noreferrer"別タブ遷移時の安全性を高める外部リンクで使うtargetとセットで考えます
属性download保存動作を促すPDFや画像素材の配布に使うブラウザやサーバー設定の影響を受けます
属性title補足情報を持たせる説明を追加したい場合に使う主要な説明をtitleだけに頼りません
属性aria-label支援技術向けの名前を補う画像の説明だけでは不足する場合に使うaltとの重複に注意します
CSSdisplay:block画像下の余白を抑えるバナーの隙間対策に使うインライン表示との差を理解します
CSSmax-width:100%親幅に合わせて縮むレスポンシブ画像に使う元画像より大きくしたい場合は別設計です
CSSheight:auto縦横比を保つ横幅可変の画像に使う固定高レイアウトでは別調整が必要です
CSSobject-fit:cover枠内に切り抜いて収めるカード型サムネイルに使う重要な部分が切れる可能性があります
CSSborder-radius角丸を作るカードやプロフィール画像に使うクリック範囲の見た目と合わせます
CSSbox-shadow影を付ける押せる印象を補う過剰な影は読みづらさにつながります
CSSoutlineフォーカス表示を作るキーボード操作時に使う消すだけの調整は避けます
CSS:hoverマウス操作時の変化を作るクリック可能な画像に使うタッチ端末では常時見えません
CSS:focus-visibleキーボード時の強調を作るアクセシビリティ対応に使う色だけに頼らない設計が向きます
要素<figure>図版をまとまりにする説明付き画像に使うリンク範囲をどこまでにするか決めます
要素<figcaption>キャプションを置く写真の出典や説明に使う画像のaltと役割を分けます
要素<picture>条件別に画像を切り替えるWebPやAVIF対応に使う最後に<img>を置きます
要素<source>候補画像を渡す画面幅や形式で分岐するmediatypeを確認します
属性srcset解像度別の候補を渡す高密度ディスプレイに使うファイル容量とのバランスが必要です
属性sizes表示幅の見込みを渡すレスポンシブ画像に使うCSSの実寸と大きくずれると無駄が増えます
mailto:メール作成へつなげる問い合わせ画像に使うスパム対策も考えます
tel:電話発信へつなげるスマートフォン向け導線に使うPC表示時の案内も必要になります

方法1:画像全体をクリックできるリンクにする

最も素直な形は、<a>タグの中に<img>タグを入れる書き方です。この形なら画像全体がクリック範囲になり、バナーやカード型の導線として扱いやすくなります。

ただし、リンク先の内容と画像の意味がずれていると、ユーザーにも検索エンジンにも意図が伝わりにくくなります。そのため、altには画像そのものの説明だけでなく、リンク先を推測できる文脈を含めると自然です。

<a href="/web/2445/">
  <img src="/images/calendar-thumbnail.jpg" alt="カレンダー作成ページへ移動するサムネイル" width="640" height="360">
</a>

結果: 期待される表示は、カレンダー関連のサムネイル画像全体がリンクとして反応する状態です。

この構成はウェブ開発の入門段階でも使いやすい一方、装飾だけの画像には向きません。装飾画像をリンクにするとクリックできる理由が伝わりにくいため、テキストリンクやボタン風の要素と組み合わせる判断も必要になります。

方法2:別タブで画像リンクを開く

外部サイトや資料ページへ移動させる画像リンクでは、target="_blank"で別タブを開く指定が使われます。このとき、rel="noopener noreferrer"を併用すると、遷移先から元ページを操作されるリスクを抑えられますし、ここがポイントです。

一方、同じサイト内の関連記事へ移動するだけなら、同じタブのまま遷移するほうが流れを保ちやすい場合があります。内部リンクの例としては、アンカーリンクの使い方ツリー構造の理解へつなげる設計が考えられます。

<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img" target="_blank" rel="noopener noreferrer">
  <img src="/images/reference-link.jpg" alt="MDNの画像要素リファレンスを別タブで開く">
</a>

結果: 期待される表示は、画像をクリックすると公式リファレンスが別タブで開く状態です。

⚠️ 注意: target="_blank"を外部リンクで使う場合は、rel="noopener noreferrer"を合わせて書くのが一般的です。画像リンクでも通常のテキストリンクでも考え方は同じです。

方法3:ページ内の特定位置へ移動させる

画像をクリックして同じページ内の見出しへ移動させたい場合は、移動先にidを付け、リンク側のhref#付きで参照を書きます。長いチュートリアルや画像ギャラリーでは、ページ上部のバナーから目的の説明へ移動できるため、読み進める負担を減らせます。

このとき、idの値は同じページ内で重複させません。重複するとブラウザがどの位置へ移動すべきか判断しづらくなり、保守時にも混乱しやすくなるのがポイントです。

<a href="#gallery">
  <img src="/images/gallery-banner.jpg" alt="作品ギャラリーの位置へ移動する">
</a>

<h2 id="gallery">作品ギャラリー</h2>

結果: 期待される表示は、画像をクリックすると同じページ内の作品ギャラリー見出し付近へ移動する状態です。

関連する実装は、ページ内移動を扱うアンカーリンクの記事と相性があります。ウェブ開発で目次、商品詳細、フォーム位置への誘導を作るときにも同じ考え方を使えます。

方法4:レスポンシブ画像をリンク化する

スマートフォンとPCで同じ画像を使う場合、横幅が固定されたままだと画面からはみ出すことがあるのが一般的です。その対策として、画像にはmax-width:100%height:autoを組み合わせ、親要素の幅に合わせて縮むようにします。

その指定は画像タグではなくCSS側に置くと、複数の画像リンクへまとめて適用できます。リンク要素にもdisplay:inline-blockdisplay:blockを与えると、クリック範囲と見た目の関係を制御しやすくなるのが現実的です。

<a class="image-link" href="/web/2517/">
  <img src="/images/slideshow.jpg" alt="スライドショー作成ページへ移動する画像">
</a>

<style>
.image-link {
  display: inline-block;
}
.image-link img {
  display: block;
  max-width: 100%;
  height: auto;
}
</style>

結果: 期待される表示は、画像が親要素の幅に合わせて縮み、クリックできる範囲も画像サイズに沿う状態です。

この書き方は、スライドショーや一覧カードのように複数の画像を並べる画面で使いやすい構成です。関連するレイアウト例は、スライドショー作成の記事でも応用できます。

方法5:画像リンクにホバーとフォーカスを付ける

画像だけが置かれていると、クリックできる要素なのか単なる装飾なのか判断しづらい場合があります。そのため、:hoverで透明度や影を変え、:focus-visibleでキーボード操作時の枠線を表示すると、操作対象として認識しやすくなると整理できます。

ただし、色の変化だけに依存すると、見え方の違いがあるユーザーへ伝わりにくくなります。outlinebox-shadowを組み合わせると、視覚的な変化を複数の手がかりで補えます。

<a class="card-link" href="/web/2624/">
  <img src="/images/contact-form.jpg" alt="問い合わせフォーム作成ページへ移動する">
</a>

<style>
.card-link img {
  display: block;
  max-width: 100%;
  height: auto;
  border-radius: 8px;
  transition: opacity .2s ease, box-shadow .2s ease;
}
.card-link:hover img {
  opacity: .86;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .18);
}
.card-link:focus-visible {
  outline: 3px solid #2563eb;
  outline-offset: 4px;
}
</style>

結果: 期待される表示は、マウスを重ねると画像の見た目が変わり、キーボードで選択したときに枠線が出る状態です。

💡 Tips: outline: noneだけを書くと、キーボード利用者が現在位置を見失いやすくなります。消す場合でも、代替のoutlinebox-shadowを用意する判断が必要です。

方法6:画像リンクからファイルをダウンロードさせる

画像やPDFを配布するページでは、download属性を使って保存を促すリンクを作れます。この埋め込みは、素材配布、テンプレート配布、説明資料のダウンロードボタンに向いていると理解できます。

一方、download属性の動きは、同一オリジンかどうか、サーバーのContent-Disposition、ブラウザ仕様によって変わる場合があります。確実に保存させたいファイル配布では、サーバー側のヘッダー設定も合わせて確認します。

<a href="/files/sample-template.pdf" download>
  <img src="/images/download-button.png" alt="PDFテンプレートをダウンロードする">
</a>

結果: 期待される表示は、画像をクリックするとPDFファイルの保存が促される状態です。

この使い方では、画像そのものがボタンのように振る舞いると覚えるとよいでしょう。そのため、altには「ダウンロード」やファイル種別を含め、クリック後の動作が想像できる文にするのが自然です。

方法7:picture要素で画像形式を切り替えながらリンクする

高画質な画像を多く扱うページでは、<picture><source>を使い、ブラウザが対応する形式を選べるようにできます。リンク化する場合は、<a>タグの中に<picture>全体を入れる構成が扱いやすいです。

この構成では、type="image/avif"type="image/webp"で候補を渡し、最後に通常の<img>を置きます。対応しないブラウザでも代替画像が表示されるため、段階的な埋め込みとして使えると考えられます。

<a href="/web/2597/">
  <picture>
    <source srcset="/images/tree.avif" type="image/avif">
    <source srcset="/images/tree.webp" type="image/webp">
    <img src="/images/tree.jpg" alt="ツリー構造の解説ページへ移動する図版" width="800" height="450">
  </picture>
</a>

結果: 期待される表示は、対応ブラウザではAVIFやWebPが選ばれ、非対応時はJPEG画像がリンク付きで表示される状態です。

公式仕様に近い情報を確認したい場合は、WHATWGのpicture要素も参照できます。ウェブ開発で画像容量を調整する場面では、形式の切り替えと表示サイズの両方を合わせて考える必要があります。

alt属性とリンク文脈の考え方

画像リンクでは、altが単なる画像説明に留まらない場合があると言えるでしょう。たとえばバナー画像が「問い合わせフォームへ進む」役割を持つなら、altにもリンク先の目的が伝わる文を入れると理解しやすくなります。

一方、隣に同じ内容のテキストリンクがあり、画像が装飾として添えられているだけなら、alt=""を検討する余地があります。ただし、画像だけがクリック対象になっている場合に空のaltを使うと、支援技術ではリンクの目的が伝わらない可能性があるのが基本です。

初心者がつまずきやすいのは、画像の見た目だけで判断してaltを短くしすぎる点です。「犬の写真」より「ペット相談フォームへ移動する写真」のように、必要な場面ではリンク先の文脈を含めると整理しやすくなります。

内部リンクとして画像を使うときのSEO設計

画像リンクも内部リンクの一種として扱われます。そのため、移動先の内容、周辺テキスト、alt、見出し構造がそろっていると、ページ間の関係を伝えやすくなるのが目安です。

具体的には、フォーム作成へ誘導する画像なら問い合わせフォームの作り方へ、カレンダーUIの画像ならカレンダー作成の記事へつなげるのが自然です。リンク先と画像の内容が一致しているほど、ユーザーの期待と遷移後の内容がずれにくくなります。

ただし、同じ画像を何度も貼り、同じリンク先へ過剰に誘導する設計は読みづらさにつながります。本文の流れに沿って必要な位置へ置き、テキストリンクと画像リンクの役割を分けるほうが実用的です。

カード型レイアウトで画像リンクを使う

記事一覧や商品一覧では、画像、タイトル、説明文をまとめたカード全体をリンク化したくなることがあるのがポイントです。この場合、カード全体を<a>にする設計と、画像だけをリンクにしてタイトルにも別のリンクを置く設計があります。

カード全体をリンクにすると押しやすくなりますが、内部に別リンクやボタンを入れにくくなります。一方、画像とタイトルだけをリンクにすると構造は単純になり、説明文やタグ表示を独立して扱いやすくなるのが一般的です。

<article class="post-card">
  <a class="post-card__image" href="/web/2517/">
    <img src="/images/slider-card.jpg" alt="スライドショー作成ページのサムネイル">
  </a>
  <h3><a href="/web/2517/">スライドショーを作る</a></h3>
  <p>画像を切り替えるUIを作るための基礎を扱います。</p>
</article>

結果: 期待される表示は、カード内の画像と見出しが同じ記事へ移動するリンクとして働く状態です。

この形なら、カード内にカテゴリ名やタグ一覧を足しても構造が崩れにくくなります。ウェブ開発でCMSテーマを作るときにも、一覧カードの設計としてよく採用されますが、これは押さえたい点です。

埋め込み画像のサイズと読み込み速度を整える

画像リンクは見た目の面積が大きいため、ファイルサイズがページ速度に影響しやすい要素です。そのため、実際に表示する寸法に近い画像を用意し、必要に応じてsrcsetsizesで候補を渡します。

一方、すべての画像に大きな高解像度ファイルを使うと、読み込み量が増えます。ファーストビューでは表示速度を優先し、下部の画像にはloading="lazy"を使うなど、配置に応じて切り替えるのが現実的です。

<a href="/web/2445/">
  <img
    src="/images/calendar-640.jpg"
    srcset="/images/calendar-640.jpg 640w, /images/calendar-1280.jpg 1280w"
    sizes="(max-width: 768px) 100vw, 640px"
    alt="カレンダーUI作成ページへ移動する画像"
    width="640"
    height="360"
    loading="lazy"
    decoding="async">
</a>

結果: 期待される表示は、画面幅に応じた候補画像が選ばれ、下部配置では遅延読み込みされる状態です。

ℹ️ 補足: loading="lazy"は下部画像に向く指定です。ページ上部の主要画像へ機械的に付けると、表示開始が遅れる可能性があります。

テキストリンクと画像リンクを併用する判断

画像だけでリンク先を伝えきれない場合は、近くにテキストリンクを置くと意味が補われます。視覚的には画像で興味を引き、テキストで移動先を明確にする構成です。

その場合、画像とテキストが同じリンク先を指すなら、リンク文言とaltの重複を調整するのが現実的です。たとえば画像のaltを短めにし、見出しリンク側で詳しいタイトルを示すと、読み上げ時の冗長さを抑えられます。

逆に、画像だけを大きく見せてテキストが離れていると、どこを押せばよいのか分かりにくくなります。クリック対象、説明文、タグ表示の距離を近づけることで、埋め込みコンテンツとしてのまとまりが出ますし、これが一つの目安です。

よくある失敗と修正方針

画像リンクで多い失敗は、<img>だけを書いて<a>タグで囲んでいないケースです。この状態では画像は表示されてもクリックできないため、移動先が必要ならhrefを持つリンク要素で包みます。

そのほか、srcのパス違い、alt不足、target="_blank"relの併用漏れも起こりやすい点です。画像が表示されないときは、ファイル名、拡張子、相対パス、公開ディレクトリを順に確認すると原因を絞り込めます。

初心者がつまずきやすいのは、CSSでpointer-events:noneを指定してしまい、リンクが反応しなくなるパターンです。クリックできない場合は、開発者ツールで該当要素のdisplaypositionz-indexpointer-eventsを確認すると整理できます。

WordPressやCocoonで扱うときの注意

WordPressのブロックエディターでは、画像ブロックにリンク先を設定できる場合があります。コードを直接書かなくても、メディア設定からリンク先を選べるため、通常の記事作成ではエディター機能を使う方法もあります。

ただし、Cocoonの親テーマ標準だけで記事を保つなら、独自の子テーマclassへ依存しないほうが移行時の崩れを避けやすくなると理解できます。本文中の装飾は、通常の<a><img><figure><figcaption>と標準的なCSSで成立させるのが扱いやすいです。

このとき、画像リンクの周囲に余白を足したい場合は、テーマ側のブロック余白と個別CSSの両方が影響します。意図しない余白が出る場合は、marginpaddingline-heightを確認してください。

実装前に確認したいチェック項目

画像リンクを公開する前は、見た目だけでなく操作と意味を確認します。クリック範囲、リンク先、代替テキスト、別タブ設定、読み込み速度がそろうと、画像の埋め込みが単なる装飾ではなく実用的な導線になると覚えるとよいでしょう。

  • hrefが正しいURLを指している
  • srcの画像が公開環境で読み込める
  • altがリンク先の目的を補えている
  • 外部リンクのtarget="_blank"rel="noopener noreferrer"がある
  • max-width:100%height:autoで小さい画面に対応している
  • :focus-visibleでキーボード操作時の位置が分かる
  • widthheightで画像領域の目安を渡している
  • 画像ファイルが過度に大きくない
  • 同じリンク先への過剰な重複がない
  • 自分自身の記事URLへリンクしていない

特に押さえたいのは、画像の見た目とリンク先の期待を一致させることです。ユーザーが「この画像を押すと何が起こるか」を自然に予測できる状態なら、ウェブ開発の導線として安定します。

関連記事

著者: Japanシーモア編集部

Japanシーモアは、Web/IoT/APP/SYS 分野のプログラミング情報を体系的に提供するメディアです。本記事は編集部による執筆とAI支援を組み合わせて制作し、公開前に編集部が校正しています。誤りや改善案がございましたらお問い合わせよりご連絡ください。

※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。