PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > テンプレート作成Tips > 検索エンジン用サイトマップ XML を出力する Movable Type テンプレート

2014年04月03日

検索エンジン用サイトマップ XML を出力する Movable Type テンプレート

サイトマップ(XML)とは、検索エンジンがサイト内をクロールする対象ページをサイト運営者が検索エンジンに知らせるためのファイルです。このファイルには最終更新日、更新頻度、ページのURL や優先度などを XMLに記述します。サイトマップを用意すると、検索エンジンがより正確にサイトをクロールできます。

Movable Type(PowerCMS)では、サイトマップXMLをインデックス・テンプレートとして作成する方法が一般的です。

サイトマップをMovable Type(PowerCMS)に追加する

  1. ウェブサイト(ブログ)の「デザイン」 - 「テンプレート」
  2. インデックステンプレートを作成
  3. テンプレート名を sitemap に、出力ファイル名を「sitemap.xml」にする
  4. テンプレートを作成して、再構築
  5. Google ウェブマスター ツールから登録する

サイトマップXML 用テンプレートを作成する

基本的には各アーカイブをブロックタグで出力する内容になります。

どこまでの内容を出力するかにもよりますが、MT のブログ自体は更新日時を持ちませんので、何か別のもので代用する必要があります(再構築時の日時であれば MTDate タグ、最新記事の日付であれば MTEntryDate や MTEntryModifiedDate タグを使う前に最新記事を取り出すテンプレートが必要になると思います)。

下記の例では記事やウェブページなどアーカイブを出力していますが、インデックステンプレートやアイテムなどは含まれていません。

PowerCMSでは、カスタムオブジェクトアーカイブ、フォルダアーカイブ、タグアーカイブなど、Movable Typeの標準アーカイブよりも、多彩なアーカイブを出力できるようになっています。サイトマップのXMLにどこまでを含めるかについて、サイトの目的や検索エンジン対策のねらいなどによって取り決めることになるかと思います。

※このテンプレートでは、PowerCMS独自のタグを利用していませんので、Movable Typeのみの環境でも利用可能です。

尚、全ウェブサイト/ブログを出すテンプレートも可能ですが下記サンプルではあえてIDを限定しています。これは構築中のものやサイトマップに載せたくないブログをリストアップしないためです。

また、テンプレートの組み方次第では changefreq をコンテンツごとに変更することも可能と思います。

<MT:For regex_replace="/\s+\n/g","\n" trim="1">
<MTSetvars>
DateYear=<$mt:date format="%Y"$>
DateMonth=<$mt:date format="%Y%m"$>
</MTSetvars><?xml version="1.0" encoding="<$mt:publishcharset$>"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<mt:multiblog include_blogs="1,3">
<mt:ignore>トップページ</mt:ignore>
  <url>
    <loc><$mt:BlogURL encode_html="1"$></loc>
    <lastmod><$MT:Date format="%Y-%m-%dT%H:%M:%S"$><$MT:BlogTimezone$></lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
<mt:ignore>ウェブページ</mt:ignore>
<MT:Pages no_folder="1">
  <url>
    <loc><$MT:PagePermalink encode_html="1"$></loc>
    <lastmod><$MT:PageDate format="%Y-%m-%dT%H:%M:%S"$><$MT:BlogTimezone$></lastmod>
    <priority>1.0</priority>
  </url>
</MT:Pages>
<MT:Pages>
  <url>
    <loc><$MT:PagePermalink encode_html="1"$></loc>
    <lastmod><$MT:PageDate format="%Y-%m-%dT%H:%M:%S"$><$MT:BlogTimezone$></lastmod>
    <priority>1.0</priority>
  </url>
</MT:Pages>
<mt:ignore>ブログ記事</mt:ignore>
<MT:IfArchiveTypeEnabled archive_type="Individual">
<MTSetVarBlock name="blogentrycount"><$MTBlogEntryCount$></MTSetVarBlock>
<MTEntries lastn="$blogentrycount">
  <url>
    <loc><$MTEntryPermalink encode_xml="1"$></loc>
    <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
    <priority>1.0</priority>
  </url>
</MTEntries>
</MT:IfArchiveTypeEnabled>
<mt:ignore>カテゴリ</mt:ignore>
<MT:IfArchiveTypeEnabled archive_type="Category">
<MTCategories>
  <url>
    <loc><$MTCategoryArchiveLink encode_xml="1"$></loc>
    <MTEntries lastn="1" sort_by="modified_on"><lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod></MTEntries>
    <priority>0.5</priority>
  </url>
</MTCategories>
</MT:IfArchiveTypeEnabled>
<mt:ignore>年別アーカイブ</mt:ignore>
<MT:IfArchiveTypeEnabled archive_type="Yearly">
<MT:ArchiveList archive_type="Yearly">
<mt:setvarblock name="Date"><$MT:ArchiveDate format="%Y"$></mt:setvarblock>
  <url>
    <loc><$MT:ArchiveLink encode_html="1"$></loc>
    <MTEntries lastn="1" sort_by="modified_on"><lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod></MTEntries>
<mt:ignore>
    <mt:if name="DateYear" eq="$Date"><changefreq>daily</changefreq><mt:else><changefreq>never</changefreq></mt:if>
</mt:ignore>
    <priority>0.5</priority>
  </url>
</MT:ArchiveList>
</MT:IfArchiveTypeEnabled>
<mt:ignore>月別アーカイブ
<MT:IfArchiveTypeEnabled archive_type="Monthly">
<MT:ArchiveList archive_type="Monthly">
<mt:setvarblock name="Date"><$MT:ArchiveDate format="%Y%m"$></mt:setvarblock>
  <url>
    <loc><$MT:ArchiveLink encode_html="1"$></loc>
    <MTEntries lastn="1" sort_by="modified_on"><lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod></MTEntries>
<mt:ignore>
    <mt:if name="DateMonth" eq="$Date"><changefreq>daily</changefreq><mt:else><changefreq>never</changefreq></mt:if>
</mt:ignore>
    <priority>0.5</priority>
  </url>
</MT:ArchiveList>
</MT:IfArchiveTypeEnabled>
</mt:ignore>
</mt:multiblog>
<mt:ignore>
  <url>
    <loc></loc>
    <lastmod></lastmod>
    <changefreq></changefreq>
    <priority></priority>
  </url>
  <url>
    <loc>http://example.com/</loc>
    <lastmod>2008-05-27T02:49:06+09:00</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
  </url>
</mt:ignore>
</urlset>
</MT:For>

再構築が完了して、正しくsitemap.xmlが生成されたことを確認できたら、Googleウェブマスターツールへ登録しましょう。

サイトマップが肥大化した時の対策について

サイトマップには基本的にサイト内の検索エンジンにクロールして欲しいページをすべて含めることになりますので、テンプレートが肥大化し、再構築に負荷がかかるようになります。

再構築時の500エラーを避けるためには、下記のような方法があります。

  • サイトマップのうち、殆ど変更のない部分のブロックをキャッシュする
  • ウェブサイト、ブログ毎にファイルを分割し、全体のサイトマップはそれらをインクルードして出力する(必要な部分のみ再構築時に更新するようにする)
  • サイトマップXMLの再構築オプションを「手動」にし、rebuild-archivesスクリプトを使って定期的にcronジョブで再構築する
  • サイトマップXMLの再構築オプションを「再構築キュー経由」にして、非同期に再構築する

これらの方法については、下記のページも参考にしてください。

参考リンク


カテゴリー
サイト制作全般
テンプレート作成Tips

Recent Entries