WordPressでプラグインを使わずに最低限のサイトマップXMLを生成する
最近、Google Search Consoleで確認すると、なぜかインデックスに登録されていないページがかなり多い印象です…。
WordPressプラグインで生成したサイトマップXMLを送信してはいますが、この情報が多いのが原因なのでは?実は最低限の「投稿・固定ページ」のみ含めておけば良いのでは?
という事で、プラグインも不要、標準の「wp-sitemap.xml」も情報が多いので使わない、とてもシンプルなサイトマップを作ってみました。
最低限のサイトマップを生成する
「functions.php」に追記して実行します。
<?php
//---------------------------------------------
// *サイトマップの自動更新
//---------------------------------------------
//---標準サイトマップを無効化
add_filter('wp_sitemaps_enabled' , '__return_false');
//---投稿や固定ページが更新されるたびに「ib-sitemap.xml」を更新
function update_sitemap() {
$home_url = home_url();
$home_lastmod = wp_date('Y-m-d');
$xml = "<url><loc>{$home_url}</loc><lastmod>{$home_lastmod}</lastmod></url>\n";
//---固定ページと記事ページを取得
$posts_ary = get_posts([
'post_type' => ["page" , "post"] ,
'posts_per_page' => -1 ,
'post_status' => "publish" ,
'orderby' => "modified" ,
'order' => "DESC"
]);
if($posts_ary){
foreach($posts_ary as $post){
$url = get_the_permalink($post->ID);
$lastmod = get_the_modified_date("Y-m-d" , $post->ID);
$xml .= "<url><loc>{$url}</loc><lastmod>{$lastmod}</lastmod></url>\n";
}
}
$sitemap = <<<HERE
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{$xml}</urlset>
HERE;
//---ファイルを書き出し
file_put_contents(get_theme_file_path() . "/ib-sitemap-1.xml" , $sitemap , LOCK_EX);
//---------------------------------------------
// *サイトマップインデックス生成
//---------------------------------------------
$sitemap_url = get_stylesheet_directory_uri() . "/ib-sitemap-1.xml";
$sitemap_index = <<<HERE
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>{$sitemap_url}</loc><lastmod>{$home_lastmod}</lastmod></sitemap>
</sitemapindex>
HERE;
//---ファイルを書き出し
file_put_contents(get_theme_file_path() . "/ib-sitemap.xml" , $sitemap_index , LOCK_EX);
}
add_action('save_post', 'update_sitemap');
サイトマップの生成例
https://kojinteki.net/wp-content/themes/ib-child/kojinteki.latest/ib-sitemap.xml
https://kojinteki.net/wp-content/themes/ib-child/kojinteki.latest/ib-sitemap-1.xml
テーマの関係でこの例では深い階層にファイルが生成されていますが、テーマフォルダの直下に「ib-sitemap.xml」「ib-sitemap-1.xml」が生成されます。「ib-sitemap.xml」までのURLをGoogle Search Consoleに登録するとよいでしょう!