動的なページを静的なURLでアクセス出来るようにする
SEO対策になるのかは自身では実感がないがやってて損はなさそうなので実装してみた
意外に実装に手間取り、がっちりやると説明しきれないのでとりあえずこうすれば実現できる
すっごく簡単なサンプルコード及び手順
■要件
レシピサイトである
レシピに属するカテゴリ一覧ページ【list.php】がある
http://【ドメイン名】/category/list.php?category_name=meet
といった感じでアクセスすると肉料理一覧が表示される
これを下記の様にアクセスしてページを表示する
http://【ドメイン名】/category/meet.html
さらに下層に牛肉料理一覧とあった場合は
http://【ドメイン名】/category/meet/beef.html
でアクセス出来るようにする
■手順
・.htaccessでルールを記述する ・データベースにSEO対策したいデータを用意する(ここでは配列で擬似的に用いる) ・アクセスされたパラメーターを元にデータをセットしていく ・ページを表示する
AddHandler php5.3-script .htm .html RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^category/(.+).html$ category/list.php?category_name=$1 [L]
従来のアクセス【category/list.php?category_name=$1】を【^category/(.+).html】に変換する URLがページで有ることをわかりやすくするために【.html】をつけるといいらしい
<?php // ※1 $categories = array( array( 'id'=>1, 'category_name'=>'meet', 'name'=>'肉料理', 'title'=>'サンプルサイト - 肉料理', 'description'=>'肉を使った料理', 'keywords'=>'レシピ, 肉料理', 'path'=>'/meet.html', ), array( 'id'=>2, 'category_name'=>'meet/beef', 'name'=>'牛肉料理', 'title'=>'サンプルサイト - 牛肉料理', 'description'=>'牛肉を使った料理', 'keywords'=>'レシピ, 牛肉料理', 'path'=>'/meet/beef.html', ), array( 'id'=>3, 'category_name'=>'meet/pook', 'name'=>'豚肉料理', 'title'=>'サンプルサイト - 豚肉料理', 'description'=>'豚肉を使った料理', 'keywords'=>'レシピ, 豚肉料理', 'path'=>'/meet/pook.html', ), array( 'id'=>4, 'category_name'=>'fish', 'name'=>'魚料理', 'title'=>'サンプルサイト - 魚料理', 'description'=>'魚を使った料理', 'keywords'=>'レシピ, 魚料理', 'path'=>'/fish.html', ), array( 'id'=>5, 'category_name'=>'meet/beef/beefsteak', 'name'=>'牛肉ステーキ', 'title'=>'サンプルサイト - 牛肉ステーキ', 'description'=>'牛肉を使った料理 ステーキ', 'keywords'=>'レシピ, 牛肉料理, ステーキ', 'path'=>'/meet/beef/beefsteak.html', ), ); $data = ''; // ※2 foreach($categories as $category) { if($_REQUEST['category_name'] == $category['category_name']) { $data = $category; break; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="keywords" content="<?php echo $data['keywords']; ?>"> <meta name="description" content="<?php echo $data['description']; ?>"> <title><?php echo $data['title']; ?></title> </head> <body> <ul> <?php // ※3?> <?php foreach($categories as $category):?> <li><a href="/category<?php echo $category['path']; ?>"><?php echo $category['name']; ?></a></li> <?php endforeach; ?> </ul> <?php // ※4?> <h3><?php echo $data['name']; ?>のページ</h3> </body> </html>
※1: この配列はデータベースで定義したりする ※2: パラメータ【category_name】が配列の中に存在していればデータを格納する ※3: 配列で定義されているリンクを生成する ※4: 現在表示されているページ名を表示する