これまでは初期表示に必要なデータを index.html に埋め込んでたので静的ファイルじゃないのでキャッシュなし
SPA を作る場合のキャッシュ関係の話で index.html もキャッシュするほうが良いみたいなことを見たので したほうがいいのかも?
だけどログイン中のユーザ情報など初期表示時に固定じゃない情報が必要なら index.html をキャッシュしても結局ページ開いた直後に API 呼び出しでもうひとつリクエストが必要になる
index.html がすごい重いファイルというならわかるけど SPA なら JavaScript で DOM 作るわけで index.html はほぼ空のはず
あまりメリットを感じられない

規模が大きなもので index.html も含めて静的ファイルは CDN で配布して 変化するデータはすべて API で別のサーバから取得 みたいな構成にしてると意味があるのかも
そんなことしない場合はやっぱりどっちでもよさそう



.js や .css をキャッシュさせるためにビルドごとにパスが異なる作りだと index.html もビルドで自動生成されたりする
Koa で SPA としてサーブする場合

app.use(static(...))

app.use(router.routes(...))

app.use(async (ctx, next) => {
await sendFile("/path/to/index.html")
})

公開フォルダにファイルがあればそれ
ないならルーターで処理
マッチするルートもないなら index.html

ビルドで出力された index.html なら場所は公開フォルダの内側
index.html に直接リクエストしたら static で処理されて 見つからない場合だと最後のミドルウェアで処理される
データを埋め込む場合は static のミドルウェアで処理されると埋め込めない
最後のミドルウェアでまとめて処理したい
静的ファイルじゃないから 公開フォルダじゃなくてテンプレート用フォルダに置くのが正しそうだけど このファイルだけ特別に移動も面倒

static を defer して最後のミドルウェアで公開フォルダ内のファイルの有無を確認して static で処理しないなら index.html に埋め込みしてレスポンスにできるけど 公開フォルダでマッチするファイルの有無を確認してるし ファイルの send 機能もあるならここで static の処理をすべてやってしまったほうがいいくらいになってる

埋め込み処理するなら公開フォルダに置かないようにするのが良いけど それが面倒なら index.html は埋め込みなしでキャッシュさせて API で情報受け取るのでもいいかも