記事詳細だけを事前生成する:CSRとSSGの中間案

クライアントサイドレンダリング(CSR)は、ページ遷移が速く、構成も単純だ。ただし最初にHTMLを受け取った時点では本文が空で、JavaScriptの実行後に記事が表示される。

本誌の研究「中価格帯Android端末における記事ページの表示性能」では、CSRのみの構成と比べて、事前生成したHTMLでは最大コンテンツの表示時間が大きく短くなった。

何を事前生成するか

本誌では、検索から直接訪問されることが多い「記事詳細」「特集詳細」「研究詳細」だけをHTMLとして書き出している。一覧ページや検索結果は、表示のたびにAPIから取得する。

書き出す内容

タイトル、説明文、canonical、OGPなどのメタ情報

ArticleとBreadcrumbListの構造化データ

本文のHTML

最初の描画に使うJSONデータ

JavaScriptが読み込まれたあとは、埋め込んだJSONを使って同じ画面を描画するので、同じ記事を二重に取得しない。

更新時の再生成

WordPress側のプラグインで、記事の公開・更新時にビルド用のWebhookを呼び出す。Webhookを設定しない場合でも、表示側はAPIから最新の記事を取得して描画するので、内容が古いまま表示され続けることはない。

この構成の限界

一覧ページは事前生成していないため、JavaScriptを無効にした環境では記事一覧が表示されない。サイトマップに全記事のURLを載せることで、検索エンジンが記事を見つけられるようにしている。