WordPress|All in One SEOで特定条件にマッチする専用サイトマップを追加する方法

WordPressのSEOプラグイン「All in One SEO(AIOSEO)」は、標準で投稿・固定ページ・タクソノミーごとのサイトマップを自動生成してくれます。
しかし、プロジェクトによっては「特定の条件に一致するページだけをまとめた専用のサイトマップ」を追加登録したいケースがあります。

例えば:

  • 特定のカスタム投稿タイプだけを対象にしたい
  • 公開から一定期間内の記事のみを収録したい
  • 独自のフィルター条件に基づいたURLを収録したい

こういったニーズに対応するには、AIOSEOの フィルターフック を利用します。


基本の考え方

AIOSEOは内部的に「サイトマップのインデックス」と「個別のサイトマップ(分割ファイル)」を管理しています。
追加登録を行うには以下の2ステップが必要です。

  1. aioseo_sitemap_indexes フィルターで「インデックス」に専用サイトマップを追加する
  2. 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対策やサイト運用の要件に応えることができます。


次回は 「サイトマップをキャッシュ化して高速化する方法」 についても解説予定です。

コメント

タイトルとURLをコピーしました