0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Movable Typeで、トップページだけ意図したコードが出力されなかったら「main_index」で検索しろ

Last updated at Posted at 2025-04-02

head要素に書いたCSSやJavaScriptが、トップページだけ出力されない

長い間Movable Typeで運用されているサイトの改修案件で、数年ぶりに改修したトップページで、head要素に必要なコードが出力されないトラブルがありました。
原因を調べたところ、MTを利用してきた20年間で4回くらい遭遇したものだったので、注意喚起としてQiitaに残しておきます。

原因

条件分岐の際、トップページ判定の引数に main_index を使っていたためです。
この判定は偽で、 main_index は未定義扱いですが、MTの仕様上、エラーにはなりません。つまり何も出力しません。

<mt:If name="main_index">
<link rel="stylesheet" href="トップページだけ使うCSS.css" media="all">
<script src="トップページだけ使うJavaScript.js"></script>
</mt:If>

対策1

トップページの条件分岐に main_index が使用されていて、それが効いていない可能性があります。

以下のようにトップページで is_home などの変数を再定義して判定するか、後述の予約語の更新を行ってください。

<mt:If name="is_home" eq="1">
<link rel="stylesheet" href="トップページだけ使うCSS.css" media="all">
<script src="トップページだけ使うJavaScript.js"></script>
</mt:If>

解説

なぜこのようなことが起こるのか、古いサイトだけで起きるのかを解説します。

予約語って?

main_index とは、Movable Typeのシステム内の予約語のひとつです。
テンプレートの呼び出しにテンプレート名を指定したり、画面判定で mt:IfArchiveType などの画面別の条件タグを使う以外に、予約語で指定する方法があります。
これは公式ドキュメントにも記載されています。

アーカイブテンプレートに設定される予約変数 | CMSプラットフォーム Movable Type ドキュメントサイト

どのような問題が?

ドキュメント内には、「メインページ(サイトのトップページ)では main_index が1(真)となる」という記載があるのですが、これは厳密には正しくありません。
古いバージョンの公式テーマのメインページでは、デフォルトでは main_index が1(真)となる」が正しいです。

さらに、この公式テーマをカスタマイズして構築したサイトを長年運用していると、メインページと main_index の関連付けが切れてしまうことがあります。こうなると条件は満たされなくなり、冒頭のトラブルとなります。

トップページのリニューアルなどで、テンプレートを一旦削除して作り直したときに発生しやすいですが、はっきりした原因はわかりません。サーバー移転、メジャーアップデート、テーマのエクスポート、Movable Type Premium(旧Pro)から無印に戻した等が考えられます。
「古いバージョンから運用しているMovable Typeサイトだと起こる」とだけは断言できます。

もっと詳しく

スクリーンショット 2025-04-01 15.00.39.jpg

MT5だったかと思いますが、新規インストールの際「クラシックウェブサイト」か「プロフェッショナルウェブサイト」というテーマのどちらかを使用することになります。

これらのテーマで、トップページを出力するテンプレート「メインページ」を見てみると、テンプレートの種類が main_index になっていることがわかります。

スクリーンショット 2025-04-01 14.57.19.jpg

テンプレートの種類=識別子は、テーマ制作者がMovable Typeのテーマ定義用ファイルで任意指定でき、テーマをインストールしたときに自動で割り当てられますが、この識別子が空欄=カスタムインデックステンプレートに変わってしまうことがあるのです。

さらに悪いことに、MT5の公式テーマでは条件分岐のトリガーで main_index を多用しています。なのでこの頃にMTを使い始め、公式をカスタマイズして作られたサイトで発生しやすいのです。

対策2

スクリーンショット 2025-04-01 14.51.11.jpg

Movable Type8では確認していませんが、Movable Type6、7のプレミアム(旧Pro)は識別子をテンプレート画面から編集できます。

また、プラグイン「MTAppjQuery」を使用している場合は「テンプレート識別子」の項目を擬似的に無印にも表示することができます。2018年の記事なので現在でも再現可能かは不明ですが…

MTAppjQuery でテンプレート識別子を設定可能にするには | プラグイン | Hei Blog

まとめ

回避するのは難しいですが、トラブルが起きたときの原因の切り分けについては表題のとおりです。トップページだけコードが出力されないトラブルがあったときは、まず、サイト内のテンプレートを main_index で検索してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?