PHPを使ってサイトマップ(sitemap.xml)を自動作成する
当サイトは静的サイトなので、サイトマップ(sitemap.xml)は手動で作成・更新する必要があります。
外部からのリンクも少ないので、サイトマップをしっかり作成してGoogle Search Consoleに登録しておきたい。
でも、作成・更新が面倒くさい…
というか、うっかり忘れること多々。
何とか自動化できないか少しずつ調べていたのですが、先日やっと形にできたので、手順を備忘録として残しておこうと思います。
まず利用したのがこちらのサイト。 サイトのアドレスを入れてボタンを押すだけ。しばらく待つと、sitemap.xmlファイルがダウンロードできるリンクが表示されます。 簡単に利用できるしBroken links(リンク切れ)も調べられるし、500ページまでなら無料で使えるので長い間愛用していました。 しかし、ファイルをダウンロードした後に自サイトにアップロードする必要があるので、だんだん面倒になってきて… 「サイト更新できたー!終わったー!!😄」 サイトマップファイルを作成→アップロードまで自動でできる方法を探していたところ、こちらのサイトを見つけました。 「おぉ!これぞ私が求めていたものだー!!✨」 記事途中にある「ソースコード」を使って自動化できるのは分かったのですが、このソースコードをどうすればいいかが分かるまでに少し時間がかかってしまいました。PHP、最近使い始めたばかりだったので…😅 「Cronで定期実行」もよくわからなかったんですよね。 「これPHPじゃん!!」 あとは自サイト用に設定をしていきます。 『ドキュメントルート』は使用しているサーバーによって違うと思いますが、私はロリポップを使っていたのでこのページを参考に調べました。 私の場合は「公開 (アップロード) フォルダ」を設定していたので、フルパスの後にフォルダ名を付ける必要がありました。 あとは『サイトマップに登録しない拡張子』にテキストファイル(.txt)を追加しました。 PHPファイルの設定以外に、『.htaccessファイル』を使ってアクセス制限をかけました。 今回はじめて知ったのですが、PHPファイルなどを定期的に実行するシステムがあるんですね。 ロリポップでも利用できたので、こちらのマニュアルとサイトを参考に設定してみました。 まずは動作するか確認するために、5分毎に実行する設定で様子見。 しばらくしてサイトマップファイルが無事作成されているか・内容が問題ないか確認してから、毎日4時に自動作成する設定に変更しました。 「意外と簡単に自動化実装できた!😊」 サイトマップファイルをよくよく確認してみると、なんかURL数が少ない気がする… 上で紹介した「XML Sitemaps Generator」を使って作成したファイルと、PHPで作成したファイルを比較してみると… 「おそらく『HTMLのaタグ』の書き方が悪いんだろうな」と当たりをつけて調べてみることに。 「登録できていないURL」がどのようにリンクされているか確認してみたところ、 <a href="./ファイル名">と書き直して更新すると無事登録されました!✨ 他サイトさんの記事を参考に設定していっただけなのですが、うまくいかない部分の修正ができ・自サイト用に無事設定できたのでちょっと自信がつきました。 PHP、便利だなぁ☺️ 自分でプログラムを作れるぐらいになりたいなぁと思いつつ、中々勉強する時間がないので… しばらくは先人の知恵を借りつつ試行錯誤していこうと思います。無料サイトで作成する方法
「XML Sitemaps Generator」
結構有名なサイトだと思います。
そもそもこのサイトでサイトマップを作ること自体を忘れることも多く…
で、満足してパソコン落としちゃうんですよね😅PHPを使って自動化
とテンション上がったのですが、初めて見る言葉が多くて「どうやって実装すればいいのか分からない」という事態に…
(このソースコードが「PHPのソースコードだ」と気付くまでに時間がかかりました💧)ソースコードをPHPファイルにする
とふと気が付いて、さっそくVSCodeに貼り付けてみました。
適当な名前をつけて、拡張子をPHPにして保存。
無事PHPファイルとして認識されました。やったー!
( /フルパス/フォルダ名/ の形)
アドレス直打ちでアクセスした時に動作しないようにするためですね。Cronで定期実行
と喜んでいたのですが…一部のURLが登録できていない…?
一部のURLが登録できていないことに気が付きました。
PHPのソースコードが読めたら良かったのですが、まだ勉強不足で全く分からなかったのでね…
<a href="ファイル名">の様な相対パスの『 ./ 』が省略された書き方をしていると登録されていないことが分かりました。最後に
