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に設定する手順で解決します。