WordPressのSEOプラグイン「All in One SEO(AIOSEO)」は、標準で投稿・固定ページ・タクソノミーごとのサイトマップを自動生成してくれます。
しかし、プロジェクトによっては「特定の条件に一致するページだけをまとめた専用のサイトマップ」を追加登録したいケースがあります。
例えば:
- 特定のカスタム投稿タイプだけを対象にしたい
- 公開から一定期間内の記事のみを収録したい
- 独自のフィルター条件に基づいたURLを収録したい
こういったニーズに対応するには、AIOSEOの フィルターフック を利用します。
基本の考え方
AIOSEOは内部的に「サイトマップのインデックス」と「個別のサイトマップ(分割ファイル)」を管理しています。
追加登録を行うには以下の2ステップが必要です。
aioseo_sitemap_indexes
フィルターで「インデックス」に専用サイトマップを追加するtemplate_redirect
などで専用サイトマップ用の出力処理を用意する
実装例:特定のカスタム投稿タイプ専用のサイトマップを追加
以下のコードを functions.php
などに記述します。
<?php
/**
* 特定のCPT(例: company)専用のサイトマップを追加
*/
// 1) インデックスに専用サイトマップを登録
add_filter('aioseo_sitemap_indexes', function ($indexes) {
// 管理画面やAJAXでは無効化
if (is_admin() || wp_doing_ajax() || wp_doing_cron()) {
return $indexes;
}
$indexes[] = [
'loc' => home_url('/sitemap-company.xml'),
'lastmod' => current_time('Y-m-d\TH:i:sP'),
];
return $indexes;
});
// 2) 実際の出力処理
add_action('template_redirect', function () {
if (preg_match('#sitemap-company\.xml$#', $_SERVER['REQUEST_URI'])) {
header('Content-Type: application/xml; charset=UTF-8');
// 条件付きで投稿を取得(例: 公開済みのカスタム投稿タイプ "company")
$posts = get_posts([
'post_type' => 'company',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
]);
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach ($posts as $post): ?>
<url>
<loc><?php echo esc_url(get_permalink($post)); ?></loc>
<lastmod><?php echo esc_html(get_post_modified_time('c', true, $post)); ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<?php endforeach; ?>
</urlset>
<?php
exit;
}
});
コードのポイント解説
- インデックス登録
aioseo_sitemap_indexes
フィルターで専用のサイトマップURLを追加。検索エンジンに認識させるために必須です。 - 出力処理
template_redirect
で/sitemap-company.xml
にアクセスがあった際に、カスタムXMLを出力します。
標準的な<urlset>
構造を守ればOKです。 - 収録条件のカスタマイズ
get_posts()
のパラメータを変更すれば、日付範囲やタクソノミー条件など柔軟に絞り込み可能です。
応用例
- 直近1年以内の記事のみ収録
date_query
を使う。 - 特定のタクソノミーに属する記事のみ
tax_query
を使う。 - 1ファイルあたりの件数を制御して分割
独自にページング処理を実装し、sitemap-company-1.xml
など複数ファイルを生成する。
まとめ
All in One SEO では、標準機能のままでもサイトマップ生成は十分に強力です。
しかし、プロジェクト要件によって「条件付きの専用サイトマップ」が必要な場合は、フックを活用して拡張可能です。
aioseo_sitemap_indexes
でインデックスに登録template_redirect
で実際のXMLを出力get_posts()
の条件を自由にカスタマイズ
これにより、柔軟にSEO対策やサイト運用の要件に応えることができます。
次回は 「サイトマップをキャッシュ化して高速化する方法」 についても解説予定です。
コメント