プライバシーポリシー・利用規約 URL セットアップ(IG Harness セットアップ編 #2)
Shudesu
Author
プライバシーポリシー・利用規約 URL セットアップ(IG Harness セットアップ編 #2)
Meta アプリを Live にするのに必須な「プライバシーポリシー URL」と「利用規約 URL」のセットアップ。ここで1時間溶かした経験があるので、最短パスと踏んだ罠を全部書く。
なぜ両方必要か
Meta は Live モードのアプリには必ず以下を要求する:
- プライバシーポリシー URL
- 利用規約 URL
- (任意だが推奨)データ削除コールバック URL
未設定だと Live 切り替え時に「プライバシーポリシーの URL が無効です」エラー。両方とも HTTPS 必須、Meta クローラーがアクセスして 200 を返すことが条件。
最短パス: Cloudflare Workers に2ページ追加
既に IG Harness Worker があれば、/privacy と /terms(または /privacy-policy)のハンドラを追加するだけ。
Hono での実装例
app.get('/privacy-policy', (c) => {
return c.html(`<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>プライバシーポリシー</title></head>
<body>
<h1>プライバシーポリシー</h1>
<p>本サービスは Instagram のメッセージ・コメント自動応答のために以下のデータを収集します:</p>
<ul>
<li>Instagram-scoped User ID (IGSID)</li>
<li>ユーザー名(公開情報)</li>
<li>メッセージ・コメントのテキスト</li>
</ul>
<p>収集データは自動応答のためにのみ使用し、第三者に提供しません。</p>
<p>削除要求: <a href="/data-deletion">こちら</a></p>
<p>最終更新: 2026-04-16</p>
</body></html>`);
});
app.get('/terms', (c) => {
return c.html(`<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>利用規約</title></head>
<body>
<h1>利用規約</h1>
<p>本サービスの利用により、ユーザーは以下に同意したものとみなします:</p>
<ol>
<li>自動応答メッセージを受信すること</li>
<li>メッセージ履歴が保存されること</li>
</ol>
<p>最終更新: 2026-04-16</p>
</body></html>`);
});
app.get('/data-deletion', (c) => {
return c.html('<h1>データ削除リクエスト</h1><p>削除希望はお問い合わせください。</p>');
});
デプロイしてから Meta Dashboard に URL を入力する。
踏んだ罠 #1: trailing slash の有無
実際のセットアップ履歴(Meta のアクティビティログから抜粋):
プライバシーポリシーURLが次に変更されました:
https://<old-worker-name>.workers.dev/privacy
→ https://<old-worker-name>.workers.dev/privacy/
→ https://<old-worker-name>.workers.dev/privacy-policy
→ https://<old-worker-name>.workers.dev/privacy/
trailing slash ありで通る時とない時がある。原因は Meta のクローラーが HTTP 3xx リダイレクト を追いきれないことがあるため。
対策: Worker のハンドラで /privacy と /privacy/ 両方に同じコンテンツを返す。
app.get('/privacy', handlePrivacy);
app.get('/privacy/', handlePrivacy);
または、Next.js / 他のフレームワークで trailingSlash 設定を明示する。
踏んだ罠 #2: プライバシー URL と利用規約 URL に同じ値を入れる
「とりあえず全部 /privacy でいいや」と両方に同じ URL を入れると、Meta が「プライバシーポリシーと利用規約は別の URL であるべき」と警告。Live 切り替えが拒否されることがある。
対策: 必ず別の URL にする。最低でも /privacy と /terms。
踏んだ罠 #3: 404 じゃなくて 5xx を返してしまう
Worker のハンドラが未 deploy のまま URL 入力すると、Worker は 404 を返す(または未定義パスに対する default レスポンス)。これはまだマシで、Worker のクラッシュで 500 を返すと Meta は認証を再試行してくれないことがある。
対策: URL 入力前に自分で curl -I https://...workers.dev/privacy で 200 が返ることを確認する。
踏んだ罠 #4: HTTPS 必須
http:// で始まる URL を入力すると即「URL が無効」。Worker は .workers.dev サブドメインで自動的に HTTPS なので問題ないが、独自ドメインで運用する場合は SSL 証明書が自動発行されているか確認。Cloudflare で管理する独自ドメインなら自動。
踏んだ罠 #5: Meta 側の DNS/クローラーキャッシュで数分遅れる
URL 変更直後に「保存」を押すと「URL が無効」エラー → 5分後に同じ URL で再保存したら通る、というパターンがある。Meta のクローラーが古い DNS レコード or 古いコンテンツをキャッシュしているっぽい。
対策: 「URL が無効」エラーが出ても慌てず、Worker 側を curl で確認した上で数分空けてから再保存。
データ削除コールバック URL
「データ削除コールバック URL」は任意だが、App Review に進む可能性があるなら設定推奨:
https://your-worker.workers.dev/data-deletion
このエンドポイントは、ユーザーが Facebook から「このアプリとの連携を削除」した時に Meta から POST される。処理は「受信した user_id のデータを自サービスから削除」すればOK。
チェックリスト
- Worker に
/privacyハンドラ実装 (trailing slash 両対応) - Worker に
/termsハンドラ実装 - Worker に
/data-deletionハンドラ実装(任意) -
curl -I https://<worker-url>/privacyで 200 を確認 - Meta Dashboard でプライバシー URL と利用規約 URL を別の値で入力
- 保存が失敗したら数分待ってリトライ
コメント (0)
コメントするにはログインしてください。