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側の日本プロキシオンリー設定(無料)は以下の通り。
- Free > Proxy List > Authentication Method > Username/Password > Connection Method > Backbone Connection
- Countries > Japanだけを選択 > Save Changes
- 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です。
結果:日本から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/画像/フォント)などは別途対応が必要です。
