スマホでWebページが落ちる原因と対策|大量動画・SNS埋め込みによるメモリオーバーの調査と解消法

iPhoneやスマートフォンで特定のWebサイトを閲覧している際、ページが突然真っ白になって再読み込みされたり、ブラウザが強制終了(クラッシュ)してホーム画面に戻ってしまった経験はないでしょうか。

「端末が古いから」「たまたま電波が悪かったから」と思われがちですが、実はWeb制作側の設計による「メモリオーバー(メモリ枯渇)」が直接の原因であるケースが非常に多く見られます。

特に、YouTubeやVimeoの動画、Instagramの埋め込み投稿を1つのページに多数並べている場合、ブラウザが処理できるメモリ上限をあっという間に突破してしまいます。

この記事では、スマートフォンでページが落ちる原因の特定手順から、メモリを圧迫する仕組み、そして表示速度と動作安定性を大幅に改善する具体的な対策までを分かりやすく解説します。

iPhoneでWebページが突然クラッシュする仕組み

スマートフォンでWebページを閲覧しているとき、ブラウザ(iOSのSafariやChromeなど)は端末のRAM(メインメモリ)を使用してページ上のテキスト、画像、プログラム、動画プレイヤーなどを展開・描画します。

しかし、iOSのブラウザエンジンであるWebKitには、システム全体の安定性を維持するため、「1つのタブが使用できるメモリ容量の上限」が厳密に設定されています。

端末の世代によって落ちる・落ちないが分かれる理由

  • iPhone 12(メモリ4GB搭載):タブに割り当てられるメモリ上限が低いため、重いサイトをスクロールしていくと途中で上限に達してクラッシュする
  • iPhone 16(メモリ8GB搭載):物理メモリに余裕があるため、同じ高負荷ページでもクラッシュせずに閲覧し続けられる

このように、最新のハイスペックな端末では正常に見えていても、数年前の端末や廉価モデルを使っているユーザーの環境ではページが強制終了してしまい、離脱や機会損失につながっているケースが珍しくありません。

デベロッパーツールを使ったメモリ負荷の調査手順

「自分のサイトがメモリオーバーを起こしていないか」「なぜクラッシュするのか」を客観的な数値で把握するには、パソコンのGoogle Chromeに搭載されている開発者向けツール(デベロッパーツール)を使用します。

Networkタブで通信量と展開容量を確認する

パソコンで調査対象のWebページを開き、キーボードのF12キー(MacはCommand + Option + Iキー)を押してデベロッパーツールを起動します。

画面上部にある「Network(ネットワーク)」タブを選択し、F5キー等でページを再読み込みします。通信が完了したら、パネル最下部のステータスバーに注目してください。

実際のデベロッパーツール測定結果のキャプチャ

実際の測定例:リクエスト数981件、展開リソース容量176MBに達している様子

ステータスバーには以下の3つの重要な数値が表示されます。

ステータスバーで注目すべき3大項目

  • requests(リクエスト数):外部とのファイル送受信回数。通常サイトは50〜100件程度が目安ですが、高負荷サイトでは数百件〜約1,000件近くまで跳ね上がります。
  • transferred(転送量):ネットワーク経由でダウンロードした圧縮データ量。
  • resources(展開リソース容量):ブラウザが端末のメモリ上に解凍・展開した総容量。ここが数十MBから100MBを超えていると、スマートフォンでは危険水域です。

上のキャプチャ例では、リクエスト数が「981件」、展開リソース容量が「176MB」、読み込み完了までに「54.33秒」もかかっています。この数値は、スマートフォンで閲覧した場合にメモリ不足による強制終了を引き起こす決定的なサインとなります。

Elementsタブで外部埋め込みの総数を調べる

ページ内に動画やSNSの埋め込み枠が何個あるかを調べるには、上部の「Elements」タブを開き、Ctrl + F(MacはCommand + F)で検索窓を表示して「iframe」と入力します。

検索結果の右側に「1 of 25」のように件数が表示されます。この件数が多いほど、後述するメモリ消費が幾何級数的に増加します。

メモリオーバーを引き起こす主な高負荷要素

なぜ展開リソース容量が100MBや170MB以上まで膨らんでしまうのでしょうか。主な要因は外部メディアの仕様にあります。

スマートフォンでWebページがクラッシュする仕組みと改善策の図解

Webページのメモリオーバーとクラッシュ発生の仕組み、および対策の全体像

YouTubeやInstagramのiframe多重配置

WebサイトにYouTube動画やInstagram投稿を埋め込む際、一般的に「iframe(インラインフレーム)」というタグが使われます。

iframeは、単に画像を表示しているのではなく、「Webページの中に別の独立したWebブラウザを丸ごと立ち上げている」のと同じ構造をしています。

iframeが1つあるだけでも、プレイヤー制御用のJavaScript、HTML構造、スタイルシートが独立して実行されます。これがページ内に10個、20個と並ぶと、1つのタブの中で数十個のWebサイトを同時に開いている状態になり、メモリ消費が一気に跳ね上がります。

Vimeoのシークバー用スプライト画像(WebP)

Vimeoの動画プレイヤーを埋め込んでいる場合、動画を再生していなくても、シークバーにマウスや指を合わせたときのプレビューサムネイルを表示するために「スプライト画像」が自動的にダウンロードされます。

これは動画全編のコマ送りを1枚の長大な画像に敷き詰めたファイル(WebP形式など)で、ファイルサイズ自体も数百KBから1MB以上あるうえ、ブラウザが画像を展開すると大量のメモリピクセル領域を消費します。

動画が10本あれば10枚分の巨大画像が裏で読み込まれ、これがスクロール中のクラッシュを誘発する隠れた要因になります。

Webページのメモリ負荷を下げる具体的な対策

ページが落ちる現象を防ぎ、すべての端末で快適に閲覧できるようにするための代表的な改善策を紹介します。

動画枠のファサード化(遅延読み込み)

最も劇的な改善効果を発揮するのが、「ファサード(Facade)」と呼ばれる手法です。

最初から重いiframeプレイヤーを読み込ませるのではなく、初期状態では「軽量なサムネイル静止画」と「再生ボタンのアイコン」だけをHTML上に配置しておきます。ユーザーが再生ボタンをタップ(クリック)した瞬間に、JavaScriptで初めてiframeを生成して動画を再生します。

ファサード実装のイメージ(HTML / JavaScript)

<!-- 初期表示は軽量な画像のみ配置 -->
<div class="video-placeholder" data-video-id="VIDEO_ID" style="position: relative; cursor: pointer;">
  <img src="thumbnail.jpg" alt="動画サムネイル" style="width: 100%; display: block;">
  <div class="play-btn" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">▶</div>
</div>

<script>
document.querySelectorAll('.video-placeholder').forEach(function(el) {
  el.addEventListener('click', function() {
    var videoId = this.getAttribute('data-video-id');
    var iframe = document.createElement('iframe');
    iframe.setAttribute('src', 'https://www.youtube.com/embed/' + videoId + '?autoplay=1');
    iframe.setAttribute('frameborder', '0');
    iframe.setAttribute('allow', 'autoplay; encrypted-media');
    iframe.setAttribute('allowfullscreen', 'true');
    iframe.style.width = '100%';
    iframe.style.height = '100%';
    this.innerHTML = '';
    this.appendChild(iframe);
  });
});
</script>

この方法を採用すると、ページ内に動画が何十本あっても、初期表示時のリクエスト数は「静止画1枚分」で済みます。リソース容量を数十MB単位で削減でき、スマートフォンのクラッシュを確実に防ぐことができます。

トップページの掲載件数絞り込みと専用一覧ページへの分割

結婚式場や撮影実績、制作事例などのレポートを、トップページに過去分まで延々と掲載している構成は非常によく見られます。

トップページには「直近の代表的な3〜5件」のみを掲載し、それ以前の過去実績は「実績一覧ページ(過去ログ)」として別ページへリンクで誘導する構成に改修します。

ページあたりのDOM要素数と外部通信が適正な範囲に収まり、トップページの読み込み速度が向上するだけでなく、SEO面でのユーザー体験(Core Web Vitals)の改善にも直結します。

Instagram埋め込みのサムネイルリンク化

Instagramの公式埋め込みコード(`instagram.com/embed.js`)は、1件ごとに非常に多くのスクリプトを読み込みます。

リアルタイムでのいいね数やコメント表示が必須でない場合は、Instagramの投稿写真(サムネイル画像)と簡単な紹介文を配置し、タップするとInstagramアプリやWebサイトの投稿へ遷移するシンプルなリンク形式に変更するのが最も効果的です。

まとめ:快適な閲覧環境を作るためのチェックポイント

Webサイトの表示トラブルは、制作者のパソコンや最新のスマートフォンでは気付きにくく、古い機種を使っている一般ユーザーの環境で静かに発生していることが少なくありません。

表示の安定化に向けた確認チェックリスト

  • デベロッパーツールの「resources(展開リソース)」が50MB以内に収まっているか
  • リクエスト数が数百件以上に跳ね上がっていないか
  • 1つのページにYouTube、Vimeo、Instagramなどのiframeを無制限に並べていないか
  • 動画枠はタップ時にのみ読み込む「ファサード(遅延読み込み)」になっているか
  • 実績やブログ記事は適度な件数でページ分割(ページネーション)されているか

見た目のリッチさや実績の多さをアピールすることも大切ですが、ユーザーがストレスなく安心して閲覧できるパフォーマンス設計を心がけましょう。


eguchi.netをもっと見る

購読すると最新の投稿がメールで送信されます。