Text形式サイトマップsitemap.txtをPHPで自作する方法
Posted: Last Update:
Google Search ConsoleやBing Web Masterに登録できるサイトマップの中で一番作成が簡単なのが「sitemap.txt」です。しかし、サイトを更新するたびに手入力するのは手間がかかります。そんなときにはPHPで自動更新できるようにしてしまいましょう!この記事では、PHPで「sitemap.txt」を作成する方法を0からご紹介します。
この記事の目次
sitemap.txtとは
Google Search ConsoleやBing Web Masterにサイトの登録すると、「サイトマップ」の登録を促されます。数あるサイトマップ形式の中でも、最も簡単に作成できるのがテキスト形式のサイトマップ「sitemap.txt」です。
サイトマップについて詳しく知りたい方は「GoogleやBingに登録するサイトマップとは?一番簡単に作れるサイトマップも紹介!」をご参照ください。
sitemap.txtとは
「sitemap.txt」とは、Text形式のサイトマップです。URLを羅列しただけのテキストファイルで、とてもシンプルな作りになっています。ここでは分かりやすく「sitemap.txt」と読んでいますが、ファイル名は変更してもかまいません。
sitemap.txtの内容
「sitemap.txt」には、1列につき1つのURLを記入します。URLを一つ記載したら改行し、サイト内の全てのURLを羅列していくだけなので、とても簡単に作成できます。
https://kamenokoki.com/article/20201027
https://kamenokoki.com/article/20201021
.
.
.
sitemap.txtをPHPで作成する利点
サイトマップは、サイトに記事を投稿するごとにアップデートするのが理想です。投稿するたびに「sitemap.txt」をテキストエディタで開いてURLを追記していくこともできますが、手間がかかります。手間をかけずに更新ごとにsitemap.txtも更新できる方法として、今回はPHPをご提案します。PHPを利用すれば「sitemap.txt」を自動的に更新することが可能です。
sitemap.txtを作成するPHPコード
最初に、sitemap.txtを作成するコードの基本となるサンプルをお見せしましょう。ご自分のURLに合わせて変更が必要になりますので、一つ一つの要素について、後ほど詳しく解説します。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
sitemap.txtを作成するPHPコード解説
ここでは、上で紹介したPHPのコードについて詳しく分解して紹介していきます。内容が分かる部分はどんどん読み飛ばしてください。
PHPに詳しくない方は、ご自身のサイトに合わせて内容を変更し、「createsitemap.php」の名前でルートディレクトリ(index.htmlやindex.phpと同じ階層)に保存してみてください。なお、下記の説明は、ルートディレクトリにPHPを保存することを前提としています。
PHPの開始と終了
PHPを利用する際には、下記でハイライトしたように、PHPの開始と終了を宣言します。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
ドメインを指定する
書き出すドメインを指定して変数「$myurl」に格納しました。ご自分のドメインに合わせてドメイン名を変更しましょう。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
ファイルのバスを指定する
サーバーサイドで動くPHPでは、ファイルの読み取りにファイルのパスが必要となります。ローカルPCでは「D:\Data」などと表示される部分です。レンタルサーバーでは、サーバーごとに異なります。ここでは、PHPをルートディレクトリ(index.phpのある一番上の階層)に保存することを前提にファイルパスを取得しました。「dirname(__FILE__)」というPHP関数を利用して、ファイルのパスを取得しています。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
「createsitemap.php」を下の階層のファイルに保存する場合には、パスの指定に工夫が必要になります。たとえば、PHPを「admin」というファイルに保存した場合には、下記のように「str_replace」を使って「admin」というファイル名をパスから削除するなど、工夫をしてみましょう。
$mypath = str_replace('/admin', '', $mypath);
読み取るフォルダを指定する
配列関数「array」を利用して、複数のフォルダにまたがって処理を行います。サイトマップに書き出したいファイルが置かれているフォルダを「""」で囲って指定します。フォルダが複数ある場合には「,」で区切って全て網羅します。画像やスタイルシートを保存してあるフォルダはサイトマップに書き出す必要がなので、ここでは指定しません。階層が深い場合には「***/***」などのように階層も含めて指定します。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
「sitemap.txt」を開く(作成する) / 閉じる
サイトマップを開いて、内容を書き出す準備をします。書き出しが終わったら「fclose($fp)」でファイルを閉じます。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
ここでは、「sitemap.txt」をルートフォルダ直下に置くことを想定しています。フォルダに保存したい場合には、「"$mypath/sitemap.txt"」を「"$mypath/admin/sitemap.txt"」などに変更しましょう。
「sitemap.txt」にindex.htmlなどを記述する
ここから、「sitemap.txt」にURLに書き込みを始めます。先に「$fp」として開いたsitemap.txtに「fwrite」で書き込みを行っています。「"\n"」はPHPの改行を意味しています。「"\n"」を入れることで、1つの列につき、1つのURLが記載されます。
「https://example.com」などのルートURLを忘れずに記載しておきましょう。そのほか、フォルダに入れていない「index.html」なども含めてもいいかもしれません。「fwrite($fp , "$myurl/index.html"."\n");」などと記載して、「fwrite($fp , "$myurl"."\n");」の下につけ足していきましょう。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
フォルダ内のファイルを探す
次に、指定した「"folder1","folder2","folder3"」内の「.html」で終るファイルを探します。「foreach($folders...」で「"folder1","folder2","folder3"」を順番に処理しています。ここでは「.html」という文書を想定していますが、ファイルの拡張子は適宜変更してください。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
「sitemap.txt」にフォルダ内のファイルを記述する
最後に、先ほど探したフォルダ内のファイルを順番に書き出します。「foreach($files...」で探しあてたファイルを順番に書き出す処理をしています。
「glob」関数ではファイルパスまで取得してしまうため、「$filename = basename($filename);」でファイル名のみを残すように処理しました。
「fwrite($fp」で、開いている「sitemap.txt」に書き込みを行います。「"$myurl/$folder/$filename"」で、「先に特定したドメイン/フォルダ名/ファイル.html名」を欠く内容として指定。「"\n"」はPHPの改行です。「"\n"」を入れることで、1つの列につき、1つのURLが記載されます。
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
PHPを実行する方法
上記で変更したPHPを「createsitemap.php」などの名前で保存し、このPHPをブラウザから開くと「sitemap.txt」が作成されます。しかし、ブラウザには何も表示されません。少し味気ないので、HTMLの要素も入れ込んでみました。ページを開くと、作成したばかりのsitemap.txtへのリンクが表示されるので、内容を確認することもできます。
<head></head>
<body>
<h1>sitemap.txtの作成</h1>
<?php
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$folders = array("folder1","folder2","folder3");
$fp = fopen("$mypath/sitemap.txt", "w");
fwrite($fp , "$myurl"."\n");
foreach($folders as $folder){
$files = glob("$mypath/$folder/*.html");
foreach($files as $filename){
$filename = basename($filename);
fwrite($fp , "$myurl/$folder/$filename"."\n");
}
}
fclose($fp);
?>
<p>
<a href="/sitemap.txt" target="_blank">sitemap.txt</a>の作成が完了しました。
</p>
</body></html>
表示されるページはこちらです。デザインなどはご自身で工夫してみてくださいね!
これで、「createsitemap.php」を開くたびに「sitemap.txt」が更新されるようになります。作成した「sitemap.txt」は必ず内容を確認して、PHPに問題がないか検証しておきましょう。作成お疲れさまでした!
最後に
Google Serch ConsoleやBing Web Masterに提出できるサイトマップ「sitemap.txt」を、PHPで作成する方法をご紹介しました。フォルダの変更などがあった際にも新たなサイトマップが簡単に作成できてしまうのでとても便利です。PHPを触ったことがない方には少しハードルが高く感じるかもしれませんが、意外と簡単にできるので、ぜひ挑戦してみてください。
この記事がサイトを自作している同志の皆様のお役に立てば幸いです。