結論から言うと、検索ページで検索件数が0だった場合、
httpのステータスコードを404にしていたのですが、
キャッシュしたhtmlのステータスコードが200になってました。
controllerで検索件数が0だった判定をしたところで
http_response_code(404);
を使ってたのが原因でした。
対応策として、サイトとしてsmartyを使ってたので、404判定の時はinsertを使って
http_response_code(404);
を実行するようにしました。
これでバッチリキャッシュしたhtmlを読み込んでも大丈夫になりました。
気づきずらい実装なので記事にしてみました。
2013年ごろから検索で0件だった場合、search_consoleでソフト404判定されるので、
こういう実装をしてないと場合はソフト404で検出されると思います。