2026年10月31日

2026年10月31日

All in One SEOのエラーを解決する方法

はじめに

All in One SEO(AIOSEO)でXMLサイトマップにアクセスすると404になる・SNSシェア時にOGP画像が表示されない・Google検索結果に構造化データが反映されない・パーマリンク変更後にサイトマップが更新されないといった問題は、リライトルール・キャッシュ・設定の競合が原因です。

症状・原因

  • /sitemap.xmlにアクセスすると404エラーになる
  • FacebookでURLをシェアしても指定したOGP画像ではなくロゴが表示される
  • Google Search Consoleで「構造化データエラー」が出る
  • 別のSEOプラグイン(Yoast等)と同時に有効化していてメタタグが重複している

解決手順

ステップ1:AIOSEOの状態を確認する

# AIOSEOのバージョンとサイトマップ設定を確認
wp eval "
if (defined('AIOSEO_VERSION')) {
    echo 'AIOSEO version: ' . AIOSEO_VERSION . PHP_EOL;
}

// サイトマップが有効か確認
\$sitemap = aioseo()->sitemap;
echo 'Sitemap enabled: ' . (aioseo()->options->sitemap->general->enable ? 'YES' : 'NO') . PHP_EOL;
echo 'Sitemap URL: ' . home_url('/sitemap.xml') . PHP_EOL;

// サイトマップにアクセステスト
\$response = wp_remote_get(home_url('/sitemap.xml'));
echo 'Sitemap HTTP status: ' . wp_remote_retrieve_response_code(\$response) . PHP_EOL;
"

# パーマリンクをリセット
wp rewrite flush --hard
echo "Rewrite rules flushed"

# AIOSEOのキャッシュをクリア
wp eval "
if (function_exists('aioseo')) {
    aioseo()->core->cache->clear();
    echo 'AIOSEO cache cleared' . PHP_EOL;
}
"

ステップ2:サイトマップの問題を修正する

// functions.php: AIOSEOサイトマップのカスタマイズ

// ① カスタム投稿タイプをサイトマップに追加
add_filter('aioseo_sitemap_post_types', function(array $post_types): array {
    // カスタム投稿タイプ 'product_review' をサイトマップに含める
    if (!in_array('product_review', $post_types)) {
        $post_types[] = 'product_review';
    }
    return $post_types;
});

// ② 特定の投稿をサイトマップから除外
add_filter('aioseo_sitemap_exclude_post', function(bool $exclude, int $post_id): bool {
    // 特定カテゴリの投稿を除外
    if (has_category('internal', $post_id)) {
        return true;
    }
    // 下書きや非公開は除外
    if (get_post_status($post_id) !== 'publish') {
        return true;
    }
    return $exclude;
}, 10, 2);

// ③ サイトマップのURL優先度をカスタマイズ
add_filter('aioseo_sitemap_priority', function(float $priority, string $post_type, int $post_id): float {
    if ($post_type === 'post' && has_category('featured', $post_id)) {
        return 0.9; // おすすめ記事は優先度を高く設定
    }
    return $priority;
}, 10, 3);

ステップ3:OGPとソーシャルメタタグを修正する

// functions.php: AIOSEO OGP設定のカスタマイズ

// ① OGP画像をプログラムで設定
add_filter('aioseo_og_image_url', function(string $url, object $post): string {
    // アイキャッチ画像がない場合はデフォルトOGP画像を使用
    if (empty($url) && is_singular()) {
        $default_ogp = get_option('aioseo_default_ogp_image', '');
        if ($default_ogp) return $default_ogp;
    }

    // WooCommerce商品ページは商品画像を使用
    if (function_exists('wc_get_product') && is_singular('product')) {
        $product      = wc_get_product($post->ID);
        $thumb_id     = $product ? $product->get_image_id() : 0;
        if ($thumb_id) {
            return wp_get_attachment_image_url($thumb_id, 'large');
        }
    }

    return $url;
}, 10, 2);

// ② OGPタイトルをカスタマイズ
add_filter('aioseo_og_title', function(string $title): string {
    // タイトルが空の場合はページタイトルを使用
    if (empty($title) && is_singular()) {
        return get_the_title() . ' | ' . get_bloginfo('name');
    }
    return $title;
});

// ③ Twitter Cardをカスタマイズ
add_filter('aioseo_twitter_card_type', function(string $card_type): string {
    // 画像がある場合は大きいカードを使用
    if (has_post_thumbnail()) {
        return 'summary_large_image';
    }
    return $card_type;
});

ステップ4:構造化データ(スキーマ)を設定する

// functions.php: AIOSEO構造化データのカスタマイズ

// ① カスタムスキーマを追加
add_filter('aioseo_schema_output', function(array $schema): array {
    if (!is_singular('post')) return $schema;

    // FAQ スキーマを追加
    $faq_items = get_post_meta(get_the_ID(), '_faq_items', true);
    if (!empty($faq_items) && is_array($faq_items)) {
        $schema[] = [
            '@type'      => 'FAQPage',
            'mainEntity' => array_map(fn($item) => [
                '@type'          => 'Question',
                'name'           => $item['question'],
                'acceptedAnswer' => [
                    '@type' => 'Answer',
                    'text'  => $item['answer'],
                ],
            ], $faq_items),
        ];
    }

    return $schema;
});

// ② パンくずリストスキーマを修正
add_filter('aioseo_breadcrumb_trail', function(array $trail): array {
    // ホームページのラベルを変更
    if (!empty($trail[0])) {
        $trail[0]['name'] = 'ホーム';
    }
    return $trail;
});

ステップ5:他のSEOプラグインとの競合を解消する

// functions.php: SEOプラグイン競合対策

// ① 他のプラグインが出力するメタタグを除去
add_action('wp_head', function(): void {
    // Yoast SEOが有効な場合はAIOSEOのOGPを無効化(重複防止)
    if (defined('WPSEO_VERSION') && function_exists('aioseo')) {
        remove_action('wp_head', [aioseo()->social->facebook, 'output'], 1);
    }
}, 0);

// ② AIOSEOのメタロボットをカスタマイズ
add_filter('aioseo_robots_meta', function(array $robots, int $post_id): array {
    // 検索結果ページはnoindexに設定
    if (is_search()) {
        $robots['noindex'] = true;
    }
    // ページネーション2ページ以降はnoindexに
    if (is_paged()) {
        $robots['noindex'] = true;
    }
    return $robots;
}, 10, 2);
# AIOSEOのデータベーステーブルを確認・修復
wp eval "
global \$wpdb;
\$tables = [
    'aioseo_posts',
    'aioseo_terms',
    'aioseo_notifications',
    'aioseo_cache',
];
foreach (\$tables as \$table) {
    \$count = \$wpdb->get_var(\"SELECT COUNT(*) FROM {\$wpdb->prefix}\$table\");
    echo \$table . ': ' . \$count . ' rows' . PHP_EOL;
}
"

注意事項

  • AIOSEOとYoast SEOを同時に有効化するとOGPタグやメタディスクリプションが重複します。必ずどちらか一方のみ使用してください。移行時は設定をエクスポート後に旧プラグインを無効化してからAIOSEOをインポートしてください
  • /sitemap.xmlが404になる場合は「設定→パーマリンク」を保存するだけで解決することが多いです。AIOSEOはWordPressのリライトルールにサイトマップのルールを登録しています
  • Google Search Consoleで「構造化データエラー」が出た場合はGoogle リッチリザルト テストでURLを確認し、どのスキーマタイプで問題が起きているかを特定してください

まとめ

AIOSEO修復は①aioseo()->core->cache->clear()でキャッシュクリア・wp rewrite flushでサイトマップURL再生成、②aioseo_sitemap_post_typesフィルターでカスタム投稿タイプを追加・aioseo_sitemap_exclude_postで特定投稿を除外、③aioseo_og_image_urlフィルターでOGP画像をWooCommerce商品画像と連携・aioseo_twitter_card_typeでTwitterカードを設定、④aioseo_schema_outputフィルターでFAQスキーマを追加、⑤aioseo_robots_metaフィルターで検索結果ページとページネーションをnoindexに設定する手順で解決します。

お気軽にご相談ください

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