サイトマップの自動作成
PHPで動的ページのサイトマップファイル(sitemap.xml)を作成
この方法は、ある程度PHP、MYSQLの理解がある方推奨です。とはいってもそこまで難しい方法ではないため、初心者の方でも十分実装可能です。サイトマップファイルの各タグ、オプションについてはこちら
動的ページでサイトマップファイルがすぐに変更になるサイトは、毎回サイトマップの更新が発生し、更新作業を面倒に感じている方も多いと思います。
この方法は、PHPによって動的ページのサイトマップ作成作業を簡略化するものです。スクレイピングサイト等で、記事が自動更新され、その内容をデーターベースに格納されている方には便利です。サーバーにcronjob機能があれば、自動実行で更新作業自体を自動化できます。
※MYSQLに動的ページの引数情報等が格納されているのを前提としています。
動的ページのサイトマップ自動作成のPHPサンプル
PHPでの動的ページのサイトマップ自動作成のサンプルソースを記述します。
サンプルは、データベースに格納されている引数付URLページIDを取得し、引数付ページのサイトマップを作成します。
弊サイトは動的ページはないため、サンプルに記載されている動的ページのURLは存在しません。
<?php
// データベースに接続
if (!$con = mysql_connect("localhost", "ユーザID", "パスワード")) {
echo "接続エラー" ;
exit ;
}
// データベースを選択
if (!mysql_select_db("データベース名", $con)) {
echo "データベース選択エラー" ;
exit ;
}
// 引数付ページ内容の取得
mysql_query("SET NAMES utf8");
$query = "SELECT no FROM sample_mst ORDER BY no";
if (!$res = mysql_query($sql)) {
echo "SQL実行時エラー" ;
exit ;
}
while($row = mysql_fetch_array($res)){
$no[] = $row["no"];
}
// 現在時刻取得・変換
$now_timestamp = time();
$now = date("Y-m-d",$now_timestamp);
// 固定URLページの出力
// サンプルのためURL数省略してます。自サイトに合わせて変更要
$output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<urlset xmlns=\"https://www.sitemaps.org/schemas/sitemap/0.9\">
<url>
<loc>https://adult-affi.info/</loc>
<lastmod>$now</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://adult-affi.info/adultsite/</loc>
<lastmod>$now</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://adult-affi.info/adultsever/</loc>
<lastmod>$now</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
";
// 引数付ページの出力
foreach ($no as $pageno){
$output .= " <url>
<loc>https://adult-affi.info/page/?no=".$pageno."</loc>
<lastmod>$now</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
";
}
$output .= "</urlset>";
// サイトマップ出力
$fp = fopen('../sitemap.xml','w'); // ドメイン配下のphpディレクトリで実行した場合のパスのため変更要
if ($fp){
if (flock($fp, LOCK_SH)){
if(fwrite($fp,$output) == FALSE){
print("サイトマップの書き込みに失敗しました。");
}
}else{
print("ファイルロックに失敗しました。");
}
}
$flag = fclose($fp);
if (!$flag){
print('クローズに失敗しました');
}
?>
※この方法は、自サイトURLを自動で抽出するようなクローラー機能ではないため、ご注意ください。