---
title: Next.jsで最適化した画像をCloudflareでキャッシュできるようにする方法
url: https://roboin.io/article/2025/06/04/how-to-enable-cloudflare-to-cache-nextjs-optimized-images/
description: Next.jsの<Image>コンポーネントを使うと簡単に画像を最適化できますが、これによって最適化した画像は、デフォルトではCloudflareにキャッシュされません。この記事では、Next.jsで最適化した画像をCloudflareにキャッシュする方法を解説します。
publishedDate: 2025-06-04T05:17:57.488Z
modifiedDate: 2025-06-04T05:17:57.488Z
thumbnail: https://roboin.io/api/media/file/cloudflare-dashborad.png
thumbnailAlt: CloudflareのCache Rulesの設定画面のスクリーンショット
thumbnailCaption: N/A
---

# Next.jsで最適化した画像をCloudflareでキャッシュできるようにする方法

Next.jsの`<Image>`コンポーネントを使うと簡単に画像を最適化できますが、これによって最適化した画像は、デフォルトではCloudflareにキャッシュされません。

実際、ブラウザーの開発者ツールのネットワークタブを確認すると、Next.jsで最適化した画像のレスポンスヘッダーが`cf-cache-status: DYNAMIC`となっており、Cloudflareにキャッシュされていないことがわかります。

![ブラウザーの開発者ツールのネットワークタブのスクリーンショット。「cf-cache-status: SYNAMIC」と書かれている](https://roboin.io/api/media/file/cf-cache-status-dynamic.png)

## 画像がCloudflareにキャッシュされない理由

Next.jsで最適化した画像がCloudflareにキャッシュされないのは、Cloudflareのキャッシュのデフォルトの挙動が原因です。

Cloudflareは、デフォルトでは拡張子によってコンテンツをキャッシュするかどうかを判断するようになっています。

Cloudflareのキャッシュについてのドキュメントには、次のように書かれています。

> Cloudflare only caches based on file extension and not by MIME type. The Cloudflare CDN does not cache HTML or JSON by default. Additionally, by default Cloudflare caches a website's robots.txt.
> 
> 日本語訳：
> CloudflareはMIMEタイプではなくファイル拡張子にもとづいてのみキャッシュします。Cloudflare CDNはデフォルトでHTMLとJSONをキャッシュしません。加えて、CloudflareはデフォルトでWebサイトのrobots.txtをキャッシュします。
> 
> ——『[Default Cache Behavior · Cloudflare Cache (CDN) docs](https://developers.cloudflare.com/cache/concepts/default-cache-behavior/#default-cached-file-extensions)』より

このように、CloudflareはコンテンツのMIMEタイプではなくファイル拡張子でキャッシュするかを判断しています。

Next.jsで最適化した画像のパスは、次のようになっています。

```http
/_next/image/?url=<元の画像のURL>&w=<幅>&q=<最適化のクオリティ>
```

このパスからクエリーパラメーターを取り除くと、`/_next/image/`となります。

クエリーパラメーターを取り除いたパスにファイル拡張子が含まれていないので、Cloudflareはキャッシュすべきコンテンツか判断できず、結果としてキャッシュされないということです。

## Cloudflareにキャッシュさせるには？

Cloudflareのダッシュボードでキャッシュルールを変更することで、Next.jsの画像をキャッシュできるようになります。

<Steps>
  設定を変更したいWebサイトのCloudflareダッシュボードを開きます

  サイドバーから［Caching］>［Cache Rules］を開きます

  ［ルールを作成］をクリックします

  ルールの内容を次のように設定します

  - ルール名：（わかりやすい任意の名前）
  - カスタムフィルタ式
      - フィールド：［URIパス］
      - オペレーター：［次で始まる］
      - 値：`/_next/image`
  - キャッシュの適格性：［キャッシュの対象］
  - エッジTTL：［存在する場合は cache-control ヘッダーを使用し、存在しない場合は Cloudflare のデフォルト TTL でリクエストのレスポンス ステータスをキャッシュします］（※お好みでほかのものでも可）

  ![CloudflareのCache Rulesの設定画面のスクリーンショット](https://roboin.io/api/media/file/cloudflare-dashborad.png)

  ルールを保存します

  Webサイトを開いてリロードし、画像のレスポンスヘッダーが`cf-cache-status: HIT`となっていることを確認します
</Steps>