この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: 画像
SEOタイトル: HTML 画像系要素まとめ(img / picture / srcset / WebP / lazy loading)

この記事の要点
  • 基本: ...alt 属性必須
  • Responsive Images: srcset / sizes でデバイスごとに最適サイズ配信
  • + : WebP / AVIF などフォーマット切替
  • パフォーマンス: loading="lazy" / decoding="async" / fetchpriority
  • 装飾用は CSS background-imageコンテンツ と使い分け

基本: img 要素


会社ロゴ


商品


鎌倉の海辺に建つ古民家カフェ

主要属性

属性意味推奨
src画像 URL必須
alt代替テキスト必須。装飾なら alt=""
width / height表示サイズCLS 防止に推奨
loadinglazy / eager初期画面外は lazy
decodingasync / sync / auto通常 async
fetchpriorityhigh / low / autoLCP 画像は high
srcset複数解像度の候補Retina 対応
sizes表示サイズの宣言srcset と併用
crossoriginCORSCanvas 描画時
referrerpolicyReferer 制御必要時

alt 属性のベストプラクティス


窓辺で日向ぼっこする三毛猫





会社情報


商品一覧



可愛い猫
可愛い猫

srcset / sizes: レスポンシブ画像

デバイスの画面密度表示幅に応じて最適な画像を配信:


商品


商品

picture 要素: フォーマット切替

WebP / AVIF のような新世代フォーマットを、対応ブラウザにだけ配信:


  
  
  

  
  商品




  
  
  トップビジュアル




  
  
  商品

画像フォーマットの比較

形式用途圧縮透過アニメ対応
JPEG写真非可逆××全ブラウザ
PNG図・透過可逆×全ブラウザ
GIF古い画像・アニメ可逆 (8bit)全ブラウザ
WebP万能(JPEG/PNG 代替)非可逆/可逆○ (IE 除く)
AVIF最高効率非可逆/可逆○ (Chrome/Firefox/Safari)
SVGアイコン・図ベクター全ブラウザ

2026 年現在の推奨: AVIF → WebP → JPEG/PNG のフォールバック。SVG はアイコン・ロゴに。

パフォーマンス: lazy loading


...


メインビジュアル


...

figure と figcaption

2025 年売上推移グラフ
図 1: 2025 年の月次売上推移(出典: 自社集計)
商品 A の正面・側面ビュー

背景画像 vs img タグの使い分け

用途推奨理由
商品写真・記事内画像意味あるコンテンツ → alt が必要
ヒーローセクションの背景CSS background装飾、テキストが上に乗る
装飾的アイコンCSS background / SVG意味なし → alt 不要
ボタンの中のアイコンSVG inline色変更・アニメ容易
ロゴ + alt会社情報を SR にも
UI 装飾(罫線・パターン)CSS background装飾

画像最適化のチェックリスト

  • 表示サイズの 1〜2 倍の解像度で書き出す(過剰な大解像度は無駄)
  • JPEG 品質は 80% 程度で十分(ファイルサイズと品質のバランス)
  • WebP / AVIF への変換を CI / CDN で自動化(Cloudinary, Imgix, Cloudflare Images)
  • width / height 属性で CLS 防止
  • 初期画面外は loading="lazy"
  • LCP 画像(最大コンテンツ)は fetchpriority="high"
  • SVG は svgo 等で minify
  • PNG は pngquant / oxipng で圧縮

JavaScript で動的に画像

// 画像のプリロード
const img = new Image();
img.src = '/big-image.jpg';
img.onload = () => console.log('読込完了');

// IntersectionObserver で独自 lazy loading
const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.src;
            observer.unobserve(img);
        }
    });
});
document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

// Canvas で画像加工
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const image = new Image();
image.crossOrigin = 'anonymous';   // CORS 注意
image.onload = () => {
    canvas.width = image.width;
    canvas.height = image.height;
    ctx.drawImage(image, 0, 0);
    const dataURL = canvas.toDataURL('image/jpeg', 0.8);
    // → 圧縮済の base64
};
image.src = 'photo.jpg';

SEO とアクセシビリティ

  • alt 属性は SEO 上もスクリーンリーダー上も最重要
  • ファイル名も意味のあるものに(IMG_1234.jpg ではなく kamakura-cafe.jpg
  • 構造化データImageObject)でリッチリザルト化
  • sitemap.xml を含めて Google 画像検索に
  • 遅延読込は SEO 影響なし(Googlebot は lazy 対応)

FAQ

Q: width / height を指定しなくても CSS で何とかなる?
A: 見た目は OK でも、HTML パース時点で画像領域が確保されずCLS(Cumulative Layout Shift)が発生します。Core Web Vitals に悪影響です。

Q: WebP をサポートしないブラウザは?
A: 2026 年現在ほぼ無い(旧 IE くらい)。それでも でフォールバックすれば安全です。

Q: alt の文章は長くてもいい?
A: 必要な情報を伝えるのが最優先。複雑な図なら 100 文字超でも OK。あまりに長いなら aria-describedby で別 div に詳細を書きます。