本サイトはアフィリエイト広告を利用しております

Web制作

【WordPress】スマホで画像が切り替わらない!完璧なコードが動かない「意外な真犯人」とは?【実録デバッグ】

【WordPress】スマホで画像が切り替わらない!完璧なコードが動かない「意外な真犯人」とは?【実録デバッグ】

はじめに:コードは完璧なのに動かない?

「文法は合っている。パスも合っている。なのに、スマホで見てもPC用の画像のまま切り替わらない……」

こんにちは、ゆきしょうです。Web制作で、こんな現象にハマったことがある方もいると思います。

今回は、私が実際にハマった <picture> タグのトラブルと、解決までの流れを書きます。

結論から言うと、犯人はコードのミスでもCSSの干渉でもなく、WordPressのプラグインでした。

1. 問題の状況:スマホで画像が変わらない

やりたかったことはシンプルです。

レスポンシブ対応のために、<picture> タグを使ってPCとスマホで画像を出し分けること。

書いたコードはこちら。

HTML

<picture>
  <source srcset="<?php echo get_theme_file_uri(); ?>/images/top-company-sp.webp" media="(max-width: 768px)">
  <img src="<?php echo get_theme_file_uri(); ?>/images/top-company.webp" alt="現場風景">
</picture>

しかし、ブラウザ(Chrome)で確認すると、どれだけ画面を狭くしてもPC用の画像が表示され続けるのです。

「検証ツール」でウィンドウ幅をスマホサイズにしても、画像は変わりません。

2. 調査開始:疑った3つ

一つずつ可能性を潰していきました。

疑い①:初歩的なミス

  • ファイルパスは合っているか? → OK
  • 拡張子(.webp)は正しいか? → OK
  • ブラウザのキャッシュか? → スーパーリロードしても ダメ

疑い②:JavaScriptのエラー

コンソールを見ると、パララックス(視差効果)用のJSファイルでエラーが出ていました。

Uncaught TypeError: Cannot read properties of null...

「これが原因か」と思いましたが、よく調べると「該当の要素がないページでもJSが動こうとしていた」という別のエラーでした。

これを直しても、肝心の画像は切り替わりません。

疑い③:アニメーション(GSAP)との干渉

次に疑ったのは、リッチな動きをつけるアニメーションライブラリ(GSAP)です。

「JSが勝手にスタイルを書き換えて、画像の切り替えを邪魔しているのでは?」と考えましたが、JSを無効化しても現象は変わりませんでした。

ここで行き詰まりました。

3. 解決の糸口:「検証ツール」の小さな違和感

「トップページでは動くのに、下層ページでのみ動かない」という事実に気づき、ブラウザのデベロッパーツール(検証ツール)を徹底的に見比べた時でした。

動かないページのソースコードに、決定的な証拠が見つかりました。

▼ 検証ツールの表示

HTML

<source data-srcset=".../top-company-sp.webp" media="(max-width: 768px)">

違いはここです。

本来 srcset とあるべき場所が、data-srcset という名前に書き換わっています。

4. 真犯人は「Lazy Load(遅延読み込み)」

犯人はWordPressのプラグインによる「画像の遅延読み込み(Lazy Load)」機能でした。

何が起きていたのか?

  1. 高速化プラグインが「画像は後で読み込もう」とお節介を焼く。
  2. <source> タグの srcset 属性を、一時的に data-srcset に書き換えて隠す。
  3. ブラウザは srcset が見当たらないため、「スマホ用の指定はないんだな」と判断。
  4. 結果、フォールバック用の <img> タグ(PC画像)が表示されてしまう。

通常はスクロールするとJSが働いて元に戻るはずですが、<picture> タグの構造や他のスクリプトとのタイミングによって、うまく復元されていなかったのです。

5. 要注意!この現象を引き起こすプラグイン一覧

この現象は、「Lazy Load(遅延読み込み)」機能を持つ以下のプラグインを入れている場合に発生する可能性があります。

もし同じ症状で悩んでいる方は、以下のプラグインの設定画面を確認してみてください。

  • Autoptimize(今回の原因)
  • EWWW Image Optimizer
  • Smush
  • Jetpack
  • a3 Lazy Load

これらのプラグインは非常に便利ですが、設定次第で <picture> タグのような標準的なコードと干渉してしまうことがあります。

6. 解決策:Autoptimizeの設定変更

私の環境では、「Autoptimize」の設定を見直すことで一発で解決しました。

具体的な手順

  1. WordPress管理画面から [設定] > [Autoptimize] を開く。
  2. [画像] タブをクリック。
  3. 「画像の遅延読み込み(Lazy-load images)」 のチェックを外す。
    • ※または、除外設定(Lazy-load exclusion)クラスに、画像のクラス名を追加する。

これで、勝手に data-srcset に書き換わることがなくなり、スマホできれいに画像が切り替わるようになりました。

まとめ

今回わかったことは3つです。

  1. 「書いたコード」と「動いているコード」は違うエディタ上のコードが正しくても、ブラウザ上でプラグインによって書き換えられていることがあります。
    「検証ツール」で最終結果を確認するのが確実です。
  2. 属性名の変化に注目するsrc が data-src に、srcset が data-srcset になっていたら、それは遅延読み込みの仕業です。
  3. Autoptimizeを疑う便利な高速化プラグインですが、画像まわりのトラブルでは最初に設定を見ると早いです。

もし、WordPressで <picture> タグが動かずに悩んでいる方がいたら、まずは「検証ツールで data-srcset になっていないか」をチェックしてみてください。以上、WordPressでpictureタグの画像がスマホで切り替わらなかった原因と直し方でした。

【Webアニメーション】の「調べる地獄」から解放!現役プロが教えるコーディング効率化の決定版マニュアル!2025年12月4日

あなたのホームページ・ブログを1つ、無料で見ます。
LINEにURLを送ると、直すと良いところを3つ、3日以内にお返しします。
営業はしませんのでご安心ください。