サブドメイン運用時のトラッキングタグ設定方法
サブドメイン運用時のトラッキング
広告の遷移先サイトがサブドメインを含む運用をしている場合のトラッキングについて解説します。
ドメイン名が「example.com」の場合、「○○○.example.com」のように用途やサービスにより分割されたドメインがサブドメインです。
- 広告の着地点ページ(example.com) → 成果地点ページ(サブドメイン aaa.example.com)
- 広告の着地点ページ(サブドメイン aaa.example.com) → 成果地点ページ(example.com)
Cookie発行ファイルが設置できる場合はCookie発行ファイル、Cookie発行ファイルが設置できない場合は着地点タグ(中間地点タグ)に、それぞれCookieを有効とするドメインの記述を追記します。
ドメイン自体が異なる場合(クロスドメイン)は、タグ設置型:トラッキングタグ設置手順 | 複数ドメイン時のタグ設置 を参照してください。
Cookie発行ファイルがアップロードできる場合
Cookie発行ファイルがアップロードできる場合は、「Cookie発行ファイル」にドメイン指定を追記します。
- setcookie() の引数例
- setcookie (Cookie名, Cookieの値, Cookie有効期限, Cookie有効パス,Cookie有効ドメイン)
- サブドメイン運用時には、有効ドメイン(domain)の指定をします。
サブドメインを含むドメイン全体でクッキーを有効にする記述として、ドメイン名を追記します。
- Cookie発行ファイル追記箇所(3ヵ所)
$options = array("expires" => $expires, "path" => $path, "secure" => $secure, "samesite" => $samesite, "domain" => "ドメイン");
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);
- 例)サブドメイン が「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発行ファイルがアップロードができない場合(JavaScriptによるCookie認証)は、着地点タグ、中間地点タグ にドメイン属性を追記します。
- 広告の着地点から成果地点ページまで同一ドメインの場合:着地点タグ
- 広告の着地点から成果地点ページまでに複数のドメインをまたぐ場合:着地点タグ、中間地点タグ
※記事LPを経由して、別ドメインのカートに遷移する場合など
- document.cookie の属性例
- Path=Cookie有効パス、Domain=Cookie有効ドメイン
- サブドメイン運用時には、有効ドメイン(domain)の指定をします。
- タグ編集時の注意点
- 以下の記述例はサンプルコードです。(システム設置先URLや広告IDがダミーです)
タグ編集時はご利用システムのタグを取得し、ドメインに関する記述を変更してください。
同一ドメイン内の遷移
着地点タグにドメイン属性を追記します。サブドメインを含むドメイン全体でクッキーを有効にする記述として、ドメイン名を追記します。
- 着地点タグ追記箇所(1ヵ所)
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; Secure"; xhr.open("GET", purl);
- 例)サブドメイン が「aaa.example.com」なら「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", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var PDIR = "./";
var durl = "https://システム設置先URL/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ヵ所)
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; Secure"; xhr.open("GET", purl);
- 例)サブドメイン が「aaa.example.com」なら「example.com」を指定。
着地点タグ 設定例
<script>
window.acs_cbs = window.acs_cbs || [];
function acsRelay_phadn3lao4k4(){
var PK = "p";
var PV = "広告ID";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_"], gclid : ["plid", "PL_"]};
var DKEYS = ["gclid", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var AURL = "https://中間地点ページURL";
var PDIR = "./";
var ATTR = "href";
var OPSL = ["^=", "=", "*="];
var OPSV = 0;
var durl = "https://システム設置先URL/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; Secure"; 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>
- 中間地点タグ追記箇所(1ヵ所)
var xhr = new XMLHttpRequest(); var args = "; expires=" + new Date(new Date().getTime() + 63072000000).toUTCString() + "; path=/; domain=ドメイン; SameSite=None; Secure"; xhr.open("GET", purl);
- 例)サブドメイン が「aaa.example.com」なら「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", "fbclid", "yclid", "ttclid", "ldtag_cl", "ss", "msi"];
var PDIR = "./";
var durl = "https://システム設置先URL/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>
Ver.3.11.0のタグを使用している場合
製品バージョンがVer.3.11.0のタグ編集例は以下のとおりです。
※Ver.3.12.0(2023年2月3日リリース)以前のタグ記述例です。
同一ドメイン内の遷移
Ver.3.11.0 着地点タグ 設定例
<script>
(function acsKeep(){
var PK = "p";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_", "ACT_"], gclid : ["plid", "PL_", "APT_"]};
var DKEYS = ["gclid"];
var PDIR = "./";
var durl = "https://システム設置先URL/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) 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; }); }; 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>
複数のドメインをまたぐ遷移
Ver.3.11.0 着地点タグ 設定例
<script>
function acsRelay_pgt6sve2vh9w(){
var PK = "p";
var PV = "広告ID";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_"], gclid : ["plid", "PL_"]};
var DKEYS = ["gclid"];
var AURL = "https://中間地点ページURL";
var PDIR = "./";
var ATTR = "href";
var OPSL = ["^=", "=", "*="];
var OPSV = 0;
var durl = "https://システム設置先URL/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; Secure"; xhr.open("GET", purl);
xhr.onloadend = function(){ if(xhr.status === 200){ convertURL(); return; } Object.keys(out).forEach(function(k){ document.cookie = LKEYS[k][1] + p + "=" + decodeURIComponent(out[k]) + args; }); convertURL(); }; 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>
Ver.3.11.0 中間地点タグ 設定例
<script>
(function acsKeep(){
var PK = "p";
var IMK = "im";
var LKEYS = {cid : ["cid", "CL_", "ACT_"], gclid : ["plid", "PL_", "APT_"]};
var DKEYS = ["gclid"];
var PDIR = "./";
var durl = "https://システム設置先URL/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) 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; }); }; 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>