MTで作成するサイトマップを複数に分ける

Googleなどの検索エンジンにウェブページの情報を送信するために作るサイトマップのファイル(sitemap.xml)。一つに5万ページ、ファイルサイズ10MBまでOK! と言われても、その数十分の一の規模の当サイトですら、Movable Typeの再構築に時間が掛かり過ぎるヽ(`Д´)ノ

そこで、サイトマップを分けることにした。以下、基本的な情報についての参考サイト。

尚、あくまで自分のためのメモであり、sitemap1.xmlとsitemap2.xmlの件数算出方法は独自に作ったこと、ページ数が少ないのに分けても良いのか、など他人様への保証はない。分けるべきではないという意見もあるようだが、私はMT再構築の負荷に耐えられないし、検索エンジンへの掲載をそこまで気にするようなサイトでもなく、現在のところ不都合を感じていないのでこのまま行くつもり。

sitemap_index.xml

サイトマップファイルのアドレスを記したもの。一度作ってしまえば内容は変わらないので、MTテンプレート画面での公開区分は「スタティック(規定)」ではなく「手動」にしてある。

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc><mt:WebsiteURL>sitemap1.xml</loc>
</sitemap>
<sitemap>
<loc><mt:WebsiteURL>sitemap2.xml</loc>
</sitemap>
</sitemapindex>

sitemap1.xml

ウェブページの明細を掲載するサイトマップその一。新しい記事を追加すると更新されることになるため、MTテンプレート画面での公開は「スタティック(規定)」。

<mt:RemoveBlank>
<mt:SetVarBlock name="entct"><mt:BlogEntryCount blog_ids="2,3,4"></mt:SetVarBlock>
<mt:SetVarBlock name="mapct"><mt:Getvar name="entct" op="-" value="1000"></mt:SetVarBlock>

<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc><mt:WebsiteURL></loc> <lastmod><mt:Date format="%Y-%m-%dT%H:%M:%SZ"></lastmod> <changefreq>daily</changefreq> <priority>1.0</priority> </url> <mt:Entries lastn="$mapct" blog_ids="2,3,4"> <url> <loc><mt:EntryPermalink encode_xml="1"></loc> <lastmod><mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"></lastmod> </url> </mt:Entries> </urlset> </mt:RemoveBlank>

2行目はブログ全体のページ数の取得。値は「entct」。
3行目でsitemap1.xmlに掲載するページ数を算出。値は「mapct」。
「entct」が1050件ならば1000を引いて「mapct」は50となり、「lastn="$mapct"」で50ページ分をsitemap1.xmlに出力する。

この計算式を記すとサイトマップに出力した際にその行が空白になってしまうため、MTRemoveBlankプラグインを利用している。

sitemap2.xml

ウェブページの明細を掲載するサイトマップその二。sitemap1.xmlで除外した1000ページ分を出力。MTテンプレート画面での公開は「スタティック(規定)」ではなく「手動」にしてある。(これを「手動」にしないとサイトマップを分ける意味がない)

sitemap1.xmlの件数が増えたら、sitemap1.xmlとsitemap2.xmlにある「1000」という数字を1100なり1200なり、気が向いた時に変更して再構築。

<mt:RemoveBlank>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<mt:Entries sort_order="ascend" limit="1000" blog_ids="2,3,4">
<url>
<loc><mt:EntryPermalink encode_xml="1"></loc>
</url>
</mt:Entries>
<url>
<loc><mt:WebsiteURL>ovs/</loc>
</url>
<url>
<loc><mt:WebsiteURL>jpn/</loc>
</url>
<url>
<loc><mt:WebsiteURL>hkd/</loc>
</url>
</urlset>
</mt:RemoveBlank>

サイトのトップページと最新記事をsitemap1.xmlに掲載し、それより重要度の落ちる古い記事とカテゴリーアーカイブページをsitemap2.xmlに掲載、というわけ。再構築時の負荷を考慮し、最終更新日時(lastmod)や重要度(priority)などは出来るだけ省略。

robots.txt

sitemap_index.xmlのみを掲載(通知)すれば、読み取ってくれている。

Sitemap: <mt:WebsiteURL>sitemap_index.xml

注意

四ファイルは全て、必ずトップディレクトリに置く。

umakaras.net