2026年5月20日

2026年5月20日

WordPressの検索機能が動作しない場合の解決方法

はじめに

WordPressの検索バーにキーワードを入力しても「記事が見つかりませんでした」と表示される、検索結果ページが404になる、あるいは特定のキーワードだけヒットしない。検索機能の不具合は原因が複数あるため、順番にチェックしていきましょう。

症状・原因

よくある検索問題のパターン:

1. 404になる:パーマリンク設定がリセットされている

2. 常に空の結果:テーマのsearch.phpまたはpage.phpのWP_Queryが問題

3. 特定の記事がヒットしない:記事ステータスが下書き・非公開になっている

4. カスタム投稿タイプが検索されないexclude_from_searchtrueになっている

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_DISPLAYfalseにしてください。

まとめ

検索不具合の多くはパーマリンクの再保存で解決します。それでも直らない場合はsearch.phpテンプレートの確認、カスタム投稿タイプのexclude_from_search設定、フォームのname="s"属性を順にチェックしてください。関連記事:日本語検索の改善方法カスタム投稿タイプの設定

お気軽にご相談ください

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