2026年5月20日
2026年5月20日
WordPressの検索機能が動作しない場合の解決方法
はじめに
WordPressの検索バーにキーワードを入力しても「記事が見つかりませんでした」と表示される、検索結果ページが404になる、あるいは特定のキーワードだけヒットしない。検索機能の不具合は原因が複数あるため、順番にチェックしていきましょう。
症状・原因
よくある検索問題のパターン:
1. 404になる:パーマリンク設定がリセットされている
2. 常に空の結果:テーマのsearch.phpまたはpage.phpのWP_Queryが問題
3. 特定の記事がヒットしない:記事ステータスが下書き・非公開になっている
4. カスタム投稿タイプが検索されない:exclude_from_searchがtrueになっている
5. プラグインの競合:検索結果をフックしているプラグインが干渉
解決手順
ステップ1:パーマリンクを再保存する
最も多い原因はパーマリンク設定のキャッシュ破損です。
1. 管理画面 → 設定 → パーマリンク設定
2. 何も変更せず「変更を保存」をクリック
WP-CLIで実行する場合:
wp rewrite flush --hard
ステップ2:テーマのsearch.phpを確認する
// search.php — 正しい基本構造
<?php get_header(); ?>
<div class="search-results">
<?php if (have_posts()) : ?>
<h2><?php printf('%d件の検索結果', $wp_query->found_posts); ?></h2>
<?php while (have_posts()) : the_post(); ?>
<article>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile; ?>
<?php else : ?>
<p>「<?php echo esc_html(get_search_query()); ?>」に一致する記事はありません。</p>
<?php endif; ?>
</div>
<?php get_footer(); ?>
テーマにsearch.phpがない場合はindex.phpにフォールバックします。独自の検索テンプレートが必要な場合はsearch.phpを作成してください。
ステップ3:カスタム投稿タイプの検索設定を確認する
// functions.php — カスタム投稿タイプを検索対象に含める
add_filter('pre_get_posts', function($query) {
if ($query->is_search() && !is_admin() && $query->is_main_query()) {
$query->set('post_type', ['post', 'page', 'product', 'custom_type']);
// または全投稿タイプを対象に
// $query->set('post_type', 'any');
}
return $query;
});
カスタム投稿タイプ登録時の設定確認:
// register_post_type の引数
register_post_type('product', [
'exclude_from_search' => false, // falseにすることで検索対象になる
'publicly_queryable' => true,
// ...
]);
ステップ4:検索フォームのactionとnameを確認する
<!-- 検索フォームは必ず / に向け、input name="s" を使う -->
<form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
<input type="search" name="s" placeholder="検索..."
value="<?php echo esc_attr(get_search_query()); ?>">
<button type="submit">検索</button>
</form>
name="s"がname="q"やname="query"になっているとWordPressは検索として認識しません。
ステップ5:WP_Queryのデバッグ
// 検索クエリの内容を確認(開発時のみ)
add_action('pre_get_posts', function($query) {
if ($query->is_search() && !is_admin()) {
// デバッグ情報を出力
error_log('Search query: ' . print_r($query->query_vars, true));
}
});
// 実行されたSQLを確認
add_filter('posts_request', function($sql, $query) {
if ($query->is_search()) {
error_log('Search SQL: ' . $sql);
}
return $sql;
}, 10, 2);
ステップ6:SearchWPで検索精度を向上させる
標準の検索では日本語の部分一致が弱い場合があります。SearchWPプラグインを導入すると関連度の高い検索結果を返せます。
# SearchWPをWP-CLIでインストール
wp plugin install searchwp --activate
注意事項
- テーマをカスタマイズする場合は必ず子テーマで行ってください。
pre_get_postsフックでis_main_query()の確認を忘れると管理画面のクエリも影響します。- 本番サイトのデバッグは
WP_DEBUG_LOGでログに書き出し、WP_DEBUG_DISPLAYはfalseにしてください。
まとめ
検索不具合の多くはパーマリンクの再保存で解決します。それでも直らない場合はsearch.phpテンプレートの確認、カスタム投稿タイプのexclude_from_search設定、フォームのname="s"属性を順にチェックしてください。関連記事:日本語検索の改善方法、カスタム投稿タイプの設定