2026年8月22日

2026年8月22日

WordPressにXMLサイトマップを設定してSEOを改善する方法

はじめに

「Googleにすべてのページをクロールしてもらえているか不安」「サイトマップを設定してインデックスを促したい」——XMLサイトマップはGooglebotにサイト構造を伝え、クロール効率を高める重要なSEO施策です。

症状・原因

WordPressはバージョン5.5から標準でXMLサイトマップ機能を持ちますが、デフォルトでは全投稿タイプ・全タクソノミーが含まれます。SEO上不要なURLを含めると品質が下がるため、適切に設定を絞り込む必要があります。

解決手順

ステップ1:WordPress標準サイトマップを確認する

【WordPress標準サイトマップ(5.5以降)】

サイトマップインデックス:
  https://example.com/wp-sitemap.xml

含まれるサイトマップ:
  https://example.com/wp-sitemap-posts-post-1.xml     (投稿)
  https://example.com/wp-sitemap-posts-page-1.xml     (固定ページ)
  https://example.com/wp-sitemap-posts-portfolio-1.xml(カスタム投稿)
  https://example.com/wp-sitemap-taxonomies-category-1.xml(カテゴリー)
  https://example.com/wp-sitemap-taxonomies-post_tag-1.xml(タグ)
  https://example.com/wp-sitemap-users-1.xml          (著者ページ)

【確認方法】
ブラウザで https://example.com/wp-sitemap.xml にアクセス
→ サイトマップインデックスのXMLが表示されれば有効
→ 404の場合はパーマリンク設定を再保存する
// functions.php: 不要なURLをサイトマップから除外
// 著者ページをサイトマップから除外
add_filter( 'wp_sitemaps_add_provider', function( $provider, $name ) {
    if ( 'users' === $name ) {
        return false; // 著者ページを除外
    }
    return $provider;
}, 10, 2 );

// 特定の投稿タイプをサイトマップから除外
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['attachment'] ); // メディアページを除外
    unset( $post_types['faq'] );        // FAQを除外(任意)
    return $post_types;
} );

// 特定のタクソノミーをサイトマップから除外
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
    unset( $taxonomies['post_tag'] );  // タグを除外
    unset( $taxonomies['post_format'] ); // 投稿フォーマットを除外
    return $taxonomies;
} );

ステップ2:Yoast SEOでサイトマップを設定する

【Yoast SEO のサイトマップ設定】

1. Yoast SEO → 設定 → サイトマップ → 有効化
   サイトマップURL: https://example.com/sitemap_index.xml

2. 各コンテンツタイプの設定
   Yoast SEO → 設定 → コンテンツの種類
     投稿:         サイトマップに表示 ✅
     固定ページ:   サイトマップに表示 ✅
     メディア:     サイトマップに表示 ☐(除外推奨)
     FAQ:          サイトマップに表示 ☐(任意)

3. タクソノミーの設定
   Yoast SEO → 設定 → カテゴリーとタグ
     カテゴリー: サイトマップに表示 ✅
     タグ:       サイトマップに表示 ☐(記事数が少ないタグは除外推奨)

4. 優先度と更新頻度
   Yoast SEO → 高度な設定 → XMLサイトマップ
   (Yoast SEO 17.0以降は優先度・更新頻度の設定を廃止。
     Googleはこれらの値を基本的に無視するため)
// functions.php: Yoast SEOのサイトマップからnoindex投稿を除外
add_filter( 'wpseo_sitemap_entry', function( $url, $type, $object ) {
    // noindexに設定された投稿は除外
    if ( function_exists( 'YoastSEO' ) ) {
        $meta = YoastSEO()->meta->for_post( $object->ID ?? 0 );
        if ( $meta && $meta->robots['index'] === 'noindex' ) {
            return false;
        }
    }
    return $url;
}, 10, 3 );

ステップ3:カスタムサイトマップを手動で生成する

// functions.php: カスタムサイトマップエンドポイントを追加
add_action( 'init', function() {
    add_rewrite_rule( 'custom-sitemap\.xml$', 'index.php?custom_sitemap=1', 'top' );
    add_rewrite_tag( '%custom_sitemap%', '([0-9]+)' );
} );

add_action( 'template_redirect', function() {
    if ( ! get_query_var( 'custom_sitemap' ) ) return;

    $urls = [];

    // 固定ページ
    $pages = get_posts( [
        'post_type'      => 'page',
        'post_status'    => 'publish',
        'posts_per_page' => -1,
    ] );
    foreach ( $pages as $page ) {
        $urls[] = [
            'loc'     => get_permalink( $page->ID ),
            'lastmod' => get_the_modified_date( 'c', $page->ID ),
            'priority' => '0.8',
        ];
    }

    // 投稿(最新200件)
    $posts = get_posts( [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 200,
        'orderby'        => 'modified',
        'order'          => 'DESC',
    ] );
    foreach ( $posts as $post ) {
        $urls[] = [
            'loc'      => get_permalink( $post->ID ),
            'lastmod'  => get_the_modified_date( 'c', $post->ID ),
            'priority' => '0.6',
        ];
    }

    header( 'Content-Type: application/xml; charset=UTF-8' );
    echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
    foreach ( $urls as $url ) {
        echo '<url>' . "\n";
        echo '  <loc>' . esc_url( $url['loc'] ) . '</loc>' . "\n";
        echo '  <lastmod>' . esc_html( $url['lastmod'] ) . '</lastmod>' . "\n";
        echo '  <priority>' . esc_html( $url['priority'] ) . '</priority>' . "\n";
        echo '</url>' . "\n";
    }
    echo '</urlset>';
    exit;
} );

ステップ4:Googleサーチコンソールにサイトマップを登録する

【Googleサーチコンソールへのサイトマップ登録手順】

1. Google Search Console(search.google.com/search-console)にログイン
2. プロパティを選択(サイトを追加していない場合は先に追加)
3. 左メニュー「インデックス」→「サイトマップ」
4. 「新しいサイトマップを追加」にURLを入力
   WordPress標準: sitemap_index.xml
   Yoast SEO:     sitemap_index.xml
   RankMath:      sitemap_index.xml

5. 「送信」をクリック
6. ステータスが「成功しました」になることを確認

【robots.txt にサイトマップURLを追記する(推奨)】
Sitemap: https://example.com/sitemap_index.xml

WordPress robots.txt をカスタマイズ:
// functions.php: robots.txtにサイトマップURLを追加
add_filter( 'robots_txt', function( $output, $public ) {
    if ( $public ) {
        $sitemap_url = home_url( '/sitemap_index.xml' );
        $output .= "\nSitemap: " . esc_url( $sitemap_url ) . "\n";
    }
    return $output;
}, 10, 2 );

ステップ5:サイトマップの品質を最適化する

// functions.php: サイトマップの品質向上

// 更新日時が古い・薄いコンテンツを除外
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'post' === $post_type ) {
        // 文字数が少ない投稿を除外(meta_queryで管理する場合)
        // $args['meta_query'] = [
        //     [ 'key' => '_word_count', 'value' => 300, 'compare' => '>=' ],
        // ];
    }
    return $args;
}, 10, 2 );

// サイトマップに最終更新日を追加
add_filter( 'wp_sitemaps_posts_show_on_front', '__return_false' );

// サイトマップのキャッシュをクリア(投稿保存時)
add_action( 'save_post', function( $post_id ) {
    if ( function_exists( 'yoast_wpseo_get_options' ) ) {
        // Yoast SEOのサイトマップキャッシュをクリア
        do_action( 'wpseo_sitemap_index_content_before_write_cache' );
    }
} );

注意事項

  • サイトマップには「インデックスさせたいURL」だけを含めてください。noindexページをサイトマップに含めると矛盾が生じ、Googleの評価に悪影響を与える場合があります。
  • サイトマップのURLは相対パスではなく絶対URLで記述してください。https://から始まる完全なURLが必要です。
  • ページ数が多い場合(50,000URL以上)はサイトマップインデックスで複数のサイトマップに分割してください。WordPressの標準サイトマップは自動的に分割します。

まとめ

XMLサイトマップの設定は「WordPress標準サイトマップの確認・不要URLを除外→Yoast SEO/RankMathで各コンテンツタイプを設定→robots.txtにSitemapディレクティブを追加→Googleサーチコンソールで登録・送信→定期的にエラーや除外URLを確認」の流れで整備します。関連記事:WordPressにパンくずリストを実装する方法WordPressで画像の遅延読み込みを設定する方法

お気軽にご相談ください

お見積りへ お問い合わせへ