この記事は、Bloggerのテーマを修正して保存したにもかかわらず、本番ページに変更が反映されずに苦しんでいる開発者に向けたものだ。自分が実際に遭遇したBloggerのテーマ保存エラーと、UIの「保存完了」メッセージに騙されることなく問題を即座に解決したプロセスを共有する。
作業記録として残しておく。Bloggerのtheme.xmlファイル内にある <b:skin> CDATAブロック内のCSSコメントを整理していた。コメント内に pre / code / div などの説明を追加するため、/* pre / code ブロックは <pre>, <code> タグで処理 */ のように記述した。しかし、この修正を終えてテーマを保存したものの、実際のブログには変更が一切反映されない問題が発生した。
エラーの挙動
Bloggerの管理画面(UI)上では「保存完了」のメッセージが正常に表示されていた。しかし、実際のページをフェッチしてソースを確認すると、修正前の古いテーマコードがそのまま表示されていた。5分待っても、別端末のシークレットモードでアクセスしても、古いテーマがキャッシュされているかのように残り続けていた。Googleの「保存完了」ポップアップは、時に中身のないただの表示にすぎない。これを鵜呑みにせず、実際のソースサイズを直接確認すべきだ。UIは成功を主張しているが、実際にはバックエンドで「サイレント拒否(silent reject)」が発生している状態だった。
検証環境
検証時の環境は以下の通り。
- プラットフォーム:Blogger (Google Blogspot)
- 対象ファイル:theme.xml
- 修正箇所:<b:skin><![CDATA[...]]> ブロック内のCSSコメント (
/* ... */)
試して駄目だったこと
解決のために試行錯誤したものの、効果がなかったアプローチは以下の通り。
- 手動アップロードの再試行:XMLファイルを丸ごとアップロードし直してみたが、同様に無視された。
- キャッシュの反映待ち(5分):CDNのキャッシュ遅延を疑って待ってみたが、本番のソースは変わらなかった。
- 別端末のシークレットモードでの確認:ブラウザキャッシュを疑い、完全に異なる環境からアクセスしてみたが、やはり古いテーマが表示されるだけだった。
原因と最終的な解決策
正確な原因についてはさらなる調査が必要だが、現時点で判明している原因は次の通りだ。BloggerのSkinVariablesパーサーが、CDATA内のCSSコメントに含まれる <pre> や <code> といったテキストを実際のHTML要素と誤認してパースを試み、その結果 InvalidVariableException を発生させていたと思われる。自分が適用した最終的な解決策は、CSSコメント内から生のHTMLトークンを完全に排除することだった。山括弧(< >)を取り除き、単なるテキストとして「pre」「code」と書き換えたところ、即座に正常に保存が反映された。
対象のコード
検証時の、問題が発生したコードと修正後のコードは以下の通り。
<!-- Before(サイレント拒否が発生) -->
/* pre / code ブロックは <pre>, <code> タグで処理 */
<!-- After(正常に反映成功) -->
/* pre / code ブロック処理 */検証結果と現在のステータス
修正後にテーマを再アップロードしたところ、本番ページのソースサイズが 286,391 バイトから 294,194 バイトへと正常に変更された。また、SESS140 5 sentinelが本番環境に到達していることを直接検証した。現在のステータスは fixed だ。
同じ問題に直面している方へ
Bloggerのテーマ保存エラーに悩まされているなら、まずは <b:skin> CDATA内のCSSコメントを確認してみてほしい。コメント内に何気なく書いた <pre> や <code>、<div> といったHTMLタグ形式の文字列が、パーサーをクラッシュさせている可能性が非常に高い。コメント内の山括弧を削除してから、再度アップロードを試してみてほしい。
Category Coverage Notice
This article follows our label-specific editorial criteria. Details: