METAタグを管理するMTテンプレートの作り方(MT6版)

はじめに

SEO対策のため、固定の文言や自動の文言を柔軟に設定できる実装が求められる様になってきましたが、テンプレートごとに文章やタグを記述しては、仕様変更で漏れる可能性があるほか、修正に多くの時間を取られてしまいます。

そのために、metaタグ(Title、Description、Keywords)を任意に設定できながらも、テンプレートの保守性も保てるテンプレートを考えました。

カスタムフィールドの追加

記事とウェブページにmetaタグを管理するカスタムフィールドを作成して下さい。

全てのフィールドで使用するので、システムから追加するのが良いと思います。

記事

名前:Title テンプレートタグ:entry_title

名前:Description テンプレートタグ:entry_description

名前:Keywords テンプレートタグ:entry_keywords

ウェブページ

名前:Title テンプレートタグ:page_title

名前:Description テンプレートタグ:page_description

名前:Keywords テンプレートタグ:page_keywords

テンプレートモジュールの作成

「meta」という名前でテンプレートモジュールを作成します。

サンプルテンプレートの内容を保存します。

サンプルテンプレート

metaタグに要素を挿入する。

SetvarBlockタグは、ハッシュのキーを指定することができますので、ハッシュ「meta」にキー「metaタグ名」を設定します。

その値に「archive_class」で判別した、「記事・ウェブページ・記事リスト」の値を代入します。

表示する値はカスタムフィールドの値を優先して設定します。

値が無い場合は、空にならないよう、案件ごとに値を設定してください。

<mt:ignore>title</mt:ignore>
<mt:SetvarBlock name="meta{title}">
    <mt:Unless name="metaTitle">
        <mt:if name="archive_class" eq="entry-archive">
            <mt:if tag="entry_title"><mt:entry_title><mt:else><mt:EntryTitle></mt:if>
        <mt:elseif name="archive_class" eq="page-archive">
            <mt:if tag="page_title"><mt:page_title><mt:else><mt:PageTitle></mt:if>
        <mt:elseif name="archive_class" like="^(datebased-daily-archive|datebased-weekly-archive|datebased-monthly-archive|datebased-yearly-archive)">
            <mt:ArchiveTitle>
        <mt:elseif name="archive_class" eq="category-archive">
            <mt:CategoryLabel>
        <mt:else>
            <mt:BlogName>
        </mt:if>
    <mt:else>
        <mt:Var name="metaTitle">
    </mt:Unless>
</mt:SetvarBlock>

<mt:ignore>description</mt:ignore>
<mt:SetvarBlock name="meta{description}">
    <mt:Unless name="metaDescription">
        <mt:if name="archive_class" eq="entry-archive">
            <mt:if tag="entry_description"><mt:entry_description><mt:else><mt:EntryTitle></mt:if>
        <mt:elseif name="archive_class" eq="page-archive">
            <mt:if tag="page_description"><mt:page_description><mt:else><mt:PageTitle></mt:if>
        <mt:elseif name="archive_class" like="^(datebased-daily-archive|datebased-weekly-archive|datebased-monthly-archive|datebased-yearly-archive)">
            <mt:BlogName>-<mt:ArchiveTitle>のアーカイブページです。
        <mt:elseif name="archive_class" eq="category-archive">
            <mt:CategoryDescription>
        <mt:else>
            <mt:BlogName>
        </mt:if>
    <mt:else>
        <mt:Var name="metaDescription">
    </mt:Unless>
</mt:SetvarBlock>

<mt:ignore>keywords</mt:ignore>
<mt:SetvarBlock name="meta{keywords}">
    <mt:Unless name="metaKeywords">
        <mt:if name="archive_class" eq="entry-archive">
            <mt:if tag="entry_keywords"><mt:entry_keywords><mt:else><mt:EntryTitle></mt:if>
        <mt:elseif name="archive_class" eq="page-archive">
            <mt:if tag="page_keywords"><mt:page_keywords><mt:else><mt:PageTitle></mt:if>
        <mt:elseif name="archive_class" like="^(datebased-daily-archive|datebased-weekly-archive|datebased-monthly-archive|datebased-yearly-archive)">
            <mt:ArchiveTitle>
        <mt:elseif name="archive_class" eq="category-archive">
            <mt:CategoryLabel>
        <mt:else>
            <mt:BlogName>
        </mt:if>
    <mt:else>
        <mt:Var name="metaKeywords">
    </mt:Unless>
</mt:SetvarBlock>

上記で設定したTitleに挿入する要素の末尾に、見出しを追加します。

<mt:ignore>titleに見出しを追加</mt:ignore>
<mt:SetvarBlock name="meta{title}">
    <mt:if name="archive_class">
        <mt:Var name="meta{title}">|<mt:BlogName>|<mt:WebsiteName>
    <mt:else>
        <mt:Var name="meta{title}">-<mt:WebsiteName>
    </mt:if>
</mt:SetvarBlock>

ハッシュ「meta」に設定された値を、MTLoopタグで不要な値を取り除き、再度ハッシュ「meta」に代入します。

設定された値には、HTMLや無駄なスペースや改行など、metaに不要な要素が含まれています。

特にSetvarBlockタグでは、インデントも値として設定されるので、削除する記述が必要です。

<mt:Loop name="meta">
    <mt:Var name="__value__" 
    remove_html="1"
    encode_html="1"
    regex_replace="/(^[\ \t\r]+|\n+)/mg",""
    setvar="__value__">
    <mt:Setvar name="meta" key="$__key__" value="$__value__">
</mt:Loop>

MTVarタグで不要な値を取り除いた値を出力します。

<title><mt:Var name="meta{title}"></title>
<meta name="description" content="<mt:Var name="meta{description}">">
<meta name="keywords" content="<mt:Var name="meta{keywords}">">

予約変数にない、インデックステンプレートで設定したい値は、以下の様に設定できます。

作成したテンプレートモジュールより上に作成して下さい。

<mt:Setvars>
    metaTitle=カスタマイズ用のTitle
    metaDescription=カスタマイズ用のDescription
    metaKeywords=カスタマイズ用のKeywords
</mt:Setvars>

メインインデックステンプレートやカスタムインデックステンプレートで出力するパターンが決まっているの場合は、それぞれ変数を作成し、MTIFに加えると良いと思います。