ドキュメント内を移動

タグ制御

scriptとiframeの変換仕様、除外用テンプレートタグ、YAMLルールを説明します。

対象製品
CMPガバナンスパック

制御対象

実装で変換するHTML要素はscriptiframeだけです。

要素 変換対象 主な変換
iframe 終了タグがあり、値付きのsrc属性があるもの srcdata-srcへ変更。既定属性、ドメイン別属性、ドメイン置換を適用
script 終了タグがあるもの typeなし、空のtype、JavaScript MIMEタイプをtype="text/plain"へ変更
外部script 上記に加え、値付きのsrc属性があるもの 既定属性、ドメイン別属性、ドメイン置換を適用

srctypeの属性値は、ダブルクォート、シングルクォート、クォートなしの記述を認識します。属性名とJavaScript MIMEタイプの大文字・小文字は区別しません。

変換を有効にすると、条件に合う同種タグをすべて処理します。YAMLのドメインルールは変換対象を限定するためのものではなく、ドメインの置換と属性の追加に使用します。

変換から除外する

CMPGovernancePackExcludeブロックタグで囲んだ範囲をscript変換とiframe変換の両方から除外できます。STRIGHTのスクリプトなど、同意状態を判定するために変換せず実行する必要があるコードへ使用します。

タグ名

CMPGovernancePackExclude

書式

<mt:CMPGovernancePackExclude>
  変換対象外にするHTML
</mt:CMPGovernancePackExclude>

引数・属性はありません。

使用例

<mt:CMPGovernancePackExclude>
  <script src="https://example.com/cmp.js"></script>
</mt:CMPGovernancePackExclude>

実際には、契約中のSTRIGHT環境から指定されたスクリプトを記述してください。

出力と動作

範囲内のMTMLを評価した後、その出力を変換対象から除外します。公開HTMLにはブロックタグ自体は出力されず、範囲内のHTMLだけが元の状態で出力されます。

上記の例では、scriptへtype="text/plain"を追加せず、srcや属性も変更しません。範囲外にあるscriptとiframeは、設定に従って従来どおり変換されます。

対応CMS

Movable Type、PowerCMS

注意事項

  • 除外範囲のscriptとiframeは、利用者の同意状態に関係なく実行・読み込み可能な状態で出力されます。
  • 計測、広告、動画埋め込みなど、同意前に停止すべきタグを囲まないでください。
  • STRIGHTスクリプトを囲む場合も、スクリプト自身が発行するCookieや通信が運用上許容されるか確認してください。

iframeの変換

変換前

<iframe src="https://video.example.com/embed/123"></iframe>

変換後

YAMLで属性やドメイン置換を指定していない場合は、次のようになります。

<iframe data-src="https://video.example.com/embed/123"></iframe>

ブラウザはdata-srcをiframeの読み込み先として扱わないため、STRIGHT側の連携処理がsrcへ戻すまで外部コンテンツは読み込まれません。

変換順

  1. srcからドメインを抽出します。
  2. 完全一致するドメインルールがあれば、置換先ドメインへ変更します。
  3. defaultsの属性を追加します。
  4. 完全一致するルールのelement属性を追加します。
  5. srcdata-srcへ変更します。

既存の属性と同じ属性を追加する場合は、既存値、defaultselementの値を空白で連結します。

すでにdata-srcがあるiframeにsrcもある場合は、既存のdata-srcを変換対象のsrc値で更新し、srcを削除します。data-srcだけのiframeは再変換しないため、再度処理してもdata-data-srcにはなりません。

scriptの変換

type属性がないscript

変換前:

<script src="https://tag.example.com/app.js"></script>

変換後:

<script type="text/plain" src="https://tag.example.com/app.js"></script>

JavaScript MIMEタイプのscript

変換前:

<script type="application/javascript">runTag();</script>

変換後:

<script type="text/plain">runTag();</script>

scriptでは、srcdata-srcへ変更しません。実行停止はtype="text/plain"への変更で行います。

次のJavaScript MIMEタイプをtext/plainへ変更します。

  • text/javascript
  • application/javascript
  • text/ecmascript
  • application/ecmascript

変換されないtype

type="module"は変更されません。たとえば、次のタグは実行可能なままです。

<script type="module" src="https://tag.example.com/app.js"></script>

application/ld+jsonなど、JavaScriptとして実行しないデータ記述用のtypeも変更しません。module scriptを変換から除外する目的で使用せず、除外範囲を明示する場合はCMPGovernancePackExcludeを使用してください。

YAMLの構造

iframe用とscript用のYAMLは別の設定欄へ入力します。

キー 内容
iframeまたはscript 設定欄に対応する最上位キー
defaults 値付きのsrcがある対象タグへ共通追加する属性
rules ドメイン別ルールの配列。ルールがなければ省略可能
match.domain srcから抽出したドメインと完全一致させる値
replace.domain 一致したsrc内で置き換えるドメイン。省略可能
element 一致したタグへ追加する属性。省略可能

次の例は、YAMLの処理を示すために標準のclass属性と例示用ドメインを使用しています。STRIGHT固有の属性を示す例ではありません。

iframe:
  defaults:
    class: consent-controlled
  rules:
    - match:
        domain: video.example.com
      replace:
        domain: privacy-video.example.com
      element:
        class: video-service

この例では、対象iframeにconsent-controlledを追加し、ドメインが一致する場合は置換後のドメインとvideo-serviceを追加します。既存のclassがある場合は、既存値の後ろへ追加されます。

ドメイン判定

  • http://https://または//から始まるURLでは、ホスト部分をドメインとして取得します。
  • ポート番号がある場合は、ポート番号を含む値で一致させる必要があります。
  • 比較は文字列の完全一致で、大文字・小文字を同一視する処理はありません。
  • //example.com/pathのようなプロトコル相対URLにもドメインルールを適用します。
  • 相対URLではドメインルールを適用できませんが、タグ自体の基本変換は行われます。

CMP同意前と同意後

状態 CMSが出力する状態 必要な処理
同意前 iframeはdata-src、対象scriptはtext/plain 実行・読み込みさせない
対象区分へ同意後 CMSの出力自体は変わりません STRIGHT側の連携処理で対象タグを有効化する
拒否または判定不能 無効状態のまま 有効化しない

同意後の有効化処理はプラグイン本体に含まれません。

注意事項と制限事項

  • iframe</iframe>script</script>まである記述が対象です。
  • inline scriptにはsrcがないため、YAMLのdefaultsとドメイン別elementは適用されません。typeの変換だけが行われます。
  • YAMLで追加する属性名と属性値はHTMLへそのまま挿入されます。信頼できる管理者だけが設定し、クォートなどを含む値は使用しないでください。
  • 設定画面では、YAML構文、最上位キー、defaultsrules、各ルールの基本構造、属性名を検証します。エラーがある設定はページ生成時に空として扱われます。
  • YAMLの属性名として使用できない文字を含むキーは追加しません。
  • linkimgvideoaudioobjectembedなどは変換しません。
  • Cookieを発行するタグを自動検出する機能はありません。