サイト運営者の方々にとって、検索エンジンのインデックスに自分のサイトをしっかりと登録してもらうことは非常に重要です。
特に新しいページが追加されたり、コンテンツが更新された場合、迅速にインデックスされるようにすることが求められます。
そこで今回は、ProcessWireを使用して、サイトマップ(sitemap.xml) を自動生成し、検索エンジンにインデックスさせる方法についてご紹介します。
サイト運営者の方々にとって、検索エンジンのインデックスに自分のサイトをしっかりと登録してもらうことは非常に重要です。
特に新しいページが追加されたり、コンテンツが更新された場合、迅速にインデックスされるようにすることが求められます。
そこで今回は、ProcessWireを使用して、サイトマップ(sitemap.xml) を自動生成し、検索エンジンにインデックスさせる方法についてご紹介します。
フルスタックサイト構築
サイトマップとは、ウェブサイトのすべてのページを一覧化したファイルです。
このファイルを検索エンジンに送信することで、サイトのすべてのページを確実にクロールさせ、インデックスを促進することができます。
特に大規模なサイトや、新しく追加されたページを早期にインデックスしてもらいたい場合に役立ちます。
sitemap.xml
の作成まず、以下のコードを使って/public_html直下に下記を作成します。
このコードは、サイトの静的ページ(トップページやサービスページなど)およびブログ記事を対象にしています。
今回はブログ記事公開後に自動追加される様にします。
sitemap.xml.php:
<?php
include('../../index.php');
// ヘッダーを設定(ここではXML宣言は1回のみで十分)
header('Content-Type: application/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<?php
// 静的ページ(ページネーション含む)
$staticUrls = [
'https://6sou.site/',
];
foreach ($staticUrls as $url): ?>
<url>
<loc><?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?></loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<?php endforeach; ?>
<?php
// ブログ記事
//$items = $pages->find("template=〇〇〇〇, status<1024"); //非公開記事も公開記事も書き出す
$items = $pages->find("template=〇〇〇〇, status=published"); //非公開記事は書き出さない
if ($items->count) {
foreach ($items as $post):
// URLパラメータからブログIDを取得
$blogId = $post->name; // post->name を使ってIDを取得
// 親ページ(blog)の取得
$blogParent = $pages->get('blog');
if ($blogParent->id) {
// 親ページが見つかった場合、ブログ詳細ページを取得
$blogPage = $pages->get("template=〇〇〇〇, parent=$blogParent->id, name=$blogId");
if ($blogPage->id): ?>
<url>
<loc><?= htmlspecialchars("https://6sou.site/blog-detail.php?id=" . $blogPage->name, ENT_QUOTES, 'UTF-8') ?></loc>
<lastmod><?= date('c', $blogPage->modified) ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<?php endif;
} else {
echo "ブログ親ページが見つかりません。";
}
endforeach;
} else {
echo '<!-- No blog posts found -->';
}
?>
</urlset>
コードの説明
静的ページの追加: staticUrls
配列には、サイト内で変更が少ない静的ページ(トップページ、サービスページ、採用ページなど)を追加しています。
ブログ記事: テンプレートを使って、公開中のブログ記事を動的に取得し、それぞれの詳細ページをサイトマップに追加しています。これにより、新しいブログ記事が追加されるたびにサイトマップも自動更新されます。
上記のコードを sitemap.xml.php
というファイルに保存し、ウェブサーバーの公開ディレクトリ(例:/site/sitemap.xml.php
)に配置します。
サイトマップは https://〇〇/sitemap.xml.php
のURLでアクセスできます。
.htaccess
にリダイレクト設定を追加.htaccess
ファイルを開き、以下のようにリダイレクト(内部転送)ルールを追加します。
# sitemap.xml にアクセスされたら sitemap.xml.php に内部転送
RewriteEngine On
RewriteRule ^sitemap\.xml$ sitemap.xml.php [L]
この記述により、ブラウザやGooglebotが https://6sou.site/sitemap.xml
にアクセスしても、実際には sitemap.xml.php
を読み込んで処理を実行します。
しかも「内部転送(Rewrite)」なのでURLは .xml
のままで表示され、自然です。
ブラウザで https://〇〇〇〇/sitemap.xml
にアクセスします。
正しく sitemap.xml.php
が動作すれば、XML形式のサイトマップが表示されます。
表示されない場合は .htaccess
の設定ミスや、Rewriteがサーバーで有効になっていない可能性があります。
リダイレクト後のURLはそのまま https://〇〇〇〇/sitemap.xml
を Google Search Console に送信すればOKです。
/public_html/
├─ index.php
├─ sitemap.xml
├─ sitemap.xml.php ← ここにサイトマップ生成処理を書く
├─ .htaccess ← RewriteRuleを追加
sitemap.xml.php
で自動生成したサイトマップを作成
.htaccess
の設定だけで sitemap.xml
に見せかけることができる
Googleにも自然に送信できる!
動的サイトでも、SEOを意識したサイト構造にするなら、このような仕組みを取り入れておきましょう。