MevvLegal のドキュメント

訪問者が「はい」と答えるまで、何も追跡しません。

MevvLegal は、訪問者が同意するまでトラッキングコードを保留します。他のプラグインがページへ直接貼り付けたタグも対象です。誰も特定せずに同意の内容を記録し、同意が撤回されたときは削除できるものを削除します。そして、サイトが実際に使っている Cookie から、プライバシーページと Cookie ページを生成します。このページでは、すべての画面、無料版と Pro 版の線引き、そして意図的にできないことを説明します。

インストール

MevvLegal には WordPress 6.0 以降と PHP 8.1 以降が必要です。それ以外の要件はなく、外部ライブラリも使いません。

  1. プラグインをアップロードして有効化します。有効化時に、匿名の同意ログ用テーブルが作成されます。
  2. MevvLegal → セットアップウィザードを開き、5 つのステップを進めてください: 事業者情報、カテゴリーとバナーのテキスト、フロントエンドのスキャン、そのスキャンから出てくる保留の提案、そして法的ページです。
  3. 結果はフロントエンド監査で確認します。目指す数値は「同意なしに実行されている第三者スクリプト: 0」です。

任意の連携が二つあります。対応するプラグインをお使いなら WP Consent API プラグイン、バナーのタイトルと本文を翻訳するなら WPML または Polylang です。

Pro 版は、無料版と並べてインストールする別のプラグインで、無料版を必須の前提として宣言しています。Pro 版が無い状態では、MevvLegal が当社のサーバーへ接続することは一切ありません。

仕組み

多くの Cookie バナーは、質問だけして、答えにかかわらずトラッキングコードを読み込みます。訪問者が「いいえ」と答えても、結局は追跡されているのです。

  1. 同意の前は、ページ上のすべてのトラッキングスクリプトが、ブラウザに解析も取得も実行もされないよう書き換えられます。そのアドレスは削除ではなく、脇へ移されます。同意があったときに、元へ戻せなければならないからです。
  2. バナーはすべての訪問者に、まったく同じバイト列として出力され、最初は非表示の状態です。表示するかどうかは、ブラウザ側のスクリプトが判断します。
  3. 訪問者が選択を行うと、その判断は訪問者自身のブラウザに書き込まれ、同意されたカテゴリーのスクリプトが解放されます。
  4. その判断は、実際に表示された文面そのものにひも付きます。カテゴリー、バナーの文面、Cookie 一覧のいずれかを変えれば、以前の同意は無効になり、あらためて質問が表示されます。
  5. 訪問者があとから同意を撤回した場合、一覧に登録されている Cookie は可能な範囲で削除され、ページが再読み込みされます。すでに動いていたものを、そのまま走らせ続けないためです。

サーバーが訪問者ごとにページを変えることはありません。フロントエンドで Cookie を読むことも、セッションを確認することも、ログイン状態を調べることもありません。訪問者ごとに HTML を変えるバナーは全ページキャッシュを壊します。そしてそのキャッシュの裏側では、最初の訪問者のページが、黙ってすべての人に配信されてしまいます。

スクリプトの読み込みが完全に失敗した場合、バナーは表示されないままそして保留中のスクリプトも解放されません。失敗したときの状態は「何も追跡されない」であって、「すべて追跡される」ではありません。

スクリプトを保留する

仕組みは三つあります。トラッキングコードが WordPress のページに到達する経路が、三通りあるからです。

WordPress が読み込むスクリプト
ハンドルによって保留スクリプトのリスト上のカテゴリーに割り当てられます。MevvLegal はブラウザーがただのテキストとして扱うようにタグを書き換え、アドレスを src の外に移します。
ご自身で書いたタグ
取り決めを手書きで示します。スクリプトに type="text/plain" とカテゴリー属性を付けるか、iframe のアドレスを src ではなく保留用の属性に入れてください。
他のプラグインが直接出力するタグ
一部のプラグインはトラッカーをページに直接出力するため、通常の仕組みでは見つけられません。それらは代わりにアドレスの断片で照合され、他のプラグインが出力するタグのリストで扱われます。

三つ目の例は、机上の話ではありません。実際に稼働中のストアで、Google Listings & Ads がどのフィルターも届かない優先度で Google Ads のタグを出力しており、ブロックできていると信じていたバナーの下で、同意のないマーケティング Cookie が書き込まれていました。

保留したスクリプトを解放するには、属性を編集するだけでは足りず、要素そのものを差し替える必要があります。ブラウザがすでにテキストとして解析したスクリプトは、属性を何度書き換えても二度と実行されません。実行されるのは、新たに作った要素だけです。スクリプト以外の要素 — iframe や画像 — は、アドレスを戻すだけで済みます。

三つ目の一覧が空のあいだは、ページのバッファリングは一切行いません。他のプラグインと並んだ出力バッファリングは、白い画面を招く原因として最もよく報告されるものの一つです。そのため、実際に捕まえるものがあるときにだけ有効になります。

MevvLegal は自分の仕事の後始末もします。アドレスは退避済みに見えるのにカテゴリー属性を失っているタグは、私たちのあとで別のプラグインが書き換えたものです — そのままではブラウザーが実行してしまいます。これらは検出されて再び保留され、監査画面で中途半端なまま(「警告」)として数えられます。

バナー

設定はMevvLegal → Cookie 同意にあり、タブの集まりではなく 1 つの長いフォームになっています。

Cookie バナー
表示の有無、タイトル、本文、そして上下どちらに置くか。本文を変えるとポリシーのバージョンが変わり、全員にあらためて質問が表示されます。これは副作用ではなく、意図した動作です。
バナーの外観
六つの値: バナーの背景、文字色、ボタンの色、ボタンの文字色、角丸、最大幅。コントラストが WCAG の基準を下回ると警告が出ますが、保存はできます。
カテゴリー
必須 (常に有効で、無効にできません)、環境設定、統計、マーケティング。
Cookie 設定へのリンク
フッターに置けるショートコードです。訪問者はバナーを開き直して、考えを変えられます。

拒否は、同意と同じ手軽さです。両方のボタンは同じクラスを持ち、拒否が先に出力されます。色の設定は一つで、両方に適用されます。拒否ボタンだけを目立たなくすることはできません。拒否しにくくして得た同意は、自由な意思による同意とは言えないからです。

バナーはダイアログですが、背後のページを操作不能にすることも、フォーカスを閉じ込めることもありません。Escape キーは詳細パネルを閉じるだけで、バナー自体は閉じません。決めていない状態を、同意とみなすのも拒否とみなすのも、どちらも誤りだからです。

Cookie の一覧

一覧はカテゴリーごとに用意され、Cookie 一つにつき一行です。名前、保存先、提供者、保存期間、利用目的を記します。ほかのすべては、この一覧の上に成り立っています。Cookie ポリシーのページはここから生成され、同意が撤回されたときに削除してよいものを示すのも、この一覧です。

MevvLegal には、既定の行が一つもありません。あらかじめ入力された Google Analytics も、Meta Pixel もありません。実際には行っていない処理を宣言することは、宣言が足りないことよりも悪いからです。

記憶をたよりに書く必要はありません。Cookie 観測は、実際の訪問者のブラウザーにどの Cookie が現れるかを — その一部を、選んだ割合で — 測定し、候補として提示します。

読み取るのは名前だけです。Cookie の値を読むことも、送ることも、保存することもありません。また、見つかった名前が自動で一覧に書き込まれることもありません。提供者、保存期間、目的を知っているのはお客様だけであり、それを勝手に作れば、お客様自身のポリシーページに事実でない記述を載せることになります。

地域ごとのルールと GPC

既定では無効です。有効にすると、三つの区分がそれぞれ異なる動作をします。

EU/EEA、英国、トルコ
常にオプトイン。これは設定項目ではなく、緩めることはできません。
米国
オプトイン、またはオプトアウト。オプトアウトではスクリプトが動作し、バナーには拒否できる旨が表示されます。
それ以外の地域、および地域を判定できない訪問者
オプトイン、または制限なし。制限なしではスクリプトが動作し、バナーは表示されません。

地域は、ブラウザのタイムゾーンから判定します。IP 検索も、国コードのヘッダーも、位置情報サービスも使わず、訪問者の端末には何も書き込みません。よくある手法は、訪問者の IP を第三者の検索サービスへ送るというものですが、それ自体が情報の開示にあたります。少なくとも競合製品の一つでは、それが暗号化されない HTTP で行われています。

この選び方には、正直に認めるべき代償があります。タイムゾーンは国ではありません。米国の州を区別できないため、州単位のルールはありません。そして判定できない場合 — 値が空、UTC、認識できない名前 — はすべてオプトインの区分に入ります。逆を既定にすれば、タイムゾーンを報告しなかっただけの EU の訪問者に、同意のないマーケティング Cookie を書き込むことになり、しかもどこにもエラーは表示されません。

Global Privacy Control は常に尊重され、設定項目はありません。ブラウザがこれを送ってきた場合、オプトアウトや制限なしの区分はオプトインへと引き締められます。引き締めるだけで、どこかでスクリプトを解放することはありません。

GPC が同意の記録に変えられることはありません。バナーは閉じられず、何も保存されません。ブラウザの設定は、説明を受けたうえでの同意ではないからです。そしてバナーを閉じてしまえば、その訪問者から同意する機会を奪うことになります。Do Not Track は意図的に尊重していません。一部のブラウザは利用者が選んでいないのに既定で送信しており、誰も選んでいない既定値を異議とみなすことは、沈黙を同意とみなすのと表裏一体だからです。

オプトアウトや制限なしの区分では、同意の記録は書き込まれず、ログにも何も送られません。書き込んでしまえば、同意を証明すべき記録が、事実でない記述に変わってしまいます。訪問者が実際に行った選択は、常に地域ごとのルールより優先されます。

同意が撤回されたときの Cookie の削除

これに関する設定項目はありません。訪問者が同意を撤回すると、一覧に記載された名前が、ブラウザの許す範囲で削除されます。対象は Cookie、ローカルストレージ、セッションストレージで、考えられるすべてのパスとドメインにわたって行われます。末尾のアスタリスクはワイルドカードとして機能します。削除はページの再読み込みより前に実行されます。再読み込みのあとでは、何かが動く保証がないからです。

必須カテゴリーには手を触れず、訪問者自身の同意の記録にも手を触れません。

ブラウザから削除できない Cookie が二種類あり、どのプラグインにもそれは変えられません。HttpOnly の Cookie は、定義上 JavaScript からは見えません。そもそも存在が見えないため、期限切れの Cookie を上書きすることもできません。そして別のドメインで設定された Cookie — doubleclick.net や facebook.com など — は、お客様のサイトで動くスクリプトからは削除できません。ブラウザのドメイン分離がそれを禁じています。サードパーティのマーケティング Cookie の大半が、これに当たります。

ですから MevvLegal は「すべて削除しました」とは言いません。スクリプトは、何を試み、何が残っているかを報告し、管理画面はその限界をありのままに表示します。計測していないことを主張することは、この種の製品において最も高くつく誤りです。

サードパーティ Cookie に対する本当の答えは、削除することではなく、そもそも書き込ませないことです。スクリプトの保留は、そのためにあります。削除はそれを補うものであって、置き換えるものではありません。また、削除できるのは一覧に記載された名前だけです。必須以外のカテゴリーの一覧が空であれば、同意を撤回してもスクリプトは止まりますが、すでに端末にある Cookie は残ります。

同意の記録

二つの部分に、意図的に分けています。

訪問者の端末側
訪問者の判断、その対象となるポリシーのバージョン、そして判断した時刻。Cookie ではなく、訪問者自身のブラウザに保存されます。
お客様のサーバー側
保持するのは件数だけです。日付ごと、ポリシーのバージョンごと、選択の組み合わせごとに、それが何回あったか。IP アドレスも、訪問者 ID も、ユーザー ID も、個人単位の行もありません。それと並べて、これまでに表示したすべてのポリシー文面を保管します。

個人単位で同意を証明するには、すべての訪問者に永続的な識別子を与えることになります。以前の処理への同意を証明するために、それ自体には同意のない、まったく新しい処理を始めることになるのです。この製品はそれを行いませんし、行っているふりもしません。

その限界は、画面にも、書き出したファイルにも、ソースコードにも正直に記してあります。この件数は個人単位で一意ではなく、悪意あるリクエストによって水増しされ得ます。これは訪問者数のカウンターではありません。どの文面に対して、いくつの同意の意思表示がなされたかの記録です。

同意アナリティクスはそれらのカウンターを読み取ります: 全面的な同意・部分的な同意・全面的な拒否の割合、カテゴリー別の内訳、ポリシーのバージョン間の比較、そして日ごとの推移です。Pro では、カウンターとポリシー本文、さらに例の正直な限界を述べた一文を最終行に含む CSV 書き出しが加わります。

法的ページ

お客様自身の事業者情報と Cookie 一覧から生成される、六つのテンプレート:

無料
Gizlilik Politikası ve KVKK Aydınlatma Metni (プライバシーポリシーおよび KVKK 開示文書) · Çerez Politikası (Cookie ポリシー)
Pro
Kullanım Koşulları (利用規約) · Mesafeli Satış Sözleşmesi (距離販売契約) · İade ve Değişim Koşulları (Cayma Hakkı) (返品・交換条件 (撤回権)) · Teslimat ve Kargo Koşulları (配送・輸送条件)

Cookie ポリシーを無料にしているのは意図的です。ポリシーの無いバナーには、意味がないからです。

トルコ語版と英語版があります。英語版は翻訳ではありません。GDPR、ePrivacy 指令、消費者権利指令に沿って書かれた別の文書です。トルコ語版は KVKK とトルコの距離販売規則に沿って書かれているためです。英語版の Mesafeli Satış Sözleşmesi (距離販売契約) は存在せず、その理由も画面に説明されています。これはトルコの規則が義務づける文書であり、EU 法には同等の義務が無いからです。

こちらでは知りようのない条項は、埋めずに角括弧のまま残します。準拠法、管轄裁判所、EU 域内の代理人、保存期間、返品送料の負担者などです。推測で埋めた条項は、空欄のままの条項より悪いからです。

生成されるのは、ごく普通の WordPress の固定ページです。カスタム投稿タイプも、ショートコードの包みも、ロックもありません。自由に編集でき、プラグインを削除しても残ります。上書きは必ず明示的な選択であり、必ず先にリビジョンが保存されます。

公開済みのページが、いま生成される内容から食い違っている場合は画面が知らせ、差分を表示で 1 行ずつ違いを確認できます。公開中の Cookie ポリシーが現在の有効なカテゴリーと一致しているかも確認されます。

これらの文書は法的助言ではありません。プラグインのすべての画面に、その旨が記されています。

データ主体からの請求

ショートコードで、任意のページに請求フォームを設置できます。訪問者はメールアドレスを入力し、データの写しを求めるか、削除を求めるかを選びます。どちらもあらかじめ選択されてはいません。片方に印を付けておけば、削除の選択から遠ざける誘導になってしまうからです。

  1. フォームが送信されます。ログインしていない訪問者にも開かれています。この権利は、会員であるかどうかに左右されないからです。
  2. WordPress が確認用リンクをメールで送ります。クリックされるまで、何も起こりません。
  3. 請求への対応は、WordPress 本体の画面である ツール → 個人データのエクスポートまたは個人データの消去から行います。確認済みの請求が何件待っているかは、MevvLegal の画面に表示されます。

訪問者への応答は、何が起きたかにかかわらず常に同じ一文です。そのアドレスの記録が無い場合も同じです。それ以外の返し方をすれば、あるアドレスが登録されているかどうかを明かしてしまうからです。

エクスポートと消去を行うのは WordPress コアであり、MevvLegal ではありません。MevvLegal は独自のエクスポーターも消去処理も登録しません。個人データを保存していないからです。書き出しの中に空の項目があっても、それは情報ではなく雑音です。

このフォームには、意図的に nonce を置いていません。nonce は全ページキャッシュの裏側で失効し、フォームもろとも黙って動かなくなります。権利を行使するための窓口が静かに止まることは、ここでは許容できない失敗です。悪用への対策は、ハニーポットの項目、サイト全体での 1 時間あたりの上限、そして WordPress 自身の重複防止で行います。

フォームには但し書きが添えられています。法令上の保存義務がある記録 — 請求書や商業帳簿など — は、その期間が終わるまで保持される場合があること、そしてどの記録がなぜ保持されるのかをお知らせすることです。

フロントエンドの検査

フロントエンド監査は自サイトのトップページを取得し、実際に何があるかを数えます: script タグの数、保留されている数、保留されずに実行されている第三者のものの数、インラインの数、そもそもスクリプトではないデータブロックの数、そして iframe についても同じです。

重要なのは保留されていない「第三者」の行です。これがゼロになると画面がそう表示します: 同意なしに実行されている第三者スクリプト: 0。この数字こそが本製品の実際の約束です。

同じ画面から、認識されたトラッカーを保留ルールに変えたり、見つかった Cookie の名前を一覧へ書き込んだりできます。

自動で有効化されるものはありません。誤ったスクリプトを保留すれば、サイトは静かに壊れます。決済事業者の 3-D セキュアのスクリプト、配送連携、ライブチャット。ページは開くのに、ボタンが何もしない状態です。ですから、提案は示すだけで、承認するのはお客様です。そして保留ルールの解除は、どのエディションでも、ライセンスの有無にかかわらず、無料かつ無条件で行えます。

スキャンは毎回、ページキャッシュを迂回します。そうしなければ、何時間も前に生成された HTML を読んで、それを現在の状態だと告げてしまうからです。

無料版と Pro 版 — 決して曲げない原則

このプラグインには、ライセンス処理クラスの冒頭に書かれた、ただ一つの不変条件があります:

Cookie バナーとスクリプトの保留が、ライセンスに縛られることは決してありません。ここでの原則は、当社の他の製品よりも厳格です。他の製品なら、ライセンスが切れて失うのは見た目です。ここで失われるのは法令遵守そのものです。ライセンスが切れたサイトでバナーが黙ってしまえば、そのサイトは訪問者に無断で分析やマーケティングの Cookie を書き始めます。そして制裁金を受けるのは、プラグインの提供者ではなくデータ管理者です。支払いの問題によって顧客を法的な危険にさらす製品は、販売できる製品ではありません。

実際には次のようになります。制限されるのは新しい設定だけです。新しいカテゴリーの定義、新しい法的テンプレートの生成、Cookie 表への行の追加などです。すでにある設定は、そのまま変わらず動き続けます。

永続的に無料で、フロントエンドの経路にライセンス確認が一切ないもの:

  • Cookie バナーと、その色・角丸・幅の設定
  • スクリプトの保留 — 三つの仕組みすべて
  • 訪問者のブラウザに保存される同意の記録と、匿名の同意ログ
  • 同意の分析画面
  • フロントエンドの検査、Cookie の観測、認識されたトラッカーを保留ルールに変える操作
  • 保留ルールの解除、およびコンセントモードや地域ルールを無効にする操作 — 無条件で可能
  • 同意が撤回されたときの Cookie の削除
  • WP Consent API との連携、および GPC
  • データ主体からの請求フォーム
  • セットアップウィザード、文面の差分表示、多言語のバナー文面
  • プライバシーポリシーと Cookie ポリシーのテンプレート、および生成されたページの編集

Pro 版で加わるもの:

  • Cookie 一覧、スクリプトの対応付け、直接出力タグの対応付けの編集
  • EC 向けの四つのテンプレート: 利用規約、距離販売契約、返品と撤回、配送と輸送
  • コンセントモードを有効にする操作と、地域ルールを有効にする操作
  • 同意ログの CSV 書き出し

ライセンスが失効したとき:

  • 法令遵守には影響しません。バナー、スクリプトの保留、同意の記録は動き続けます。
  • Cookie の一覧は消去されず、保持されます。空にしてしまえば、公開中のポリシーが一夜にして誤りになるからです。
  • 既存の保留ルールは、そのまま保留し続けます。一覧の入力欄が読み取り専用になるだけです。
  • すでに生成した法的ページは、公開されたまま、編集できるまま残ります。
  • コンセントモードと地域ルールは、すでに有効であればそのまま有効です。制限されるのは有効にする操作だけです。無効にすることと、区分をオプトインへ引き締めることは、常に行えます。

当社のサーバーに接続できない場合でも、有効なライセンスは最後に成功した確認を根拠に 7 日間は動作し続けます。ただし、一度でも確認に成功していた場合に限ります。

うまく動かないとき

監査に「中途半端なまま(「警告」)」と表示される
別のプラグインが、MevvLegal のあとに同じ script タグを書き換え、保留を外しています。これは理屈ではなく実際に計測された事例で、あるホスティング支援プラグインが稼働中のサイトでまさにこれを行っていました。MevvLegal は可能なかぎり遅い段階でフィルターを適用し、検知できたものは修復します。それでも行が残る場合は、そのスクリプトを読み込んでいるプラグインを無効化して、もう一度スキャンしてください。
バナーを導入したのにトラッカーが動いている
キューに入れられず、ページに直接出力されています。そのアドレスの断片を他のプラグインが出力するタグに追加してください — この種のものを捕まえるのはそのリストです。
検査画面に、もう存在しない設定が表示される
本来そうはならないはずです。スキャンは毎回ページキャッシュを迂回します。それでも訪問者から見たフロントエンドが古いままなら、全ページキャッシュを消してください。LiteSpeed なら wp litespeed-purge all です。
地域ルールが効いていないように見える
キャッシュや最適化のプラグインがスクリプトを遅延させ、順序を入れ替えているため、地域の判定がバナーの判断より後に届いています。地域判定のスクリプトが読み込まれた時点でルールは適用し直されますが、それでも解決しない場合は、MevvLegal のスクリプトの遅延読み込みをやめてください。
バナーがまったく表示されない
バナーが見つからない場合、監査はページ上にバナーは見つかりませんでした。と表示します。多くの場合、テーマが body 直後の標準フックを呼び出していません — そのためのフッターでの代替手段があります。バナーが出力されないときは、保留されたスクリプトも決して解放されないことを覚えておいてください。
直接出力タグの対応付けを有効にしたら白い画面になった
出力バッファリングを有効にするのは、この一覧だけです。同じくバッファリングを行う別のプラグインと重なることが、既知の原因です。まず一覧を空にして確認し、そのうえでアドレスを一つずつ戻してください。
同意ログが空のまま
テーブルは有効化時に作成されますが、プラグインの更新では有効化処理は実行されません。管理画面を開くたびに再確認されるため、通常は一度管理画面を訪れれば十分です。あわせて、ログが有効になっているかも確認してください。
保留ルールを追加したら、ボタンや決済の手順が動かなくなった
トラッカーではないものを保留してしまっています。そのルールを解除してください。解除は無料、無条件、そして即座に反映されます。
コンセントモードを有効にしたら、検査がゼロと表示しなくなった
これは想定どおりで、設定項目自体にも明記されています。コンセントモードが有効なら、Google のタグは動作します。

できないこと

  • HttpOnly の Cookie と、別のドメインで設定された Cookie はブラウザから削除できません。どのプラグインにも、これは変えられません。
  • 削除されるのは、一覧に記載された名前だけです。一覧が空なら、何も削除されません。
  • Cookie の観測が読むのは名前だけで、値は読みません。見つかった Cookie を自動で一覧へ書き込むこともなく、その提供者・保存期間・目的を勝手に作ることもありません。
  • 保留ルールが自動で有効になることはなく、認識できない第三者に対してカテゴリーが提案されることもありません。
  • 地域はブラウザのタイムゾーンから判定します。タイムゾーンは国ではなく、米国の州は区別できず、判定できない場合はすべてオプトインになります。
  • EU/英国/トルコの区分は緩められません。そのための設定項目はありません。
  • GPC は無効にできず、Do Not Track は尊重しません。
  • 個人単位で同意を証明することはできません。件数は匿名で、個人単位では一意ではなく、水増しされ得ます。
  • その同意がどの言語で行われたかは、ログからは分かりません。
  • MevvLegal は独自のエクスポート処理も消去処理も持ちません。その作業を行うのは WordPress コアです。
  • コンセントモードで例外となるのは、Google のタグローダーだけです。ほかに解放されるものはありません。
  • 検査は HTTP でトップページを取得します。サーバー上でヘッドレスブラウザを動かすわけではないため、見えるのはそのページが出力した内容だけです。
  • 法的文書は静的です。現時点では正しい内容ですが、法律が変わっても自動では更新されません。公開中のページがテンプレートから離れたことは知らせますが、テンプレート自体が古びたことは知らせられません。
  • これらの文書は法的助言ではありません。
  • プラグインを削除しても、何も消去されません。同意ログのテーブルと設定は、そのまま残ります。

そして最も大切なこと。どのプラグインも、お客様を法令に適合させることはできません。この製品が行うのは、スクリプトを保留し、同意を記録し、お客様が入力した内容からページを生成することです。その入力内容は、依然としてお客様の責任です。ウィザードの最後の画面は、祝いの言葉ではなく、まさにそのことを伝えます。