補足施策

| 項目 | 状態 |
|------|------|
| WebP最適化 | 実施済み(8207ec1: 残り72件、8,848,523B → 3,900,702B) |
| JS最適化 第1段階(body末尾移動) | 実施済み(6f11000: script 36個を移動。FCP 55→62ms と逆効果であることを9回計測で実証) |
| JS最適化 第2段階(async付与) | 実施済み(47cc216: 外部30スクリプトを静的解析し候補2要素に絞り込み。効果ゼロを実測で確定) |
| CSS結合 | FCPフェーズ c2661fa / f8b7d6a で実施済みのためスキップ(結合グループの相違を根拠として記録) |
| TTFB 50msシミュレーション | エージェント定義で廃止。追加検証項目「TTFBの対策検討」として側枝 2fb33dc で参考検証(main には未マージ) |

| 項目 | 状態 |
|------|------|
| HTMLファイルサイズ | 適用済み(bf95a87: 384,102B → -62.5%) |
| 不要なHTML要素 | 該当なし(コメント・空白は実測1KB未満) |
| スライダー・リスト数の制限 | 適用済み(bf95a87: 初期非表示タブパネル5枚を外部フラグメント化) |
| 初期非表示要素の遅延読み込み | 適用済み(bf95a87)。.block-menu は操作依存で検証再現性が落ちるため意図的に対象外 |
| TTFB計測 | 実施済み(ttfbMs 3,255ms。同一オリジンの実測中央値39msと比較) |
| TTFB対策検討 | 実施済み(側枝 2fb33dc で定量化) |
| ネットワーク速度の現状確認 | 該当なし(network-rtt 0.306ms。判定目安50msを163倍下回る) |
| 高速回線シミュレーション | 該当なし(上記により条件不成立) |
| 未使用CSS検出 | 実施済み(Puppeteerカバレッジ + purgecss の二系統) |
| CSSパージ実施 | 適用済み(e6ad4de: 和集合方式で 3,058 → 1,204 ルール、45KiB → 19KiB) |
| Google Fontsをやめる | 適用済み(735388f。Diff 9.7281% で VRT特例を使わず通常合格) |
| 日本語Webフォントをやめる | 該当なし(woff2 は Montserrat 1件のみ。Noto Sans JP は @font-face 0件で実体なし) |

| コミット | プラクティス | Score | 転送量(KiB) | DOM | 採否 |
|---|---|---|---|---|---|
| 8207ec1 | サイト全体の画像のWebP化(72件) | 100 | 1457 | 3777 | 採用 |
| 6f11000 | script 36個の body末尾移動 | 100 | 1456 | 3804 | 採用(FCPに逆効果) |
| 47cc216 | lazysizes への async 付与 | 100 | 1456 | 3804 | 採用(効果なし) |
| 1f562bf | ajaxヘッダの二重取得解消 | 100 | 1452 | 3804 | 採用 |
| 5e83c74 | 検索アイコンの二重取得解消 | 100 | 1451 | 3804 | 採用 |
| e6ad4de | 未使用CSSのパージ | 100 | 1426 | 3804 | 採用 |
| bf95a87 | 初期非表示タブパネル5枚の遅延化 | 100 | 1414 | 1585 | 採用 |
| d5de41c | 過大サイズ商品画像の適正化 | 100 | 672 | 1585 | 採用 |
| 735388f | Google Fonts 廃止 | 100 | 636 | 1585 | 採用 |
| 2fb33dc | TTFB 3255→50ms シミュレーション | 100 | 636 | 1585 | 採用(側枝。main には未マージ) |

全10プラクティス採用、不採用0件。フォーカス指標 Overall Score は全10プラクティス・全55回の playback で100を維持。

- 総転送量 2,820 KiB → 636 KiB(-77.4%)、DOM 3,777 → 1,585要素(-58%)、リクエスト 92 → 88
- 失格監査の解消: modern-image-formats / uses-optimized-images / total-byte-weight(8207ec1)、uses-responsive-images 818→40 KiB(d5de41c)、unused-css-rules 45→19 KiB(e6ad4de)
- 側枝 2fb33dc で server-response-time / document-latency-insight(ともに score 0)が解消し、observed FCP 3,327ms → 99ms(-97%)

1. Lighthouse 100点でも 1.4MB 以上の無駄が残っていた(8207ec1 で 1.4MB 削っても指標は1ポイントも動かない)
2. defer 済みのページでは script の body末尾移動は FCP に逆効果(55→62ms、9回計測で再現性あり)。第1段階の目的は FCPフェーズ 3686c1c の defer化で達成済みだった
3. async 付与は完全に効果ゼロ。外部30スクリプトの静的解析で、外部グローバルを参照しないのは lazysizes のみと判明
4. template 要素への退避では転送量は減らない(実測 +2,545B)。両案を実装比較し外部フラグメント化(-62.5%)を採用
5. IntersectionObserver はビューポート境界に接しただけで isIntersecting: true(ratio 0)を返す。intersectionRatio > 0 の併用が必須
6. WebP化より「表示サイズへの適正化」の効果がはるかに大きい(同じ12枚で -47% vs -90.5%)
7. VRT の三峰構造(約7.5% / 9.7% / 15%)は起点 e7ac9a8 から存在(無変更で15回計測して実証)
8. TTFBシミュレーション(2fb33dc)は Overall Score 100 のまま observed FCP を -97% 改善した。スコアだけ見ても最大のボトルネックは発見できないことの直接証拠
9. Lantern が HTML の TTFB を無視している。network-server-latency の www.peachjohn.co.jp は 40.17ms で、Lantern はオリジン単位の最小応答時間を推定に使うため HTML本体の 3,260ms がシミュレーションから消えている。これが「observed FCP 3,335ms なのに simulated FCP 55ms」の正体

LCP: 71ms
CLS: 0.000
TBT: 0ms
FCP: 52ms
SI: 1748ms
Overall Score: 100

転送量 2,820 KiB → 636 KiB(-77.4%)、DOM 3,777 → 1,585要素(-58%)
LCP 105ms → 71ms、FCP 55ms → 52ms、SI 1854ms → 1748ms