PageSpeed Insights パフォーマンス100点を取るためのサイト構築術

はじめに

Google PageSpeed Insights で全項目100点を取ることは、正しい技術選定と設計をすれば決して難しくありません。

本記事では、このサイト自体が実際に達成したパフォーマンス・ユーザー補助・おすすめの方法・SEO 全て100点の構成を、具体的な実装とともに解説します。

PageSpeed Insights 全項目100点の計測結果

実際の計測結果はこちらで確認できます。

技術スタック

要素選定理由
フレームワークAstroゼロ JS デフォルト出力。静的 HTML で最速
CSSPico.css + カスタム CSSクラスレスで軽量。セマンティック HTML にスタイル自動適用
ホスティングCloudflare Pagesグローバル CDN 標準。無料枠で十分

この3つの組み合わせが、100点達成の土台になります。

パフォーマンス100点のための5原則

1. JavaScript をクライアントに送らない

Astro はデフォルトでクライアント JavaScript を一切出力しません。ページは純粋な HTML + CSS として配信されるため、パースやハイドレーションのコストがゼロです。

---
// この部分はビルド時にのみ実行される
const posts = await getCollection('posts');
---

<!-- 出力は純粋な HTML のみ -->
<ul>
  {posts.map(post => <li>{post.data.title}</li>)}
</ul>

インタラクティブな機能が必要な場合でも、Astro の「アイランドアーキテクチャ」により、必要なコンポーネントだけを部分的にハイドレーションできます。

2. 外部フォントを使わない

Google Fonts は手軽ですが、パフォーマンスの大敵です。実際にこのサイトで計測した結果がこちらです。

状態パフォーマンススコアレンダリングブロック時間
Google Fonts あり71点4,510ms
システムフォントのみ100点0ms

Noto Sans JP を Google Fonts で読み込むと、CSS ファイル(89KB)+ woff2 フォントファイル15本以上がクリティカルパスに追加され、LCP が大幅に遅延しました。

解決策はシンプルです。システムフォントを使いましょう。

:root {
  --pico-font-family: system-ui, -apple-system, "Hiragino Sans",
    "Yu Gothic UI", "Segoe UI", Meiryo, sans-serif;
}

macOS ならヒラギノ角ゴ、Windows なら游ゴシック、iOS / Android も標準で美しい日本語フォントを搭載しています。ダウンロード時間はゼロです。

どうしても Web フォントを使いたい場合は、セルフホスティング + font-display: swap + サブセット化(使用する文字だけ抽出)の3点セットが必須です。

3. CSS を最小限に保つ

Pico.css はフルビルドで約80KB ありますが、Astro がバンドル時に使用される CSS だけを出力してくれます。さらに、カスタム CSS をデザイントークンベースで書くことで、重複や冗長なスタイルを防ぎます。

:root {
  /* 8px グリッドベースのスペーシング */
  --s-2: 0.5rem;    /* 8px */
  --s-4: 1rem;      /* 16px */
  --s-6: 2rem;      /* 32px */
  --s-8: 3rem;      /* 48px */

  /* タイポグラフィスケール */
  --fs-sm: 0.875rem;  /* 14px */
  --fs-base: 1rem;    /* 16px */
  --fs-lg: 1.25rem;   /* 20px */
  --fs-xl: 1.75rem;   /* 28px */
  --fs-2xl: 2.75rem;  /* 44px */
}

変数を使い回すことで、CSS 全体を500行以内に収めています。

4. 画像を最適化する

画像はパフォーマンスに最も影響を与える要素です。以下のルールを守りましょう。

Astro では rehype プラグインで Markdown 画像に自動で属性を付与できます。

// rehype-img-attrs.mjs
export function rehypeImgAttrs() {
  return (tree) => {
    visit(tree, 'element', (node) => {
      if (node.tagName === 'img') {
        node.properties.loading ??= 'lazy';
        node.properties.decoding ??= 'async';
      }
    });
  };
}

5. CDN でホスティングする

Cloudflare Pages は無料でグローバル CDN を提供します。デプロイも簡単です。

npm install -D wrangler
npx wrangler pages project create my-site --production-branch=main
npm run build
npx wrangler pages deploy dist --project-name=my-site

4コマンドで世界中のエッジサーバーから配信されます。

SEO 100点のための構成

パフォーマンスだけでなく、SEO スコアも100点を取るために実装した項目です。

メタデータ

構造化データ(JSON-LD)

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "記事タイトル",
  "datePublished": "2026-03-21",
  "author": { "@type": "Organization", "name": "Media" },
  "publisher": { "@type": "Organization", "name": "Media" },
  "image": ["https://example.com/images/og.png"]
}

トップページには WebSite スキーマ、記事ページには BlogPosting + BreadcrumbList スキーマを配置しています。

その他

ユーザー補助(アクセシビリティ)100点

まとめ

パフォーマンス100点は特別な最適化テクニックではなく、「余計なものを入れない」設計の結果です。

  1. JavaScript を送らない → Astro
  2. 外部フォントを使わない → システムフォント
  3. CSS を最小限に → Pico.css + デザイントークン
  4. 画像を最適化する → lazy loading + WebP
  5. CDN でホスティング → Cloudflare Pages

この5つを守るだけで、パフォーマンス・SEO・アクセシビリティ・ベストプラクティスの全項目100点は達成できます。