補足施策

| 項目 | 状態 |
|------|------|
| WebP最適化(必須) | 適用済み(残存PNG20件をロスレス変換、Content-Type是正14件) |
| JS最適化 第1段階(必須) | 適用済み(構造的に達成済みであることを実測で確定) |
| JS最適化 第2段階(必須) | 適用済み(9本中 async 化できるのは /bundles/site 1本のみと確定) |
| CSS結合(必須) | FCPフェーズ 73eb036 で実施済み(外部CSSは1本のみ) |
| HTMLファイルサイズ | 適用済み(-24.9% / -49,747B) |
| 不要なHTML要素 | 適用済み(全ブレークポイント非表示のミニカート、DOM -24要素) |
| スライダー・リスト数の制限 | 適用済み(ブログリスト、DOM -191要素) |
| 初期非表示要素の遅延読み込み | 適用済み(セールカルーセル、DOM -796要素) |
| TTFB | 対処不可能(オリジンサーバ改修が必要。影響度を測定) |
| ネットワーク速度シミュレーション | 実施(不採用・計測専用) |
| CSSのパージ | 対処試行・不採用(単一ページのカバレッジでは安全に削減できないと実証) |
| Google Fonts をやめる | 適用済み(転送量 -30KiB、リクエスト -2件) |
| Webフォント(日本語)をやめる | 該当なし(日本語Webフォントは0件) |
| 未使用JS / レガシーpolyfill | 対処試行・不採用(理論上限測定で効果なしと実証) |

observedFirstContentfulPaint: 1,134ms
observedDomContentLoaded: 1,139ms
observedLargestContentfulPaint: 1,134ms
observedSpeedIndex: 1,153ms
observedLoad: 3,807ms

CLS: 0.000
TBT: 0ms
Overall Score: 100

dom-size: 1,544要素 / リクエスト 241件 / 転送量 2.99MB / 展開後 4.12MB / 404は2件

※ シミュレーションの LCP / SI は Lantern の内部計算が破綻しているため成果指標に使用しない

| 指標 | オリジナル | 最終 | 改善率 |
|---|---|---|---|
| observedLargestContentfulPaint | 4,001ms | 1,134ms | -71.7% |
| observedDomContentLoaded | 3,911ms | 1,139ms | -70.9% |
| observedSpeedIndex | 3,259ms | 1,153ms | -64.6% |
| observedLoad | 10,410ms | 3,807ms | -63.4% |
| リクエスト数 | 444件 | 241件 | -45.7% |
| 転送量 | 8.77MB | 2.99MB | -65.9% |
| 展開後サイズ | 26.13MB | 4.12MB | -84.2% |
| dom-size | 2,635要素 | 1,544要素 | -41.4% |
| CLS | 0.005 | 0.000 | 完全解消 |
| Overall Score | 66 | 100 | +34pt |

- IntersectionObserver の監視対象に display:none の要素を使うと
  「表示されたら初期化する」が「初期化されるまで表示判定されない」循環デッドロックになる
- pixel diff によるレグレッションテストでは、ビューポート外の機能破損を検出できない
- 実行時カバレッジによるCSS削減は、単一ページの計測では原理的に安全に行えない
- 「未使用バイト数が大きい」ことは「削れば速くなる」を意味しない
  (seiko バンドルを完全ゼロ化しても observedLCP の改善は -8ms のみ)

- server-response-time(TTFB 970ms): オリジンサーバ改修が必要
- bf-cache: unloadハンドラ / cache-control:no-store、アプリケーション実装側