ブログのバッジが直らなくて2時間悩んだら、画像自体が問題だった話【実践編・デバッグ全公開】

AI活用

スマホで自分のブログを確認していたとき、ふと気になることがありました。

記事の一覧ページを見ると、サムネイル画像の左上と右下に「AI活用」というバッジが2つ表示されていたんです。

最初は「目の錯覚かな?」と思ってもう一度見直しました。でもやっぱり2つある。

「これ、おかしいよね……?」と思いながらクロコに相談したのが、この長い戦いの始まりでした。


バッジが2か所に出てる!どういうこと?

なべちゃんちょっとクロコ、スマホでブログを見たら記事カードのバッジが左上と右下に2つ出てるんだけど……これ、変だよね?
クロコ確認しました。通常、Cocoonのカテゴリーバッジは記事カードの左上に1つ表示されるのが正しい動作です。おそらくCSSで位置を変更しようとしたコードが、元のバッジを消せずに2か所に表示させてしまっているようです。CSS側を修正してみましょう。
なべちゃんなるほど、CSSの問題か。修正をお願いします!
クロコCode Snippetsのスニペットを更新します。.cat-label の位置を bottom:4px; right:4px に指定しつつ、記事カード内のものだけ表示するようにセレクターを絞ります。修正後はConoHa WINGのキャッシュをクリアしてから確認してください。

CSSで直そうとしたが…iOS Safariだけ直らない

キャッシュをクリアして確認。PCのChromeではバッジが右下1か所だけに表示されていて、一瞬「直った!」と思いました。

でも、iPhoneで確認するとまた左上と右下に2つ出ているんです。

なべちゃんPCでは直ってるのに、iPhoneだとまだ2つ表示されてる……なんで?
クロコ調査しました。原因はiOS Safariの描画バグです。CSSで bottom:4px のような絶対配置を指定しても、Safariはページの初期描画時の位置をゴーストとして残すことがあります。後からCSSで位置を変えようとしても、最初に描画した場所のバッジが残ってしまうんです。
なべちゃんえ、それってCSSで直せないってこと?
クロコCSS単体では根本解決が難しいです。別のアプローチを取ります。まずCSSで全バッジを display:none にして初期描画前に完全に非表示にします。そのあとJavaScriptで、DOM読み込み完了後に正しい位置で display:block として表示し直します。これでゴーストの発生を防げます。
この方法で更新してみます。プライベートモードで確認してみてください(キャッシュの影響を排除するため)。

CSS+JSで対処。でも実践編の記事だけおかしい

プライベートモードで確認すると、バッジが右下1か所だけになっていました。

「ついに直った!!」

思わず声が出るくらいうれしかったです。CSS→JS→プライベートモード確認、この流れを何度も繰り返してきたので、本当にほっとしました。

念のため全記事を1本ずつ確認していきます。入門編(パステルロボット)の記事……OK。会話形式の記事……OK。転職系の記事……OK。

あれ。

なべちゃんちょっと待って。実践編の記事だけ、まだアイキャッチの左上にバッジっぽい青い四角が見える気がする。入門編(パステルロボット)の記事は大丈夫なのに、ダークネイビー背景の実践編だけおかしい。
さっきプライベートモードで確認したはずなのに……どうして?
Screenshot
クロコ……少し待ってください。実践編記事のアイキャッチ画像を詳しく調べてみます。
なべちゃんえ? 「画像を調べる」ってどういうこと?バッジはHTMLの話じゃないの?

普通、画像の話になるとは思わないですよね。CSSが効いていないとか、JSの読み込みタイミングとか、そういう話が続くと思っていたので、「画像を調べる」という言葉が出てきたとき、正直「何を言っているんだろう」と思いました。

クロコ実践編のアイキャッチはダークネイビーの背景にクロコを合成した画像ですよね。あの画像、もしかしてもともとページのスクリーンショットをベースに作っていませんでしたか?
なべちゃんあ……そうかも。最初のころ、ページの見た目をそのままPythonで加工して作ってたから。

そこまで言われて、やっと思い出しました。最初に実践編アイキャッチを作ったとき、ブログのページをスクリーンショットで撮って、それをPythonで加工してダークネイビーの背景にしていたんです。

クロコだとすると、その時点でページにバッジが表示されていたなら、バッジがそのまま画像のピクセルとして焼き込まれている可能性があります。つまり、HTMLやCSSの問題ではなく、PNG画像自体にバッジが描かれている状態です。
なべちゃん……え。それって、CSSとかJSとか全然関係なかったってこと?
クロコはい。HTMLの構造は正しく修正できていました。ただ、画像ファイルの中にバッジが存在していたため、どうCSSを変えても「画像の上に描かれたバッジ」は消せなかったというわけです。

真犯人は「画像に焼き込まれたバッジ」だった

これを聞いたとき、思わず「えっ、そんなことある?」と声が出ました。

2時間近く格闘してきた相手が、HTMLではなく画像ファイルの中のピクセルだったなんて。しかも原因を作ったのは自分自身。「スクリーンショットをベースにしたから」という話を聞いて、なんとも言えない気持ちになりました。

クロコPython/Pillowで画像のピクセルを調べてみると、実践編アイキャッチの左上(x=30〜131, y=28〜65)の範囲に、ダークネイビーではない青系のピクセルが存在しています。これがバッジの焼き込みです。
調査結果:x=30~131, y=28~65の範囲にバッジのピクセルを検出
バッジカラー:#4285f4系(Cocoonのデフォルトバッジカラー)
対象画像:実践編アイキャッチ7枚
なべちゃんじゃあ、その範囲をダークネイビーで塗りつぶせば消える?
クロコそうです。Pillowの ImageDraw.rectangle() で (30,28)〜(131,65) の範囲をダークネイビー(30,41,59)で上書きします。7記事分の画像を修正して、WordPressに再アップロードします。
修正が完了しました。7枚のアイキャッチを差し替えて、各記事のアイキャッチIDも更新しています。
なべちゃん確認してみます……あ、消えてる!完全に消えた!
クロコありがとうございます。ただ、この作業を通じて確認できましたが、バッジはHTML側で非表示にすることも、画像を修正することもできました。とはいえ、今後同じことが起きないよう、バッジ自体を表示なしにしてしまうことを提案します。SEOへの影響はありません。
なべちゃんそうだね、もうバッジなくていいや。すっきりした方がいいし。非表示でお願いします!

まとめ:HTMLじゃなくて画像が問題だった

今回の学びをまとめると、こうなります。

試したこと結果
CSSで位置を変更PCは直ったがiOS Safariで再発
CSS全非表示+JSで再表示HTML上は解決・でも画像のバッジが残る
画像ピクセルを塗りつぶし根本解決!

2時間近くCSSやJavaScriptと格闘したのに、本当の原因はPNGファイルの中のピクセルだったというオチ。クロコが「画像自体を調べてみます」と言い出したときは半信半疑でしたが、これは自分だけでは絶対に気づけなかったと思います。

ブログのトラブルって、原因がコードにあるとは限らないんですよね。今回みたいに「画像の中身」が問題だったケースは、検索しても情報が出てこなくて途方に暮れたはずです。AIと一緒に作業していることで、こういう斜め上の原因にたどり着けたのは本当に助かりました。

この記事でわかったこと

  • スクリーンショットベースで作った画像は、そのとき表示されていたUIがそのまま焼き込まれる
  • iOS Safariは初期描画後にCSSで位置を変えても「ゴースト」が残るバグがある
  • CSS・JSで直らないときは、画像ファイルそのものを疑ってみる

次にやること

今回の修正で実践編アイキャッチ7枚を作り直しました。新しく画像を作る際は、ページのスクリーンショットではなく、最初からPythonで背景・テキスト・キャラクターを合成して作るようにしています。


関連記事:

ブログのアイキャッチをGeminiで統一する方法【入門編・プロンプト公開】

ブログのアイキャッチを全記事統一した話【実践編・AIとのやりとり全公開】

ブログの細かい調整に時間を使ったあとは、収益化の全体像を整理しておくと「今何のためにやっているか」が見えやすくなります。
副業ブログで月1万円稼ぐロードマップ【完全版・40代・AI活用】

カテゴリーバッジの基本的なカスタマイズ方法は、入門編にまとめています。
記事カードのカテゴリーバッジをカスタマイズする方法【入門編・CSS公開】

コメント

タイトルとURLをコピーしました