Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ウィジェットの設定

最終更新 Markdown で表示Agent セットアップ

data 属性または JavaScript の render パラメーターで、Turnstile ウィジェットの外観、動作、機能を設定します。

描画方法

Turnstile ウィジェットは、暗黙的な描画または明示的な描画で実装できます。

暗黙的な描画は、ページ読み込み時に HTML 内の cf-turnstile クラス付き要素を自動で走査し、ウィジェットを描画します。シンプルな実装、静的サイト、ページ読み込み直後にウィジェットを出したい場合に適しています。

仕組み

  1. ページに Turnstile のスクリプトを追加します。
  2. <div class="cf-turnstile" data-sitekey="your-key"></div> 要素を置きます。
  3. ページの読み込み時に、ウィジェットが自動で描画されます。
  4. HTML 要素の data-* 属性でウィジェットを設定します。
html
	<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-theme="light"></div>

明示的な描画は、JavaScript 関数でウィジェットの作成タイミングと方法をプログラムから制御します。動的サイトやシングルページアプリケーション(SPA)、ウィジェット作成のタイミング制御、訪問者の操作に応じた条件付き描画、設定の異なる複数ウィジェットに適しています。

仕組み

  1. ?render=explicit パラメーター付きで Turnstile のスクリプトを追加します。
  2. コンテナ要素を作成します(cf-turnstile クラスは付けません)。
  3. ウィジェットを作成したいタイミングで turnstile.render() を呼び出します。
  4. JavaScript オブジェクトのパラメーターでウィジェットを設定します。
html
	<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>
	<div id="my-widget"></div>
	
	<script>
	window.onload = function() {
		turnstile.render('#my-widget', {
			sitekey: '<YOUR-SITE-KEY>',
			theme: 'light',
			callback: function(token) {
				console.log('Success:', token);
			}
		});
	};
	</script>

ウィジェットサイズ

Managed または Non-Interactive モードでは、Turnstile ウィジェットは 2 種類の固定サイズ、または幅可変サイズにできます。

サイズ 高さ 用途
Normal 300px 65px 標準的な実装
Flexible 100%(最小: 300px) 65px レスポンシブデザイン
Compact 150px 140px スペースが限られたレイアウト
  • normal: デフォルトサイズです。ほとんどのデスクトップとモバイルのレイアウトに適します。サイトやフォームに十分な横幅がある場合に使います。
  • flexible: 最低限の使いやすさを保ちつつ、コンテナ幅に自動で合わせます。あらゆる画面サイズで動くレスポンシブデザインに使います。
  • compact: モバイル UI、サイドバー、横幅が限られる場所に適します。幅が狭い分、通常より高くなります。
通常サイズ(デフォルト)html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
可変サイズhtml
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-size="flexible"></div>
コンパクトサイズhtml
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-size="compact"></div>
通常サイズ(デフォルト)js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>'
	});
可変サイズjs
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		size: 'flexible'
	});
コンパクトサイズjs
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		size: 'compact'
	});

テーマオプション

サイトのデザインに合わせて、ウィジェットの見た目をカスタマイズします。

  • auto(デフォルト): 訪問者のシステムテーマ設定に自動で合わせます。訪問者の設定を尊重し、アクセシビリティも高いため、ほとんどの実装では auto を推奨します。
  • light: 明るい色と明確なコントラストのライトテーマです。明るい背景で読みやすく、コントラストが高くなります。
  • dark: 暗い UI 向けに最適化したダークテーマです。暗いインターフェイス、ゲームサイト、ダークカラースキームのアプリに適します。
自動テーマ(デフォルト)html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
ライトテーマhtml
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-theme="light"></div>
ダークテーマhtml
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-theme="dark"></div>
自動テーマ(デフォルト)js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>'
	});
ライトテーマjs
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		theme: 'light'
	});
ダークテーマjs
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		theme: 'dark'
	});

外観モード

外観モードで、訪問者にウィジェットが見えるタイミングを制御します。

  • always(デフォルト): ページ読み込み時点から、ウィジェットは常に表示されます。訪問者にすぐウィジェットを見せたいほとんどの実装に適します。セキュリティ検証があることが、見た目でも分かります。
  • execute: チャレンジ開始後にだけウィジェットが表示されます。訪問者がフォーム入力を始めたときや送信ボタンを選んだときだけ出すなど、表示タイミングを制御したい場合に使えます。
  • interaction-only: 訪問者の操作が必要なときだけウィジェットが表示され、体験は最もすっきりします。ほとんどの訪問者はウィジェットを見ません。ボットと疑われる場合だけ、インタラクティブなチャレンジが出ます。
常に表示(デフォルト)html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
チャレンジ開始後のみ表示html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-appearance="execute"></div>
操作が必要なときだけ表示html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-appearance="interaction-only"></div>
常に表示(デフォルト)js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>'
	});
チャレンジ開始後のみ表示js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		appearance: 'execute'
	});
操作が必要なときだけ表示js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		appearance: 'interaction-only'
	});

実行モード

チャレンジの実行とトークン生成のタイミングを制御します。

  • render(デフォルト): render() の呼び出し後にチャレンジが自動で走り、ウィジェット読み込み直後から保護が始まります。ページ読み込み中にバックグラウンドでチャレンジが進むため、訪問者がデータを送信するころにはトークンの準備ができています。

  • execute: turnstile.execute() を別途呼び出したあとにチャレンジが走り、検証のタイミングを細かく制御できます。複数ステップのフォーム、条件付き検証、訪問者が実際に送信しようとしたときまでチャレンジを遅らせたい場合に使えます。必要なときだけ検証するため、ページ読み込み性能と訪問者体験を改善できます。

    よくあるシナリオ

    • 複数ステップのフォーム: 最後のステップだけで検証します。
    • 条件付き保護: 一定の条件を満たす訪問者だけを検証します。
    • 性能最適化: 検証を遅らせ、初回のページ読み込み時間を短くします。
    • ユーザー起点の検証: 訪問者が手動で検証を開始できるようにします。
自動実行(デフォルト)html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
手動実行html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-execution="execute"></div>
自動実行(デフォルト)js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>'
	});
手動実行js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		execution: 'execute'
	});
あとからチャレンジを実行するjs
	turnstile.execute('#widget-container');

言語設定

ウィジェット UI の言語を設定します。

  • auto(デフォルト): 訪問者のブラウザー言語設定を使います。
  • 特定の言語コード: esfrde などの ISO 639-1 の 2 文字コードです。
  • 言語と地域: en-USes-MXpt-BR など、地域差向けの組み合わせコードです。
言語の自動判定(デフォルト)html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
特定の言語html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-language="es"></div>
言語と国html
	<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-language="en-US"></div>
言語の自動判定(デフォルト)js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>'
	});
特定の言語js
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		language: 'es'
	});

コールバック設定

コールバックでウィジェットのイベントを処理します。

  • callback: チャレンジが成功したときに呼び出されます。
  • error-callback: チャレンジ中にエラーが起きたときに呼び出されます。
  • expired-callback: トークンが(タイムアウト前に)期限切れになったときに呼び出されます。
  • timeout-callback: インタラクティブなチャレンジがタイムアウトしたときに呼び出されます。

成功コールバックはトークンを受け取ります。このトークンは Siteverify API でサーバー側検証する必要があります。トークンは 1 回限りで、300 秒(5 分)後に期限切れになります。

	<div class="cf-turnstile"
		data-sitekey="<YOUR-SITE-KEY>"
		data-callback="onSuccess"
		data-error-callback="onError"
		data-expired-callback="onExpired"
		data-timeout-callback="onTimeout"></div>
	<script>
	function onSuccess(token) {
	console.log('Challenge Success:', token);
	}
	function onError(errorCode) {
	console.log('Challenge Error:', errorCode);
	}
	function onExpired() {
	console.log('Token expired');
	}
	function onTimeout() {
	console.log('Challenge timed out');
	}
	</script>
	turnstile.render('#widget-container', {
		sitekey: '<YOUR-SITE-KEY>',
		callback: function(token) {
			console.log('Challenge Success:', token);
		},
		'error-callback': function(errorCode) {
			console.log('Challenge Error:', errorCode);
		},
		'expired-callback': function() {
			console.log('Token expired');
		},
		'timeout-callback': function() {
			console.log('Challenge timed out');
		}
	});

ベストプラクティス

  • 成功コールバックは必ず実装し、トークンを処理してフォーム送信や次の手順へ進みます。
  • エラーコールバックで、失敗時の案内と訪問者へのフィードバックを行います。
  • 期限切れトークンを監視し、無効になる前にチャレンジを更新します。
  • タイムアウトを処理し、チャレンジ解決まで訪問者を案内します。

高度な設定オプション

リトライの動作

失敗したチャレンジへの Turnstile の対応を制御します。

  • auto(デフォルト): 失敗したチャレンジを自動で再試行します。一時的なネットワーク障害や処理エラーから自動復旧するため、訪問者体験がよくなります。
  • never: 自動リトライを無効にします。手動対応が必要になり、独自のリトライロジックが必要なアプリでエラー処理を完全に制御できます。
  • retry-interval: リトライ間隔を制御します(デフォルト: 8000ms)。すばやい復旧とサーバー負荷のバランスを取れます。
自動リトライ(デフォルト)html
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
リトライを無効にするhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-retry="never"></div>
カスタムリトライ間隔(デフォルト 8000ms)html
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-retry-interval="0000"></div>

更新の動作

トークン期限切れとインタラクティブなタイムアウトへの Turnstile の対応を制御します。

  • refresh-expired: トークン期限切れ時の動作を制御します(automanualnever)。
  • refresh-timeout: インタラクティブなチャレンジのタイムアウト時の動作を制御します(automanualnever)。

メリット

  • auto 更新は訪問者体験が滑らかですが、リソース消費は増えます。
  • manual 更新は訪問者が制御できますが、操作が必要です。
  • never 更新は、すべての更新ロジックをアプリケーション側で扱う必要があります。

訪問者体験の要件に応じて、トークン期限切れとインタラクティブなタイムアウトで、異なる戦略を使えます。

期限切れトークンの自動更新(デフォルト)html
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
手動更新html
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-refresh-expired="manual"></div>
タイムアウトの自動更新(Managed モードのデフォルト)html
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-refresh-timeout="auto"></div>

カスタムデータ

チャレンジにカスタム識別子とデータを追加します。

  • action: 分析と区別向けのカスタム識別子です(最大 32 文字)。
  • cData: 検証時に返されるカスタムペイロードです(最大 255 文字)。

用途

  • アクション追跡: ログイン、サインアップ、お問い合わせフォームなどを分析上で区別します。
  • 訪問者コンテキスト: 訪問者 ID、セッション情報、その他の文脈データを渡します。
  • A/B テスト: 異なるウィジェット設定やページバリエーションを追跡します。
  • 不正検知: リスク評価向けに追加の文脈を含めます。
カスタム action 識別子を追加するhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-action="login"></div>
カスタムデータペイロードを追加するhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-cdata="user-cdata"></div>

フォーム連携

Turnstile と HTML フォームの連携方法を設定します。

有効にすると、Turnstile は検証トークン付きの隠し <input> 要素を自動作成します。ほかのフォームデータと一緒に送信されるため、サーバー側検証が簡単になります。

  • response-field: トークン付きの隠しフォームフィールドを作成するかどうかを決めます(default: true
  • response-field-name: 隠しフォームフィールドのカスタム名です(default: cf-turnstile-response

メリット

  • 自動フォーム連携では、フォーム送信時にトークンが含まれ、追加の JavaScript は不要です。
  • フィールド名をカスタムすると、既存フォームフィールドとの衝突を避けやすくなります。
  • レスポンスフィールドを無効にすると、複雑なフォームでもトークン処理を完全に制御できます。
レスポンスフィールド名をカスタムするhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-response-field-name="turnstile-token"></div>
レスポンスフィールドを無効にするhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-response-field="false"></div>

設定リファレンス一覧

JavaScript の Render パラメーター Data 属性 説明
sitekey data-sitekey すべてのウィジェットにサイトキーがあります。このサイトキーは対応するウィジェット設定に結び付き、ウィジェット作成時に作られます。
action data-action 同一サイトキーのウィジェットを分析上で区別するための顧客側の値です。検証時に返されます。_- を含む英数字で、最大 32 文字です。
cData data-cdata チャレンジの発行から検証まで顧客データを付けられるペイロードです。検証時に返されます。_- を含む英数字で、最大 255 文字です。
callback data-callback チャレンジ成功時に呼び出される JavaScript コールバックです。検証可能なトークンが渡されます。
error-callback data-error-callback エラー時(ネットワークエラーやチャレンジ失敗など)に呼び出される JavaScript コールバックです。クライアント側エラー を参照してください。
execution data-execution ウィジェットのトークン取得タイミングを制御します。render(デフォルト)または execute です。詳細は 実行モード を参照してください。
expired-callback data-expired-callback トークンが期限切れになり、ウィジェットをリセットしないときに呼び出される JavaScript コールバックです。
before-interactive-callback data-before-interactive-callback チャレンジがインタラクティブモードに入る前に呼び出される JavaScript コールバックです。
after-interactive-callback data-after-interactive-callback チャレンジがインタラクティブモードを抜けたときに呼び出される JavaScript コールバックです。
unsupported-callback data-unsupported-callback 対象のクライアント / ブラウザーを Turnstile がサポートしていないときに呼び出される JavaScript コールバックです。
theme data-theme ウィジェットのテーマです。次の値を取れます: lightdarkauto

デフォルトは auto で、訪問者の設定を尊重します。テーマを指定すると、ライトまたはダークに固定できます。
language data-language 表示言語です。次のいずれかである必要があります: 訪問者が選んだ言語を使う auto(デフォルト)、ISO 639-1 の 2 文字言語コード(例: en)、または言語と国コード(例: en-US)。詳細は 対応言語の一覧 を参照してください。
tabindex data-tabindex アクセシビリティ向けの Turnstile iframe の tabindex です。デフォルト値は 0 です。
timeout-callback data-timeout-callback インタラクティブなチャレンジが表示されたが、制限時間内に解けなかったときに呼び出される JavaScript コールバックです。コールバックはウィジェットをリセットし、訪問者が再度チャレンジを解けるようにします。
response-field data-response-field レスポンストークン付きの input 要素を作成するかどうかを制御する真偽値です。デフォルトは true です。
response-field-name data-response-field-name input 要素の名前です。デフォルトは cf-turnstile-response です。
size data-size ウィジェットサイズです。次の値を取れます: normalflexiblecompact
retry data-retry トークン取得に失敗したとき、ウィジェットが自動で再試行するかを制御します。デフォルトは auto で、自動リトライします。失敗時のリトライを無効にするには never にします。
retry-interval data-retry-interval retryauto のとき、retry-interval はリトライ間隔(ミリ秒)を制御します。値は 900000 未満の正の整数である必要があり、デフォルトは 8000 です。
refresh-expired data-refresh-expired トークン期限切れ時に自動更新します。automanualnever を取れます。デフォルトは auto です。
refresh-timeout data-refresh-timeout インタラクティブなチャレンジに入り、タイムアウトを観測したとき、ウィジェットが自動更新するかを制御します。auto(インタラクティブなタイムアウト時に自動更新)、manual(訪問者に手動更新を促す)、never(タイムアウトを表示)を取れます。デフォルトは auto です。Managed モードのウィジェットにだけ適用されます。
appearance data-appearance ウィジェットの表示タイミングを制御します。always(デフォルト)、executeinteraction-only です。詳細は 外観モード を参照してください。
feedback-enabled data-feedback-enabled ウィジェット失敗時に Cloudflare が訪問者フィードバックを収集することを許可します。true(デフォルト)または false です。
offlabel-show-privacy data-offlabel-show-privacy ブランド非表示の Turnstile ウィジェットでプライバシーリンクを表示します。true(デフォルト)または false です。
offlabel-show-help data-offlabel-show-help ブランド非表示の Turnstile ウィジェットでヘルプリンクを表示します。true(デフォルト)または false です。

レスポンシブデザインのウィジェットhtml
<div style="max-width: 500px;">
  <div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-size="flexible" data-theme="auto"></div>
</div>
モバイル向けコンパクトウィジェットhtml
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-size="compact" data-theme="light" data-language="en">
</div>

役に立ちましたか?