どの様にして、CakePHP で Amazon の様に URL のディレクトリ先頭部に SEO 的なワードを入れられるかを考えてみた。
CakePHP で利用するコントローラーは、アクセスされた URL を元に /cake/cake/dispatcher.php が解析しコントローラーを決めている。しかし、/cake/cake/dispatcher.php は CORE から読み込まれるため APP だけで完結することができない。
/cake/app/config/routers.php で制御しようかとも考えたが、その都度設定するのも手間が掛かるし手を入れるのは運用上よくないことだと思う。
そこで思い付いたのは、/cake/app/webroot/index.php で呼び出されている Dispatcher に URL を渡してやることだ。
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url);
元々、$url が渡されているだが、実はこの $url は NULL だ。そのため、$Dispatcher->dispatch() 内で環境変数からリクエストされた URL を参照し、解析して呼び出すコントローラーを決めている。
そこで、次の様に一旦ディレクトリパスを反転し URL を渡してやる。
$paths = explode('/', $_REQUEST["url"]);
$paths = array_reverse($paths);
$url = implode('/', $paths);
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url);
こうすれば、簡単にコントローラーやアクション・システムで必要なパラメータはディレクトリパスの後方となるため、SEO 的なワードを前方に入れてやることが可能となる。
ちなみに、リクエストパラメータはまた別の箇所で参照し変数に代入しているため、ここでリクエストパラメータを気にする必要は無い。
example
http://example.com/ほげほげ/index/tests?p1=1&p2
array(7) {
["pass"]=>
array(1) {
[0]=>
string(12) "ほげほげ"
}
["named"]=>
array(0) {
}
["controller"]=>
string(5) "tests"
["action"]=>
&<span>string</span>(5) "index"
["plugin"]=>
NULL
["form"]=>
array(0) {
}
["url"]=>
array(3) {
["url"]=>
string(24) "tests/index/ほげほげ"
["p1"]=>
string(1) "1"
["p2"]=>
string(0) ""
}
}
Posted in CakePHP, PHP, プログラミング.
Tagged with CakePHP, SEO.
By msa.uccky
– 2009/08/12
Mac OS X というより、正確には Finder においての話だと思う。Finder 上で濁音半濁音が含まれた文字を入力し確定させると見た目は変わらないのだが文字コードが変換されるようだ。
例えば、「が」という文字は文字コードは 0xE3818C と入力される。しかし、Finder 上において一度ディレクトリ名やファイル名を確定し文字コードを確認してみると、0xE3818B 0xE38299 という文字コードに変換されてしまうのだ。
これによっていくつか問題が出てくる。
ディレクトリ名やファイル名をコピーし、エディタに貼り付ける
これを行うと、2文字構成の文字コードが貼り付けられてしまう。Mac OS X では問題ないのだが、他の環境で確認してみるとこの貼り付けられた文字は文字化けしてしまっている。
FTP 等でアップロードする
クライアントにもよるのだろうが、この問題に対応していないクライアントはそのまま2文字構成の文字コードでアップされてしまう。そのため、他の環境からアップロードしたファイルのファイル名は文字化けしてしまっている。
調べたところ、Filezilla はこの問題に対応しているようだ。アップロード時に文字コードを変換し、濁音半濁音を1文字構成に変換しファイルをアップロードしている。
関連サイト
Posted in Mac OS X.
Tagged with Finder, Mac OS X, Tips.
By msa.uccky
– 2009/07/19
SEOについていろいろと調べてWEB上で調べられることも少なくなってきたので本を読んでみたのでそのレビュー。
タイトルが釣りっぽいタイトルではあるのだが、WEB上では見受けられない内容もあったのでそれなりに満足。内容としては、SEOを始めてからの中級者向けといった感じだろうか?割と多く用語が出てくるため、SEOを始めたばかりの方にはお薦めできない。
Posted in レビュー, 本.
Tagged with Google, SEO, Yahoo!.
By msa.uccky
– 2009/07/07
エラーメッセージ内容の変更
方法としては2通りある。
タイプ別にエラーメッセージ内容を変更する
required や email などタイプ別のメッセージを変更させる方法。これは非常に簡単で validate 本体を読み込んだ後にメッセージ定義ファイル読み込むだけでいい。各言語向けのメッセージ定義ファイルが一緒に配布されているのでこのメッセージ定義ファイルを読み込めばローカライズは終了だ。
<script src="js/jquery-1.3.2.js" type="text/javascript">
</script>
<script src="js/validate/jquery.validate.js" type="text/javascript">
</script>
<script src="js/validate/messages_ja.js" type="text/javascript">
</script>
しかし、この各言語向けのメッセージ定義ファイルに日本語は含まれていない。調べてみたところ、日本語の定義ファイルを公開されている方がいた。タイプ別の日本語化のみであればこちらのファイルを利用させてもらえばいいだろう。
個別にエラーメッセージ内容を変更する
入力項目1つ1つに対してエラーメッセージを変更する方法。各項目の rules に対応する messages を定義していく。
$("#form-message").validate({
rules: {
name: {
required: true
},
mail: {
required: true,
email: true,
},
remail: {
required: true,
email: true,
equalTo: "#form-mail"
}
},
messages: {
mail: {
required: "メールアドレスを入力してください",
email: "正しいメールアドレスを入力してください"
},
remail: {
required: "メールアドレスを入力してください",
email: "正しいメールアドレスを入力してください",
equalTo: "メールアドレスが一致しません"
}
}
});
example
エラーメッセージ表示位置の変更
エラーメッセージの表示位置を変更する方法もいくつかある。
- errorLabelContainer
- errorClass
- errorPlacement
ここでは、errorPlacement を利用したエラーメッセージの表示位置を変更する例をあげる。errorLabelContainer や errorClass を利用したエラーメッセージの表示は試していないので、すぎゃーん氏のエントリーを紹介して省略しておくこととする。
errorPlacement は、エラーとなった際に対象のエレメントとエラーが渡される。相対的にエラーメッセージを表示するには次のようになる。
$("#form-message").validate({
errorPlacement: function(error, element){
error.appendTo(element.parent().next());
}
});
<p>
<label for="name">
<span>名前</span>
</label>
<input id="form-name" name="name" />
</p>
<p>
</p>
ちなみに、サンプルを作成している過程において form のレイアウトを含め validate プラグに同梱されている cmxforms.js を読み込んでやればことが済むのではないかと気が付く。cmxforms.js を読み込むことで、デフォルトだと input 要素の右側に表示されるのだが、cmxforms.js を読み込むことでエラーメッセージは改行され input 要素にインデントを揃えて表示してくれるのだ。
example
関連サイト
Posted in jQuery, プログラミング.
Tagged with jQuery, Tips.
By msa.uccky
– 2009/07/07
結論としては、現状のサービス品質では 4,480円(税込)/月はない。
- 大通りに面したファーストフード窓際でつながらない
- 場所によって大きく通信速度が異なる
- 少し移動しただけでも接続状況が3Gと比べ大きく異なる
- 思ったよりも通信速度が遅い
等々、自宅の回線として使うにもモバイルとして利用するにも耐えかねない非常に微妙なサービスとしか言わざるをえない。この金額を払うのであれば、間違いなくイー・モバイルを選択するだろう。
しかし、品質が改善されてくればまだ選択の余地はあると思っている。それは、WiMAX 機器追加オプションがあるからだ。接続状況と一定の通信速度が保たれてくれば、自宅回線とモバイルを併用しコストを抑えるといった運用の仕方が非常に実現しやすいだろう。
それにしても、有料サービスにそのまま移行すると言った声を全く聞かない。サービス品質が向上する前にサービスが終了してしまうのでは?とも考えてしまう・・・。
関連サイト
Posted in ブログ.
Tagged with UQ, WiMAX, モニター.
By msa.uccky
– 2009/07/03
Gmail へ転送という手もあるが、メインアカウントに必要性のないメールを受信したくないというのもあり、所有しているドメインのメールアドレスをサブアカウント的に利用している。さくらインターネットのWEBメーラはお世辞にも使い勝手がいいとは言い難いため、Gmail を利用するために Google Apps へ移行してみた。
1. Google Apps へ申し込み
Google Apps へようこそ から申込みを行う。エディションは、Standard Edition を選択。また、ドメインは既に取得済みなのでドメイン名を入力しそのまま次へ進む。
2. ドメインの確認を行う
今回は MX レコードの変更をのみを目的としているため HTML ファイルのアップロードを行いドメインお所有確認を行う。
さくらレンタルの WEB サーバに設定している所有ドメイン直下にファイル名 googlehostedservice.html を作成し、表示されているテキストをファイルに書き込む。
もし、クローラ対策などで特定のユーザーエージェントをアクセス禁止にしていたり、リダイレクトさせている場合は設定を確認。しばらくすれば認証され、ドメインの確認のリンクがダッシュボードから消えるはずである。
3. 既存メールアカウントの作成
移行する所有ドメインで作成していたメールアカウントを作成しておく必要がある。これは、MX レコードが変更された直後でもメールが受信できるよう予めアカウントを作成しておく。
ちなみに、postmaster はユーザでは作成できない模様。グループとして作成し、メーリングリストとする必要があるようだ。
4. MX レコードの変更
ドメインもさくらインターネットにて取得しているのでさくらインターネットでの設定方法。
会員メニューより、契約情報→ドメインメニューから利用するドメインのゾーン設定を選択する。
既存の MX レコードを削除し、Google Apps に記載されている MX レコードを入力していく。エントリ名は @ とし、ひたすら次の値を入力していく。
- 10 ASPMX.L.GOOGLE.COM.
- 20 ALT1.ASPMX.L.GOOGLE.COM.
- 20 ALT2.ASPMX.L.GOOGLE.COM.
- 30 ASPMX2.GOOGLEMAIL.COM.
- 30 ASPMX3.GOOGLEMAIL.COM.
- 30 ASPMX4.GOOGLEMAIL.COM.
- 30 ASPMX5.GOOGLEMAIL.COM.

こんな感じに MX レコードが設定されればOK。
MX レコード値の入力後、画面左にある「データ送信」をクリックし最後に Google Apps 側で「指定された手順を完了しました」をクリックすることですべての移行作業は完了だ。あとは、MX レコードが切り替わるのを待ちメールの送受信をテストしてみる。
Posted in ブログ.
Tagged with Google Apps, さくらインターネット.
By msa.uccky
– 2009/06/16
iPhone 3G を購入済みで iPhone 3G S へ機種変更したい方は多くいるのではないだろうか?買い替えの金額に悩んでいる方は、今所持している iPhone 3G をじゃんぱらの買い取りサービスを利用し売却してみてはどうだろう。
上限価格はそれぞれ次の通りとなっている。
- 16GB – 25000円
- 8GB – 17000円
しかし、開発者は追加されたハードウェア・API 差異の動作確認を行うために手放さず手元に残しておくだろう。Apple にも、先日の GDD09 で Google が 来訪した事前登録者へ GDD Phone を配布したように開発者へ優しくしてほしいものだ。
参考サイト
Posted in ブログ.
Tagged with iPhone.
By msa.uccky
– 2009/06/13
元々、行動マーケティング辺りで行われていると記事を目にしたことがあるが近辺で実装について聞かれたので実際にやってみた。
jQuery で実装するとたったこれだけ。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>ブラウザの訪問済みサイトをチェック</title>
<script src="jquery-1.3.2.js" type="text/javascript"></script>
<script type="text/javascript" >
$(document).ready(function(){
$("li > a").each(function(){
if($(this).css("color")!="rgb(0, 0, 238)") {
$("#result").append($(this).html());
$("#result").append("<br />");
}
});
$("#target").hide();
});
</script>
</head>
<body>
<h1>訪問済みサイト</h1>
<ul id="target">
<li><a href="http://mixi.jp/">mixi</a></li>
<li><a href="http://gree.jp/">GREE</a></li>
<li><a href="http://www.yahoo.co.jp/">Yahoo Japan</a></li>
<li><a href="http://www.google.co.jp/">Google (Japan)</a></li>
<li><a href="http://www.soumu.go.jp/">総務省</a></li>
</ul>
<div id="result"></div>
</body>
</html>
Example
Posted in jQuery.
Tagged with jQuery.
By msa.uccky
– 2009/05/26
少し以前から公開されていた様なのだが、あまり知られていないのでご紹介。
人気タイトルかつ有料アプリである Flight Control のセールスナンバーが、firemint の運営するブログにて公開されている。iPhone デベロッパーの方は必見。
内容としては、
- ダウンロード数(3/24〜4/25)
- 国別の割合
- 1日の最大ダウンロード数
- チャートポジション
など、非常に有用なデータが載っている。
参考サイト
Posted in ブログ.
Tagged with App Store, iPhone.
By msa.uccky
– 2009/05/21
とあるサイトを公開したのでクローラーに検索起点を登録…、と思ったのだがこの辺りは全く分からない。
調べてみると同じ検索エンジンでも URL を入力させるだとか、sitemap を登録させるだとかがある。また、国内外で登録するツールが異なったりしているとどちらが有効なのかもよく分からない。こうなってくると手当たり次第に見つけたものにクロール起点を登録するしかない。
ひとまず、Google, Yahoo!, MSN あと百度にも登録してみた。次のリンクより、各クローラーに対しクロール起点を登録させることができる。
Google
Yahoo!
MSN
百度
また、次のリンクは sitemap に関するリンク。
@2009/06/01 修正
MSNの検索エンジンが bing に移行と共にドメインが変わっていたので、MSNのクロール起点登録URLを変更した。
Posted in ブログ.
Tagged with crawler, SEO, sitemap.
By msa.uccky
– 2009/05/17