訪問者からのデータ削除リクエストに対応し、GDPR の削除権に準拠する方法を学んでください。
削除権を理解する
RTBF とは何か
GDPR第17条による忘れられる権利(RTBF)により、個人は以下の場合に個人データの削除をリクエストできます:
- 元の目的でデータが不要になった
- 同意が取り消された
- データが違法に処理された
- 法的義務が削除を要求している
- 個人が処理に異議を唱えている
アナリティクスに適用される場合
訪問者は自分のアナリティクスデータの削除をリクエストできます:
- ページビューとセッション履歴
- イベント追跡データ
- 特定されたユーザープロフィール
- 収益属性データ
削除リクエストを受け取る
リクエストチャネル
以下を通じてリクエストを受け付けます:
- メール([email protected])
- サイト上のウェブフォーム
- 郵送
- 対面(該当する場合)
必要な情報
リクエストを処理するには、以下が必要です:
- 身元確認
- リクエストされた削除の範囲
- ユーザーが持つ識別情報
リクエストフォームの例
<form action="/privacy/erasure" method="POST">
<h2>データ削除リクエスト</h2>
<label>メールアドレス(確認用)</label>
<input type="email" name="email" required>
<label>ユーザーID(わかっている場合)</label>
<input type="text" name="user_id">
<label>削除すべきデータはどれですか?</label>
<select name="scope">
<option value="all">すべてのデータ</option>
<option value="analytics">アナリティクスデータのみ</option>
<option value="account">アカウントとアナリティクス</option>
</select>
<label>追加情報</label>
<textarea name="details"></textarea>
<button type="submit">リクエストを送信</button>
</form>
リクエストを処理する
ステップ1:身元を確認する
削除の前に、リクエスト者を確認してください:
// 検証プロセスの例
async function verifyIdentity(email, userId) {
// オプション1:確認メールを送信
await sendVerificationEmail(email, {
action: 'data_deletion',
token: generateSecureToken()
});
// オプション2:既知のユーザーと照合
const user = await findUserByEmail(email);
if (user && user.id === userId) {
return { verified: true, user };
}
return { verified: false };
}
ステップ2:データを識別する
リクエスト者に関連するすべてのデータを見つけます:
ダッシュボード経由:
訪問者が識別されている場合(メールまたはユーザーIDをトラッカーに渡した場合)、訪問者プロフィール(/analytics/profiles)を開き、名前またはメールで検索して、その人のプロフィール、セッション、イベントを確認してください。
API経由: REST API(Proプラン以上)は、ウェブサイトの訪問者レコードをリスト表示して、対応するデータを特定できます:
# ウェブサイトの訪問者データを取得
curl -X GET "https://api.zenovay.com/api/external/v1/analytics/{websiteId}/visitors" \
-H "X-API-Key: zv_YOUR_API_KEY"
ステップ3:データを削除する
Zenovayは現在、個々の訪問者のアナリティクスレコードを削除するセルフサービスツールを提供していません。特定の訪問者または特定されたユーザーの検証済みリクエストに対応するには、[email protected]に連絡し、ウェブサイトと識別子(訪問者ID、特定されたユーザーID、またはトラッカーに渡したメール)を提供してください。Zenovayチームはあなたに代わって削除を実行します。
個々の訪問者またはユーザーデータを削除するための公開APIエンドポイントはありません – REST APIは訪問者レコードの読み取り専用です。
リクエストがあなた自身のZenovayアカウント(および関連する個人データ)の削除である場合、自分で行うことができます:プロフィール(/profile)を開き、アカウント削除を選択して確認します。これはあなたのアカウントを永久に削除し、接続されたシステム全体に削除を伝播させます。
ステップ4:完了を確認する
// リクエスト者に確認を送信
await sendEmail(requester.email, {
subject: 'データ削除完了',
body: `
データ削除リクエストが処理されました。
リクエストID: ${request.id}
完了: ${new Date().toISOString()}
削除されたデータ:
- ページビュー履歴
- イベント追跡データ
- セッション記録
- ユーザープロフィールデータ
このアクションは永久的で取り消せません。
`
});
削除されるもの
削除に含まれるもの
| データタイプ | 削除 |
|---|---|
| ページビュー | ✓ |
| イベント | ✓ |
| セッションデータ | ✓ |
| セッション記録 | ✓ |
| ヒートマップ寄稿 | ✓ |
| ユーザープロフィール | ✓ |
| 収益データ | ✓ |
| カスタムプロパティ | ✓ |
含まれないもの
| データタイプ | 理由 |
|---|---|
| 集計統計 | 匿名化、個人データではない |
| 監査ログ | 法的要件 |
| 請求書レコード | 財務コンプライアンス |
削除を実行する
単一の訪問者または特定されたユーザー
[email protected]にメールを送信し、ウェブサイトと削除したい識別子(訪問者ID、特定されたユーザーID、またはトラッカーに渡したメール)を提供してください。Zenovayチームはあなたのアカウントに対してリクエストを確認し、削除を実行してから確認を返します。
一括削除
複数の人を対象とした一括削除リクエストの場合、完全なリストを[email protected]に送信してください。現在、ダッシュボードにセルフサービスの一括削除ツールはありません。
タイムラインの要件
GDPR期限
| アクション | 期限 |
|---|---|
| リクエストを確認 | 迅速に(3日以内推奨) |
| 削除を完了 | 30日以内 |
| 必要に応じて延長 | +60日(通知が必須) |
リクエスト追跡
// 削除リクエストを追跡
const deletionRequest = {
id: generateId(),
requester_email: '[email protected]',
user_id: 'user_123',
received_at: new Date(),
acknowledged_at: null,
completed_at: null,
status: 'pending'
};
// 確認時に更新
deletionRequest.acknowledged_at = new Date();
deletionRequest.status = 'acknowledged';
// 完了時に更新
deletionRequest.completed_at = new Date();
deletionRequest.status = 'completed';
エッジケースに対処する
ユーザーが複数の識別子を持っている
// リンクされたすべての識別子を検索
const user = await findUser(email);
const allIdentifiers = {
user_id: user.id,
visitor_ids: user.visitor_ids,
emails: user.emails,
device_ids: user.device_ids
};
// 関連するすべてのデータを削除
for (const visitorId of allIdentifiers.visitor_ids) {
await deleteVisitorData(visitorId);
}
await deleteUserData(user.id);
匿名訪問者のリクエスト
訪問者が特定されていない場合:
- 持っている識別情報をリクエスト
- 以下を提供できるか確認:
- Cookie値
- デバイスフィンガープリント
- 特定の訪問時刻
- 特定できない場合、データは既に匿名化されていることを説明
第三者データ
データが第三者と共有されている場合:
- 第三者を特定
- 削除リクエストを転送
- 第三者による削除を確認
- チェーンを文書化
削除の例外
拒否できる場合
GDPRは以下の場合に拒否を許可します:
- 法的主張のためにデータが必要
- 法的保持義務
- 公共の利益上の理由
- 言論の自由権の行使
拒否する方法
[リクエスト者へ]
[日付]付けのデータ削除リクエストを受け取りました。
残念ながら、以下の理由からこのリクエストに応じることができません:
[ ] 進行中の法的手続のためこのデータを保持する必要があります
[ ] このデータを保持する法的義務があります
[ ] このリクエストは明らかに不当または過度です
この決定に同意しない場合、監督当局に苦情を申し立てる権利があります。
よろしくお願いします
[あなたの会社]
オートメーション
削除リクエストの取り込みエンドポイント
Zenovayは削除リクエストウェブフックを発行しません。独自のフォームやヘルプデスクを通じて削除リクエストを収集する場合は、あなた側の取り込みエンドポイントに接続して、各リクエストがログに記録され、自動的にチケット化されるようにしてください:
// 独自の取り込みエンドポイントを設定
app.post('/privacy/deletion-intake', async (req, res) => {
const { user_id, email, request_id } = req.body;
// リクエストをログ
await logDeletionRequest({
request_id,
user_id,
email,
received_at: new Date()
});
// 内部ワークフローをトリガー
await createDeletionTicket({
user_id,
email,
deadline: addDays(new Date(), 30)
});
res.status(200).json({ received: true });
});
スケジュール済みクリーンアップ
非アクティブなユーザーの削除を自動化:
// 毎日実行
async function cleanupInactiveUsers() {
const inactiveUsers = await findUsersInactiveFor(365); // 1年
for (const user of inactiveUsers) {
await sendNotification(user.email,
'ログインしない限り、30日後にデータを削除します');
scheduleForDeletion(user.id, 30); // 日
}
}
ドキュメンテーション
記録を保持する
以下の記録を保持してください:
| レコード | 保持期間 |
|---|---|
| 削除リクエスト | 3年 |
| 検証証拠 | 3年 |
| 完了確認 | 3年 |
| 拒否理由 | 3年 |
削除証明書
削除の証明を提供:
データ削除証明書
リクエストID: del_abc123
受信日: 2025-01-15
完了日: 2025-01-20
リクエスト者: [email protected]
削除されたデータ:
- 1,234ページビューレコード
- 567イベントレコード
- 89セッション記録
- 1ユーザープロフィール
削除確認者: [システム/管理者]
タイムスタンプ: 2025-01-20T15:30:00Z
この証明書は、上記のデータが当社のシステムから永久に削除されたこと
を確認し、復旧することはできません。
ベストプラクティス
レスポンステンプレート
以下のテンプレートを準備:
- 確認メール
- 検証リクエスト
- 完了確認
- 拒否(理由付き)
スタッフトレーニング
チームに以下をトレーニング:
- 削除リクエストの認識
- 検証手続
- タイムライン要件
- エスカレーションプロセス
定期的な監査
定期的に確認:
- リクエスト処理時間
- 完了率
- 一般的な問題
- プロセス改善