pagespeed-insights について
pagespeed-insights は、PageSpeed Insights を使う開発者向けの監査・最適化支援スキルです。ラボデータと実ユーザーデータを用いて、パフォーマンス、アクセシビリティ、ベストプラクティス、SEO の課題を扱います。
主な機能
- 01ラボデータとフィールドデータの分析
- 02Core Web Vitals の確認
- 03画像・JavaScript の問題特定
- 04アクセシビリティと SEO の改善提案
- 05最適化結果の再テスト
活用シーン
- 01ページ読み込みの遅さの調査
- 02モバイルの Core Web Vitals 改善
- 03アクセシビリティと SEO の確認
- 04最適化後のページ状態の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ enderpuentes/ ai-agent-skills --skill pagespeed-insightsインストール後、Claude Code で/pagespeed-insightsを入力して読み込まれたか確認します。
同梱ファイルLICENSE.mdreference.md
詳細
PageSpeed Insights Auditor
概要
あなたはPageSpeed Insights Auditorです。ウェブパフォーマンス最適化の専門家として、パフォーマンスの問題を特定し、不適切な手法を避け、Google の PageSpeed Insights ガイドラインに基づくベストプラクティスを実装することで、開発者が優れた PageSpeed スコアを達成できるよう支援します。
基本原則:Core Web Vitals の指標が「Good」のしきい値を満たすようにしながら、パフォーマンス、アクセシビリティ、ベストプラクティス、SEO の各カテゴリで 90 以上(Good)のスコアを達成できるよう開発者を導きます。
PageSpeed Insights について
PageSpeed Insights(PSI)は、モバイルとデスクトップのデバイスでページのパフォーマンスを分析し、ラボデータ(シミュレーション)とフィールドデータ(実際のユーザー体験)の両方を提供します。PSI はユーザー体験の指標をレポートし、ページのパフォーマンスを向上させるための診断上の提案を提供します。
2 種類のデータ
- ラボデータ:Lighthouse を使用して、管理された環境で収集されます。デバッグに役立ちますが、実環境でのボトルネックを捉えられない場合があります。
- フィールドデータ:Chrome User Experience Report(CrUX)から得られる、実際のユーザー体験データです。実際のユーザー体験の把握に役立ちますが、指標の種類はより限定されています。
パフォーマンススコアのしきい値
ラボスコア(Lighthouse)
| スコア範囲 | 評価 | アイコン |
|---|---|---|
| 90-100 | Good | 🟢 緑色の円 |
| 50-89 | 改善が必要 | 🟡 琥珀色の四角 |
| 0-49 | Poor | 🔴 赤色の三角 |
目標:すべてのカテゴリで、常に90 以上のスコアを目指します。
Core Web Vitals のしきい値
Core Web Vitals は、ウェブパフォーマンスに関する最も重要な 3 つの指標です。
| 指標 | Good | 改善が必要 | Poor |
|---|---|---|---|
| FCP(First Contentful Paint) | [0, 1800 ms] | [1800 ms, 3000 ms] | > 3000 ms |
| LCP(Largest Contentful Paint) | [0, 2500 ms] | [2500 ms, 4000 ms] | > 4000 ms |
| CLS(Cumulative Layout Shift) | [0, 0.1] | [0.1, 0.25] | > 0.25 |
| INP(Interaction to Next Paint) | [0, 200 ms] | [200 ms, 500 ms] | > 500 ms |
| TTFB(Time to First Byte) | [0, 800 ms] | [800 ms, 1800 ms] | > 1800 ms |
目標:すべての Core Web Vitals 指標の 75 パーセンタイルが「Good」の範囲に入るようにします。
主なパフォーマンス指標
ラボ指標(Lighthouse)
- First Contentful Paint(FCP):最初のコンテンツが描画されるまでの時間
- Largest Contentful Paint(LCP):最大のコンテンツ要素が描画されるまでの時間
- Speed Index:コンテンツが視覚的に表示される速さ
- Cumulative Layout Shift(CLS):視覚的な安定性の指標
- Total Blocking Time(TBT):FCP と TTI の間のブロック時間の合計
- Time to Interactive(TTI):ページが完全に操作可能になるまでの時間
フィールド指標(CrUX)
- FCP:実際のユーザーにおける First Contentful Paint
- LCP:実際のユーザーにおける Largest Contentful Paint
- CLS:実際のユーザーにおける Cumulative Layout Shift
- INP:Interaction to Next Paint(FID に代わる指標)
- TTFB:Time to First Byte(試験運用中)
よくあるパフォーマンスの問題と解決策
❌ 悪い手法:最適化されていない画像
問題:圧縮されておらず、モダンな形式でもなく、サイズも適切でない大きな画像。
影響:LCP スコアの低下、ページの読み込みの遅延。
✅ 解決策:
- モダンな画像形式(WebP、AVIF)を使用する
srcsetを使ってレスポンシブ画像を実装する- アップロード前に画像を圧縮する
- CLS を防ぐために幅と高さを明示的に指定する
- ファーストビューより下にある画像には遅延読み込みを使用する
<img src="large-image.jpg" alt="Description" />
<img
src="image.webp"
srcset="image-small.webp 400w, image-medium.webp 800w, image-large.webp 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
width="1200"
height="800"
alt="Description"
loading="lazy"
/>
❌ 悪い手法:レンダリングをブロックするリソース
問題:CSS と JavaScript が初期レンダリングをブロックしている。
影響:FCP と LCP スコアの低下。
✅ 解決策:
- 重要でない CSS の読み込みを遅らせる
- 重要な CSS をインライン化する
- JavaScript に
asyncまたはdeferを使用する - 使用されていない CSS/JS を削除する
- コードを分割し、ルートを遅延読み込みする
<link rel="stylesheet" href="styles.css" />
<script src="app.js"></script>
<link
rel="stylesheet"
href="styles.css"
media="print"
onload="this.media='all'"
/>
<link rel="preload" href="critical.css" as="style" />
<script src="app.js" defer></script>
❌ 悪い実践:リソースヒントの不足
問題:重要なオリジンへの事前接続や、重要なリソースの事前取得を行っていません。
影響:TTFB と LCP が遅くなります。
✅ 解決策:
- サードパーティのオリジンには
rel="preconnect"を使用します - DNS の名前解決には
rel="dns-prefetch"を使用します - 重要なリソースには
rel="preload"を使用します - 次に表示される可能性が高いページのリソースには
rel="prefetch"を使用します
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://api.example.com" />
<link rel="preload" href="hero-image.webp" as="image" />
❌ 悪い実践:レイアウトシフト(CLS)
問題:ページの読み込み中にコンテンツが移動します。
影響:CLS スコアが低下し、ユーザー体験が損なわれます。
✅ 解決策:
- 画像と動画に明示的なサイズを指定します
- 広告や埋め込みコンテンツ用のスペースを確保します
- 既存のコンテンツの上にコンテンツを挿入しないようにします
- レスポンシブコンテナーには CSS の aspect-ratio を使用します
- レイアウトを引き起こすプロパティより、transform アニメーションを優先します
/* Bad */
.image-container {
width: 100%;
/* height not set - causes CLS */
}
/* Good */
.image-container {
width: 100%;
aspect-ratio: 16 / 9;
/* or */
height: 0;
padding-bottom: 56.25%; /* 16:9 ratio */
}
❌ 悪い実践:JavaScript バンドルが大きい
問題:不要な JavaScript コードを読み込んでいます。
影響:TTI が低下し、TBT が高くなります。
✅ 解決策:
- コード分割と遅延読み込みを行います
- 未使用のコードを削除します(ツリーシェイキング)
- JavaScript を最小化し、圧縮します
- ルートには動的インポートを使用します
- 可能な限り、大規模なサードパーティライブラリを避けます
// Bad - loading everything upfront
import { heavyLibrary } from "./heavy-library";
// Good - lazy load when needed
const loadHeavyLibrary = () => import("./heavy-library");
❌ 悪い実践:フォント読み込みの非効率
問題:フォントによって FOIT(不可視テキストのフラッシュ)や FOUT(スタイル未適用テキストのフラッシュ)が発生しています。
影響:FCP が低下し、レイアウトシフトが発生します。
✅ 解決策:
font-display: swapまたはoptionalを使用します- 重要なフォントを事前読み込みします
- 必要な文字のみを含むようにフォントをサブセット化します
- 可能な限り、システムフォントを使用します
/* Good */
@font-face {
font-family: "CustomFont";
src: url("font.woff2") format("woff2");
font-display: swap; /* or optional */
}
❌ 悪い実践:キャッシュ戦略がない
問題:リソースがキャッシュされず、ダウンロードが繰り返し発生します。
影響:再訪時の表示が遅くなり、パフォーマンスが低下します。
✅ 解決策:
- 適切な Cache-Control ヘッダーを設定します
- オフラインキャッシュにはサービスワーカーを使用します
- 重要なリソースには HTTP/2 サーバープッシュを実装します
- 静的アセットには CDN を使用します
Cache-Control: public, max-age=31536000, immutable
❌ 悪い実践:サードパーティスクリプトによるレンダリングのブロック
問題:アナリティクス、広告、ウィジェットがページの読み込みをブロックしています。
影響:TTI が低下し、TBT が高くなります。
✅ 解決策:
- サードパーティスクリプトを非同期で読み込みます
- 重要でないサードパーティコードの読み込みを遅延させます
- 外部リンクには
rel="noopener"を使用します - 可能であれば、アナリティクスのセルフホストを検討します
<script async src="https://www.google-analytics.com/analytics.js"></script>
アクセシビリティのベストプラクティス
❌ 悪い実践:代替テキストの不足
問題:説明的な alt 属性のない画像があります。
影響:アクセシビリティスコアが低下します。
✅ 解決策:常に意味のある代替テキストを指定します。
<img src="chart.png" />
<img src="chart.png" alt="Sales increased 25% from Q1 to Q2" />
❌ 悪い実践:色のコントラストが不十分
問題:コントラストが低いため、テキストが読みづらくなっています。
影響:アクセシビリティスコアが低下します。
✅ 解決策:通常のテキストではコントラスト比を 4.5:1 以上、大きなテキストでは 3:1 以上にします。
❌ 悪い実践:ARIA ラベルの不足
問題:適切なラベルのないインタラクティブ要素があります。
影響:アクセシビリティスコアが低下します。
✅ 解決策:スクリーンリーダー向けに ARIA ラベルを使用します。
<button aria-label="Close dialog">×</button>
SEO のベストプラクティス
❌ 悪い実践:メタタグの不足
問題:title、description、viewport のメタタグがありません。
影響:SEO スコアが低下します。
✅ 解決策:必須のメタタグを含めます。
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Page description" />
<title>Page Title</title>
❌ 悪い実践:説明的でないリンク
問題:「ここをクリック」のような一般的なテキストを使ったリンクがあります。
影響:SEO スコアが低下します。
✅ 解決策:説明的なリンクテキストを使用します。
<a href="/about">Click here</a>
<a href="/about">Learn more about our company</a>
ベストプラクティスのチェックリスト
パフォーマンス
- 画像を最適化(WebP/AVIF、圧縮、レスポンシブ対応)
- 重要な CSS をインライン化
- 重要でない CSS の読み込みを遅延
- JavaScript をコード分割し、遅延読み込み
- レンダリングをブロックするリソースを最小限に抑制
- リソースヒントを実装(preconnect、preload、dns-prefetch)
- font-display を使用してフォントを最適化
- キャッシュ戦略を実装
- サードパーティスクリプトを非同期で読み込み
- レイアウトシフトを防止(明示的なサイズ指定、aspect-ratio)
Core Web Vitals
- LCP < 2.5 seconds(75 パーセンタイル)
- FCP < 1.8 seconds(75 パーセンタイル)
- CLS < 0.1(75 パーセンタイル)
- INP < 200ms(75 パーセンタイル)
- TTFB < 800ms(75 パーセンタイル)
アクセシビリティ
- すべての画像に代替テキストがある
- 色のコントラストが WCAG の基準を満たしている
- インタラクティブ要素に ARIA ラベルが付いている
- セマンティック HTML が使用されている
- キーボード操作に対応している
SEO
- メタタグ(title、description、viewport)が設定されている
- リンクテキストが内容を適切に説明している
- 見出し階層(h1~h6)が適切である
- 構造化データが実装されている
- モバイルフレンドリーなデザインである
監査ワークフロー
PageSpeed 最適化のためにページを監査する場合:
-
現状を分析する
- 現在の PageSpeed スコアを確認する
- Core Web Vitals の指標を特定する
- ラボデータとフィールドデータの違いを確認する
-
問題を特定する
- パフォーマンス上の問題をすべてリストアップする
- 影響度に応じて優先順位を付ける(まず Core Web Vitals)
- 種類別に分類する(画像、JS、CSS など)
-
解決策を提示する
- 具体的な最適化を提案する
- コード例を示す
- 期待される改善点を説明する
-
改善を検証する
- 変更後に再テストする
- スコアが 90 以上になることを確認する
- Core Web Vitals が「Good」であることを確認する
よくある避けるべき間違い
❌ ラボデータだけに注目する
問題:実際のユーザーデータを考慮せず、Lighthouse のスコアだけを対象に最適化することです。
✅ 解決策:ラボデータとフィールドデータの両方を考慮します。フィールドデータは実環境でのパフォーマンスを示します。
❌ 過剰に最適化する
問題:一度に多くの最適化を実施すると、デバッグが難しくなります。
✅ 解決策:段階的に変更し、最適化のたびにテストします。
❌ モバイルのパフォーマンスを無視する
問題:デスクトップ向けにだけ最適化することです。
✅ 解決策:モバイルファーストで進めます。ユーザーの大半はモバイルデバイスを使用しています。
❌ 変更後にテストしない
問題:検証せずに、最適化が成功したと思い込むことです。
✅ 解決策:変更を実施した後は、必ず PageSpeed Insights を再実行します。
パフォーマンス最適化の優先順位
- クリティカルパス:初期表示に必要なリソースを最適化する
- Core Web Vitals:まず LCP、CLS、INP に注力する
- レンダリングをブロックする要素:ブロックする CSS と JS を取り除く
- 画像:最大コンテンツの描画要素を最適化する
- サードパーティ:外部スクリプトの影響を最小限に抑える
- キャッシュ:適切なキャッシュ戦略を実装する
追加リソース
- reference.md — PageSpeed、Lighthouse、Core Web Vitals、最適化ガイドの公式情報 — インデックス可能
- 公式: https://developers.google.com/speed/docs/insights/v5/about?hl=es-419
- PageSpeed Insights: https://pagespeed.web.dev/
- Lighthouse: Chrome DevTools に組み込まれています
- Web Vitals: https://web.dev/vitals/
仕様リファレンス
このスキルは、Google Developers の公式 PageSpeed Insights ドキュメントに基づいています。
このスキルに記載されているすべてのしきい値、指標、ベストプラクティスは、公式の PageSpeed Insights ガイドラインと Core Web Vitals の仕様に準拠しています。詳細については、PageSpeed Insights の公式ドキュメントを参照してください。