kamenokoki.com

【30日目】sitemap.xmlをPHPで自作してみた

Posted:  Last Update:

※こちらは日記です。sitemap.xmlの作成方法は開発記事に分かりやすくまとめています。

サイトを作成し始めて30日目になりました。サイトの公開を数日前に完了し、昨日は検索サイトへの登録が完了。広告に申し込む前に、収益化に適したサイトにアップグレードしようと頑張っている所です。

ロードマップの見直し

日記を書き始める前に昨日登録を完了したGoogle Search Consoleを見に行ったのですが、情報が何も反映されていませんでした…。サイトマップがないのが原因かと思われる…。今日はコンテンツに合わせてサイトを作り直すつもりでしたが、少しロードマップを変えて、今日はsitemapの作成をしたいと思います。順番を変えるついでに少し内容も見直しました。

  • 準備 - サイトの全体像を決める
  • 使用するプログラミング言語を決めて環境を整える
  • サイトの基本構造を作って公開する
  • 収益化に最適なサイトにアップグレードする
    • コンテンツを充実させる(他の作業と同時進行)
    • サイトを見てもらえるようにサーチエンジンに登録する
    • sitemap.xmlとRSSを作成する ←今ここ
    • コンテンツに合わせてサイトを修正、スマホにも対応する
    • お問い合わせページを作る
    • 検索ボックスを作る
    • サイトマップページを作る
    • 個人情報に関するページを作る
    • SEOとセキュリティについて調べ、対応する
  • GoogleアドセンスとAmazonアソシエイトの申し込みをする
  • ローカルで簡単に入力ができるようにフォームを作る
  • フォローアップ - より収益化に向いたサイト構造に変更する

今日の作業に入る前に、コンテンツの充実の話

他の作業と同時に進めている「コンテンツの充実」の件、昨日はサブドメインを取得しました。その時に「403エラーが表示されている」とご報告したのですが、今日見に行っても同じ状態です。こんな時に表示されるのは404エラーではないのかと検索したら…。「トップページをアップロードしてないと403エラーになるよ」との情報がでてきました!ファイルをアップロードしていないせいで表示されていないだけだった…。そっさくファイルをアップロードしてみたいと思います。

ファイルをアップロードして、challenge.kamenokoki.comに接続すると、無事にページが表示されました!でも、「https://」(セキュアなページ)にリダイレクトされません。「https://」ページがある場合はそちらが表示される、というのは私の思い込みだったみたい!急遽.htaccessに下記のコードを書いて、「http://」に接続しても「htpps://」にリダイレクトするようにしました。ページを開くと、無事「htpps://」にアクセスできたので、このサイトにも同じ設定をしておきました。

#RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

実際のページがこちら。「亀のチャレンジ」というサイトで、××日チャレンジに挑むブログです。現在は30日チャレンジをしていて、アメリカ最新の話題をまとめつつ、英単語の紹介もしています。よければ見てやってください。
2020.09.29 サイト「亀のチャレンジ」も公開できた

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をアップデートできるような機能を実装できれば理想的です。

まずは、必要なものとか、作る手順を考えなければいけません。パスワードがないと入れない隠しページと、ぽちっと押したらファイルをつくる機能と…、あれやこれやで、計画としてはこんな感じです。

  1. sitemap.xmlに書き込む内容を決める
  2. rss.xmlに書き込む内容を決める
  3. 上記2ファイルに書き込むPHPを作る
  4. 3のファイルを管理者しかログインできない設定にする(検索エンジンからも隠す)

sitemap.xmlに書き込む内容を決める

sitemap.xmlに関しては、sitemaps.orgに書いてある内容から必須項目のみ入れます。必要なものが少ないですね。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url> ※※ここから各ページを入れ込みますと言うタグ。ページの数だけ繰り返す
  <loc>ページのURL</loc>
  <lastmod>更新日</lastmod>
  </url>
</urlset>

rss.xmlに書き込む内容を決める

rss.xmlに関しては、W3CのRSSに関するページから必要なものをピックアップしました。こちらも必要最低限の情報です。

<?xml version="1.0" encoding="UTF-8"?>
<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をレンタルサーバーにアップロードして確認してみます。

ドキドキしながら検証してみると、「問題ないよ」って出ました!
2020.09.29 自作したsitemap.xmlはうまくできていたらしい

こちらがsitemap.xmlのチラ見せ。Visual Studio Codeで表示すると綺麗です(笑)
2020.09.29 自作したsitemap.xmlのビジュアル

Google Search Consoleにも報告しなくちゃ!

今日はここまで

今日中にsitemapとRSSの作成を終えたかったのですが、かなり時間を使ってしまったので、今日はここまで。ノルマになっているサイトを綺麗に見せるための日記2日分の修正をして終えたいと思います。明日は今日の続きから、まずは今日書いたPHPをきれいにして、rss.xmlも作れるようにしたいです。

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

広告