CakePHPで静的なサイトマップの作成方法

サイトマップ自体はユーザから見れば、あってもなくても特に影響することはないかと思いますが、google analytics(グーグルアナリティクス)などを使ってアクセス解析しようとした場合にサイトマップの送信が必要となってきます。

作成しようとしているサイトが動的にページを作成するのであれば、自動化の処理が必要になってきます。ですが、ページ数が少ない(手動で追加していく)ようなら静的に作成してしまっても全然問題ないです。

CakePHPで静的なサイトマップの作成方法

では、CakePHPで静的なサイトマップをどのように作成するかというと、以下の流れになるかと思います。静的/動的に関わらず、手順や修正する箇所は大体変わらないと思います。動的の場合は、Modelから対象のDBを読み込んで動的に作成するといった処理が増える感じです。

話を戻して、まずはルート情報を設定します。Routes.ctp に (URL)/sitemap.xml へアクセスした場合に処理する内容を追加します。

(名称などは、自分の使いやすいように読み替えてください)

    Router::connect('/sitemap.xml', array('controller' => 'sitemaps', 'action' => 'sitemap'));

次に、サイトマップのレイアウトを準備します。僕は面倒臭かったので、default.ctp をそのまま修正しました。

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo $content_for_layout;
?>

続いて、Viewを作成します。<loc>部分には、自身のサイトのページをあるだけ追加します。<lastmod>は必須項目ではないので、無くても大丈夫ですが、自分はとりあえず入れています。気になる方は xml の項目について調べてみてください。

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>URL</loc>
        <lastmod>2015-09-20T00:00:00+09:00</lastmod>
    </url>
    <url>
        <loc>URL</loc>
        <lastmod>2015-09-20T00:00:00+09:00</lastmod>
    </url>
</urlset>

最後に、Actionを作成します。対象のメソッドで xml 用のレイアウトを設定してあげます。

<?php
class SitemapsController extends AppController {
    // サイトマップ
    public function sitemap(){
        $this->layout = "xml/default";
     }
}

以上です。ここまで出来たら、(URL)/sitemap.xml にアクセスするとサイトマップが表示されるかと思います。