サイトマップの作成方法
開発環境:CakePHP2.5.1
Googleのウェブマスターツールに渡すためのサイトマップの作成方法です。
コントローラーの作成
まずはコントローラーを準備します。
<?php App::uses('AppController', 'Controller'); class SitemapController extends AppController { public $uses = array('Sample'); public $components = array('RequestHandler'); public function index() { $this->layout = 'xml/default'; $this->RequestHandler->respondAs('xml'); $data = $this->Sample->find('all'); $this->set(compact('data')); } }
上記例では、Sampleモデルのデータのみを取得していますが、ここでサイトの様々なデータをまとめてviewに渡すようにしてください。
ビューの作成
続いて、ビューの作成をします。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <?php foreach ($data as $key => $value): ?> <url> <loc><?php echo $value['loc']; ?></loc> <lastmod><?php echo date(DATE_W3C, strtotime($value['lastmod'])); ?></lastmod> <changefreq><?php echo $value['changefreq']; ?></changefreq> <priority><?php echo $value['priority']; ?></priority> </url> <?php endforeach; ?> </urlset>
$data の中身はモデルでの設定によって変更してください。
また、最低限 loc の項目のみあればサイトマップとして成り立ちますが、オプションとして、最終更新日時の lastmod、更新頻度の changefreq、優先順位の priorityを付けておきましょう。
lastmodタグ
最終更新日時を表す lastmod タグは次の2種類の形式で指定します。
・YYYY-MM-DD 例:2014-10-12
・YYYY-MM-DDThh:mm:ssTZD 例:2014-10-12T08:01:21+09:00
locで指定されたURLが最後にいつ更新されたかの情報で、検索エンジンがクロールする際の参考値として扱われます。
changefreqタグ
更新頻度を表す changefreq タグは次の7つの何れかを指定します。
・always 常に更新される
・hourly 1時間に1回の更新
・daily 1日に1回の更新
・weekly 1週間に1回の更新
・monthly 月に1回の更新
・yearly 年に1回の更新
・never 更新されない
locで指定されたURLの更新頻度に関する情報で、alwaysにすれば常に検索エンジンが来てくれるという訳ではなく、こちらもあくまで参考値として扱われます。
priorityタグ
優先順位を表す priority タグは、0.0から1.0の間の値を指定します。
1.0が一番重要なページとなります。
locで指定されたURLのサイト内での優先順位になりますので、すべてを1.0にしてしまうと、優先的なページがないことになるので、バラバラにする必要があります。
サイトマップへアクセス
以上で準備は完了です。
サイトマップを表示されるには、上記の例の場合、/sitemap/ というURLを叩けば表示されます。
URLを /sitemap.xml のような状態にしたい場合はルーティングで次のように設定します。
Router::connect('/sitemap.xml', array('controller' => 'sitemap', 'action' => 'index'));
サイトマップの注意点
サイトマップに指定できるURLの上限は50,000個までとなっているので、それ以上になる場合は、サイトマップ内で別のサイトマップを呼び出して対応する必要があります。