Cloudflare Workersで日本のTier1 NRTをCache Warm

How to Preload Cloudflare Cache Across All Edge Locationsを見てSuper Preloader for CloudflareプラグインとWorkerを使ったCloudflare Edge Warmupを参考にしました。

尚、github上で探せる汎用的なcache warmerも試しましたが、workerによるfetchを使わない、なおかつ、単純連打Cache WarmerではCloudflare WAFで脅威扱いとなるため基本的に暖められません。Cache Missになります。

オレンジ雲からグレー雲に変えてWAFを無効にしたら使えるかもしれませんが、CloudflareのWAFを使わないという選択肢はありえません。

前提

Cloudflareで、Tier1のNRTにキャッシュを乗せるため、階層型キャッシュトポロジースマート階層型キャッシュトポロジーを有効にしていること。

WEBSHARE無料プロキシ(日本)でCloudflare Edgeをwarmup(失敗)

冒頭のwpfixfastさんの記事のとおりに実践しました。

結論:無料の日本プロキシだけを使ってもLAX(Los Angeles)のEdgeを暖めてしまう。理由まで調べていませんが、日本のEdge(Tier1 NRT)を暖めることは出来ませんでした。ASN/ISPがDatacamp Limited(United Kingdom)でした、関係あるのでしょうか。

WEBSHARE側の日本プロキシオンリー設定(無料)は以下の通り。

  1. Free > Proxy List > Authentication Method > Username/Password > ​Connection Method > Backbone Connection
  2. Countries > Japanだけを選択 > Save Changes
  3. Download > Download link

サーチコンソールのリンクにて、リンク元サイトにworkers.devが表示されてしまう

workers.devはドメインを変えず、https://AAAAA.BBBBBBB.workers.dev/を使いました。

可能性として、wpfixfastさんのSuper Preloader for CloudflareプラグインによるWEBSHARE日本プロキシ経由のworkerを使ったWarmupリクエストをwarmup対象ではない別のWordPressから実行したなど、確認すべき事項があるため調査しました。Cloudflare workersのfetchによる効果的なwarmupは、ユーザー体験の向上策として大事なことなので慎重に進めます。

原因が判明

以下ファイルパスに公開状態で、Super Preloader for Cloudflareプラグインのwarmpログ(warmup対象の複数URLが記載されている)がありました。Googlebotは、このログを見てリンクが記載されていると判断した、と考えられます。

/wp-content/uploads/super-preloader-for-cloudflare/super-preloader-for-cloudflare.log

過去にも、全く別のプラグインで同様にログファイルが公開されたまま、Googlebotから大量リンクと判定されてしまう。低品質評価をくらってしまう可能性有、という経験をしたことが有ります。

githubでwpfixfastさんに👉️issueを投げて、対応してくださることになりました。

wpfixfastのCloudflare Workerを流用して1URLでwarmup(成功)

以下、Cloudflare workerで暖めたいWEBサイトをfetchするwpfixfastさんのworker.jsです。

👉️wpfixfast/worker.js

結果:日本からworkerにGETリクエストを実行、NRTでCache Hit!

workerへのcurlのやり方

worker.jsの8行目 const SECRET = 'my_random_string' の my_random_string は、事前にworker上でランダムな文字列に変えておいてください。workerの作成手順は省きます。次の手順でwarmupリクエストを行います。

暖機対象の https://sample.com は、適宜、変えてください。

1. シェルでリクエストのトークンを作る

echo -n 'https://sample.com/my_random_string' | sha256sum | cut -d' ' -f1

解説

① https://sample.com は暖めたい(キャッシュをEdgeに乗せたい)URLに変えてください。
② my_random_string は、事前に変えたランダムな文字列を使います。

2. 作成したトークンを使ってWorkerにリクエストを投げる

curl -i "<Cloudflare workerのURL>/?url=https://sample.com/&token=<作ったトークン>"

3. 結果

HTTP/1.1 200 OK
Date: Thu, 06 Nov 2025 11:09:40 GMT
Content-Type: text/plain;charset=UTF-8
Content-Length: 45
Connection: keep-alive
CF-Ray: XXXXXXXXXXXX-NRT
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
alt-svc: h3=":443"; ma=86400

Created cache at this edge

成功しました。

4.確認

次のコマンドでCache Hit確認します。

curl -I https://sample.com/ | grep -iE "cf-ray|cf-cache-status|cf-region"

結果

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
cf-cache-status: HIT
CF-RAY: XXXXXXXXXXXX-NRT

日本NRTのEdgeにキャッシュ乗りました。暖まりました。

注意点

この手順は、XMLサイトマップを使わず、メインドキュメントHTMLのページ1個だけを暖めています。メインドキュメントHTMLに付随するサブリンクとなるアセット(css/js/画像/フォント)などは別途対応が必要です。