【30日目】sitemap.xmlをPHPで自作してみた
Posted: Last Update:
※こちらは日記です。sitemap.xmlの作成方法は開発記事に分かりやすくまとめています。
関連記事
Google Search ConsoleやBing Web Masterに登録するサイトマップ「sitemap.xml」を作りたい!でも、どこから手をつけていいのか分からない…。そんな方に向けて、この記事では「sitemap.xml」の形式や、PHPでの作成方法を詳しく紹介します
サイトを作成し始めて30日目になりました。サイトの公開を数日前に完了し、昨日は検索サイトへの登録が完了。広告に申し込む前に、収益化に適したサイトにアップグレードしようと頑張っている所です。
ロードマップの見直し
日記を書き始める前に昨日登録を完了したGoogle Search Consoleを見に行ったのですが、情報が何も反映されていませんでした…。サイトマップがないのが原因かと思われる…。今日はコンテンツに合わせてサイトを作り直すつもりでしたが、少しロードマップを変えて、今日はsitemapの作成をしたいと思います。順番を変えるついでに少し内容も見直しました。
- 準備 - サイトの全体像を決める
- 使用するプログラミング言語を決めて環境を整える
- サイトの基本構造を作って公開する
- 収益化に最適なサイトにアップグレードする
- コンテンツを充実させる(他の作業と同時進行)
- サイトを見てもらえるようにサーチエンジンに登録する
- sitemap.xmlとRSSを作成する ←今ここ
- コンテンツに合わせてサイトを修正、スマホにも対応する
- お問い合わせページを作る
- 検索ボックスを作る
- サイトマップページを作る
- 個人情報に関するページを作る
- SEOとセキュリティについて調べ、対応する
- GoogleアドセンスとAmazonアソシエイトの申し込みをする
- ローカルで簡単に入力ができるようにフォームを作る
- フォローアップ - より収益化に向いたサイト構造に変更する
今日の作業に入る前に、コンテンツの充実の話
他の作業と同時に進めている「コンテンツの充実」の件、昨日はサブドメインを取得しました。その時に「403エラーが表示されている」とご報告したのですが、今日見に行っても同じ状態です。こんな時に表示されるのは404エラーではないのかと検索したら…。「トップページをアップロードしてないと403エラーになるよ」との情報がでてきました!ファイルをアップロードしていないせいで表示されていないだけだった…。そっさくファイルをアップロードしてみたいと思います。
ファイルをアップロードして、challenge.kamenokoki.comに接続すると、無事にページが表示されました!でも、「https://」(セキュアなページ)にリダイレクトされません。「https://」ページがある場合はそちらが表示される、というのは私の思い込みだったみたい!急遽.htaccessに下記のコードを書いて、「http://」に接続しても「htpps://」にリダイレクトするようにしました。ページを開くと、無事「htpps://」にアクセスできたので、このサイトにも同じ設定をしておきました。
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
実際のページがこちら。「亀のチャレンジ」というサイトで、××日チャレンジに挑むブログです。現在は30日チャレンジをしていて、アメリカ最新の話題をまとめつつ、英単語の紹介もしています。よければ見てやってください。
sitemap.xmlとRSSについて詳しく調べてみた
さて、姉妹サイトも公開できたので、今日の本題である「sitemap.xmlとRSSを作成する」に移りましょう。これまでにしてきた検索の中でイメージはなんとなくできているのですが、どういうものなのか、自分で作れるのかを調べてみます。
まずは「sitemap.xml」。これは、検索エンジンがページの構成を把握するのに必要とのこと。定期的に「sitemap.xml」を更新すれば、検索エンジンが新しいページや更新したページの情報も勝手に取得してくれるそうです。また、サイトの「サイトマップページ」としても使えるとか。Google Search Consoleのヘルプページに書いてあったsitemaps.orgに行くと、ファイルの中身は意外とシンプルな物でした。ちなみに、Google Search Consoleでは、RSSフィードによるサイトマップの送信も許可しているそうです。RSSだけ作ってもいいのかな?
次にRSSについても調べてみました。RSSは「Really Simple Syndication」の略だそうです。サイトに接続しなくてもサイトの簡単な情報を送信・取得するためのファイル、というイメージでしょうか。昔outlookにRSSフィードを取得するオプションがありましたね。今の若い子は知らないのかな?(年齢がばれる…)。ブログランキングが最新情報を取得するために使っているので、実装したいです。あと、将来的にTwitterとも連携できるかも?こちらも公式サイト?がありました。項目はsitemapよりやや多いものの、単純にサイト情報を羅列していくだけのファイルのようです。
sitemap.xmlとrss.xmlは自分で作れるかも
検索した結果、sitempもRSSも情報を羅列しただけのXMLファイルだということが分かったので、自分で作れる気がしてきました。PHPを作っておいて、一日に一回動かせばいい気がする。毎日の作業は、「ローカルでファイルをアップデート」→「FTTPSでミラーイングアップロード」→「サイトに接続しておかしなところがないかチェック」、という手順でやっています。サイトに接続しておかしなところがなかったら、ぽちっとクリックしてsitemapとRSSをアップデートできるような機能を実装できれば理想的です。
まずは、必要なものとか、作る手順を考えなければいけません。パスワードがないと入れない隠しページと、ぽちっと押したらファイルをつくる機能と…、あれやこれやで、計画としてはこんな感じです。
- sitemap.xmlに書き込む内容を決める
- rss.xmlに書き込む内容を決める
- 上記2ファイルに書き込むPHPを作る
- 3のファイルを管理者しかログインできない設定にする(検索エンジンからも隠す)
sitemap.xmlに書き込む内容を決める
sitemap.xmlに関しては、sitemaps.orgに書いてある内容から必須項目のみ入れます。必要なものが少ないですね。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> ※※ここから各ページを入れ込みますと言うタグ。ページの数だけ繰り返す
<loc>ページのURL</loc>
<lastmod>更新日</lastmod>
</url>
</urlset>
rss.xmlに書き込む内容を決める
rss.xmlに関しては、W3CのRSSに関するページから必要なものをピックアップしました。こちらも必要最低限の情報です。
<rss version="2.0">
<channel> ※※サイトをここからくくる
<title>必須項目 / サイトの名称</title>
<link>必須項目 / サイトのURL </link>
<description>必須項目 / サイトの説明</description>
<lastBuildDate>rss.xmlの更新日</lastBuildDate>
<item> ※※ここから各ページを入れ込みますと言うタグ。ページの数だけ繰り返す
<title>ページのタイトル</title>
<link>ページのURL</link>
<pubDate>投稿日</pubDate>
</item>
</channel>
sitemap.xmlとrss.xmlに書き込むPHPを作る
さて、いよいよPHPの作成です。今までファイルを呼び出したことはありましたが、ファイルに書き込んだことはありません。まずは「PHP ファイルに書き込む」で検索して情報収集します。phpのマニュアルにあった「file_put_contents」を使ってみよう。
試しにファイルに「変更したよ」という文字列を書き込むスクリプトを書いてみたら成功しました。一発でいけた!…と喜んでいたのもつかの間。「file_put_contents()」では「()」の中に文字列を入れなければいけません。書き込む値をPHPの繰り返し処理で渡していきたいのに、()の中では動かせない…。別の方法を考えましょう。
先ほど「file_put_contents」を見つけたときに、「fopenでファイルを開き、fwriteで書き込み、fcloseでファイルを閉じる」という方法がありました。一括でできないなんてめんどくさいな、と思ったのですが、こちらを使うことにします。こちらの方法なら、繰り返し処理の中に「fwrite」を入れ込むことができそうです。
fopen fwrite fcloseでファイルに書き込み
fopen fwrite fcloseを試しにPHPに打ち込んで動かしてみました、動いた!「fwrite」を複数行打ち込むと、前の「fwrite」が書いた文字列の後に文字を書き出してくれました。繰り返し処理にも問題なく対応できそうです。
いよいよファイルの内容を取り出してくるのですが、フォルダ内の全てのファイルを見に行くPHP関数があったら書きやすいのに…。そう思って検索してみると「glob」関数なるものがありました。使ってみよう!
…うまく使いこなせない。ファイルパスがうまく設定できていないみたいで、glob関数がうまく動いてくれません。
…上から早1時間、やっと動きました。いつもはPHPもご紹介しているのですが、後日きれいにしてから公開したい。とてもとても無駄の多いPHPになっているので、今日はとても人様に見せられません…。
PHPで作ったsitemap.xmlを検証
苦労してやっと作ったファイルなので、ちゃんと機能しているか確認したいです。検索をしていたときに、sitemap.xmlがちゃんと書けているか確認してくれるサイトを見つけたので、作り立てほやほやのsitemap.xmlをレンタルサーバーにアップロードして確認してみます。
ドキドキしながら検証してみると、「問題ないよ」って出ました!
こちらがsitemap.xmlのチラ見せ。Visual Studio Codeで表示すると綺麗です(笑)
Google Search Consoleにも報告しなくちゃ!
今日はここまで
今日中にsitemapとRSSの作成を終えたかったのですが、かなり時間を使ってしまったので、今日はここまで。ノルマになっているサイトを綺麗に見せるための日記2日分の修正をして終えたいと思います。明日は今日の続きから、まずは今日書いたPHPをきれいにして、rss.xmlも作れるようにしたいです。