メインコンテンツまでスキップ

サブドメイン運用時の設定

広告の遷移先サイトがサブドメインを含む場合のトラッキングについて解説します。


サブドメインを含む計測とCookieのドメイン属性

サブドメインを含めてトラッキングする場合、Cookie にドメイン属性(Domain)を設定する必要があります。

「サブドメインを含む」とは

ドメインが example.comの場合、○○○.example.com のように用途やサービスごとに分けられたドメインが「サブドメイン」です。

  • 広告の着地点ページ(親ドメイン example.com) → 成果地点ページ(サブドメイン aaa.example.com)
  • 広告の着地点ページ(サブドメイン aaa.example.com) → 成果地点ページ(親ドメイン example.com)

このように、広告の遷移先が、親ドメインとサブドメインが含まれることを指します。


アフィリコード・システムの 着地点タグCookie発行ファイル は、デフォルトは 遷移先のドメイン(Cookie発行元)のみ有効 になっています。
※ドメイン属性は指定しない設定

タグ計測におけるCookieの役割: タグ計測 | Cookieについて

  • ドメイン属性を指定しない場合、Cookie は、広告遷移先のドメインにのみ有効です
  • サブドメインを含めて Cookie を有効にしたい場合は、親ドメイン を指定するドメイン属性を明示的に設定します。

上記の理由から、サブドメインを含む運用の場合、Cookie発行ファイル、もしくは着地点タグ(中間地点タグ)に 記述を追記する必要があります。

  • Cookie発行ファイルが設置できる場合:Cookie発行ファイル
  • Cookie発行ファイルが設置できない場合:着地点タグ(中間地点タグ)

Cookie発行ファイルがアップロードできる場合

具体的に追記箇所を説明します。

Cookie発行ファイル に ドメイン名を追加する箇所は、以下3箇所にドメイン名を追記します。

追記箇所(3ヵ所) サブドメイン が aaa.example.comなら、"example.com", と追記

Cookie発行ファイル:サブドメイン対応の追記箇所
<?php

if(defined("PHP_VERSION_ID"))
$version = PHP_VERSION_ID;
else
$version = 0;

$p_key = "p";
$link_keys = array(
array("cid", "CL_", "ACT_"),
array("plid", "PL_", "APT_"),
);

$p_val = isset($_GET[$p_key]) ? $_GET[$p_key] : null;

if(!ctype_alnum($p_val)) return;

foreach($link_keys as $key)
{
if(!is_array($key)) continue;

if(isset($key[0]))
{
$val = isset($_GET[$key[0]]) ? $_GET[$key[0]] : null;
}

if(!ctype_alnum($val)) continue;

$expires = time() + 63072000;
$path = "/";
$secure = true;
$samesite = "None";

if($version >= 70300)
{
$options = array("expires" => $expires, "path" => $path, "secure" => $secure, "samesite" => $samesite, "domain" => "ドメイン");
if(isset($key[1])) setcookie($key[1].$p_val, $val, $options);
if(isset($key[2])) setcookie($key[2].$p_val, "php", $options);
}
else
{
$options = $path."; SameSite=".$samesite;
if(isset($key[1])) setcookie($key[1].$p_val, $val, $expires, $options, "ドメイン", $secure);
if(isset($key[2])) setcookie($key[2].$p_val, "php", $expires, $options, "ドメイン", $secure);
}
}

Cookie発行ファイルがアップロードできない場合

Cookie発行ファイルがアップロードができない場合は、着地点タグ、中間地点タグ にドメイン属性を追記します。

参考:着地点タグ、中間地点タグの解説:タグ計測 | タグの役割りと設置箇所

  • 広告の着地点から成果地点ページまで同一ドメインの場合:着地点タグ に追記
  • 広告の着地点から成果地点ページまでに複数のドメインをまたぐ場合:着地点タグ、中間地点タグ に追記
    (LPを経由して、別ドメインのカートに遷移する場合など)

同一ドメインの遷移

着地点タグにドメイン属性を追記します。

追記箇所(1ヵ所):path=/; domain=ドメイン; SameSite=None; Secure
※例)サブドメイン が aaa.example.comなら、domain=example.com; と追記

同一ドメイン・着地点タグ:サブドメイン対応の追記箇所
<script>
window.acs_cbs = window.acs_cbs || [];
(function acsKeep(){
var PK = "p";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_", "ACT_"], gclid : ["plid", "PL_", "APT_"]};
var DKEYS = ["gclid", "gbraid", "wbraid", "msclkid", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var PDIR = "./";
var durl = "https://システムドメイン/direct.php";
function saveCookies(data){ var p = data[PK]; var out = Object.keys(LKEYS).reduce(function(ret, k){ if(k in data && data[k]) ret[k] = data[k]; return ret; }, {}); if(!p || !Object.keys(out).length) return;
var purl = PDIR + "lptag.php?p=" + p; Object.keys(out).forEach(function(k){ purl += "&" + LKEYS[k][0] + "=" + out[k]; localStorage.setItem(LKEYS[k][1] + p, out[k]); });
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; Secure"; xhr.open("GET", purl);
xhr.onloadend = function(){ if(xhr.status === 200 && xhr.response === ""){ window.acs_cbs.forEach(function(cb){ cb(); }); return; } Object.keys(out).forEach(function(k){ document.cookie = LKEYS[k][1] + p + "=" + decodeURIComponent(out[k]) + args; if(LKEYS[k][2]) document.cookie = LKEYS[k][2] + p + "=js" + args; }); window.acs_cbs.forEach(function(cb){ cb(); }); }; xhr.send(); }
var data = location.search.substring(1).split("&").reduce(function(ret, s){ var kv = s.split("="); if(kv[1]) ret[kv[0]] = kv[1]; return ret; }, {}); if(!(IMK in data)){ saveCookies(data); return; }
durl += "?im=" + data[IMK] + "&navi=" + performance.navigation.type; DKEYS.forEach(function(k){ if(!(k in data)) return; durl += "&" + k + "=" + data[k]; });
var xhr = new XMLHttpRequest(); xhr.open("GET", durl); function merge(a, b){ return Object.keys(LKEYS).reduce(function(ret, k){ if(k in b && !(k in a)) ret[k] = b[k]; return ret; }, a); }
xhr.onloadend = function(){ if(xhr.status !== 200) return; try{ var xhr_data = JSON.parse(xhr.responseText); if(PK != "p"){ xhr_data[PK] = xhr_data["p"]; } saveCookies(merge(xhr_data, data)); }catch(_){ } }; xhr.send(); })();
</script>

複数ドメインの遷移

着地点タグ、中間地点タグにドメイン属性を追記します。

追記箇所(1ヵ所):path=/; domain=ドメイン; SameSite=None; Secure
※例)サブドメイン が aaa.example.comなら、domain=example.com; と追記

複数ドメイン・着地点タグ:サブドメイン対応の追記箇所
<script>
window.acs_cbs = window.acs_cbs || [];
function acsRelay_pgt6sve2vh9w(){
var PK = "p";
var PV = "pgt6sve2vh9w";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_"], gclid : ["plid", "PL_"]};
var DKEYS = ["gclid", "gbraid", "wbraid", "msclkid", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var AURL = "https://入力した中間地点ページのURL";
var PDIR = "./";
var ATTR = "href";
var OPSL = ["^=", "=", "*="];
var OPSV = 0;
var durl = "https://システムドメイン/direct.php";
function convertURL(){ var data = document.cookie.split("; ").reduce(function(ret, s){ var kv = s.split("="); if(kv[0] && kv[1]) ret[kv[0]] = kv[1]; return ret; }, []);
var out = Object.keys(LKEYS).reduce(function(ret, k){ var lk = LKEYS[k][1] + PV; var val = data[lk] ? data[lk] : localStorage.getItem(lk); if(val) ret[k] = val; return ret; }, []); if(!Object.keys(out).length) return;
var prms = Object.keys(out).reduce(function(ret, k){ ret += "&" + k + "=" + out[k]; return ret; }, "p=" + PV);
var nodes = [].slice.call(document.querySelectorAll("[" + ATTR + OPSL[OPSV] + '"' + AURL + '"]'), 0); nodes.forEach(function(node){ var url = node.getAttribute(ATTR); if(/\?/.test(url)) url += "&" + prms; else url += "?" + prms; node.setAttribute(ATTR, url); }); }
function saveCookies(data){ var p = data[PK]; var out = Object.keys(LKEYS).reduce(function(ret, k){ if(k in data && data[k]) ret[k] = data[k]; return ret; }, {}); if(!p || !Object.keys(out).length){ convertURL(); return; }
var purl = PDIR + "lptag.php?p=" + p; Object.keys(out).forEach(function(k){ purl += "&" + LKEYS[k][0] + "=" + out[k]; localStorage.setItem(LKEYS[k][1] + p, out[k]); });
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; xhr.open("GET", purl);
xhr.onloadend = function(){ if(xhr.status === 200 && xhr.response === ""){ convertURL(); window.acs_cbs.forEach(function(cb){ cb(); }); return; } Object.keys(out).forEach(function(k){ document.cookie = LKEYS[k][1] + p + "=" + decodeURIComponent(out[k]) + args; }); convertURL(); window.acs_cbs.forEach(function(cb){ cb(); }); }; xhr.send(); }
var data = location.search.substring(1).split("&").reduce(function(ret, s){ var kv = s.split("="); if(kv[1]) ret[kv[0]] = kv[1]; return ret; }, {}); if(!(IMK in data)){ saveCookies(data); return; }
durl += "?im=" + data[IMK] + "&navi=" + performance.navigation.type; DKEYS.forEach(function(k){ if(!(k in data)) return; durl += "&" + k + "=" + data[k]; });
var xhr = new XMLHttpRequest(); xhr.open("GET", durl); function merge(a, b){ return Object.keys(LKEYS).reduce(function(ret, k){ if(k in b && !(k in a)) ret[k] = b[k]; return ret; }, a); }
xhr.onloadend = function(){ if(xhr.status !== 200) return; try{ saveCookies(merge(JSON.parse(xhr.responseText), data)); }catch(_){ } }; xhr.send(); }
if(document.readyState === "loading"){ document.addEventListener("DOMContentLoaded", acsRelay_pgt6sve2vh9w); }else { acsRelay_pgt6sve2vh9w(acsRelay_pgt6sve2vh9w); }
</script>
複数ドメイン・中間地点タグ:サブドメイン対応の追記箇所
<script>
window.acs_cbs = window.acs_cbs || [];
(function acsKeep(){
var PK = "p";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_", "ACT_"], gclid : ["plid", "PL_", "APT_"]};
var DKEYS = ["gclid", "gbraid", "wbraid", "msclkid", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var PDIR = "./";
var durl = "https://システムドメイン/direct.php";
function saveCookies(data){ var p = data[PK]; var out = Object.keys(LKEYS).reduce(function(ret, k){ if(k in data && data[k]) ret[k] = data[k]; return ret; }, {}); if(!p || !Object.keys(out).length) return;
var purl = PDIR + "lptag.php?p=" + p; Object.keys(out).forEach(function(k){ purl += "&" + LKEYS[k][0] + "=" + out[k]; localStorage.setItem(LKEYS[k][1] + p, out[k]); });
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; Secure"; xhr.open("GET", purl);
xhr.onloadend = function(){ if(xhr.status === 200 && xhr.response === ""){ window.acs_cbs.forEach(function(cb){ cb(); }); return; } Object.keys(out).forEach(function(k){ document.cookie = LKEYS[k][1] + p + "=" + decodeURIComponent(out[k]) + args; if(LKEYS[k][2]) document.cookie = LKEYS[k][2] + p + "=js" + args; }); window.acs_cbs.forEach(function(cb){ cb(); }); }; xhr.send(); }
var data = location.search.substring(1).split("&").reduce(function(ret, s){ var kv = s.split("="); if(kv[1]) ret[kv[0]] = kv[1]; return ret; }, {}); if(!(IMK in data)){ saveCookies(data); return; }
durl += "?im=" + data[IMK] + "&navi=" + performance.navigation.type; DKEYS.forEach(function(k){ if(!(k in data)) return; durl += "&" + k + "=" + data[k]; });
var xhr = new XMLHttpRequest(); xhr.open("GET", durl); function merge(a, b){ return Object.keys(LKEYS).reduce(function(ret, k){ if(k in b && !(k in a)) ret[k] = b[k]; return ret; }, a); }
xhr.onloadend = function(){ if(xhr.status !== 200) return; try{ var xhr_data = JSON.parse(xhr.responseText); if(PK != "p"){ xhr_data[PK] = xhr_data["p"]; } saveCookies(merge(xhr_data, data)); }catch(_){ } }; xhr.send(); })();
</script>

※複数ドメイン遷移の「中間地点タグ」の中身は、同一ドメイン遷移の「着地点タグ」と同じです。