CakePHPクッキング

サイトマップの作成方法

開発環境: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個までとなっているので、それ以上になる場合は、サイトマップ内で別のサイトマップを呼び出して対応する必要があります。

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑