在使用 CSP 的网站上安装计数器
Yandex Metrica 生成的代码片段旨在内联插入页面的 HTML 代码中。 在使用内容安全政策技术的网站上,除非您采取特定步骤,否则此代码将不会运行。 特别是,您需要使用 HTTP 标头来授予浏览器处理数据的权限。 HTTP 标头应包含 src-script 指令与 nonce 属性(这需要对 script 元素的内容进行签名)以及处理noscript元素内容的 img-src 指令。
此外,Yandex Metrica 还提供了另一种启用计数器代码的方法:仅在页面的 HTML 代码中放置 noscript 元素的内容,并将 script 元素的内容移到外部脚本中(例如,移动到 JS 文件)。
无论您选择哪种方法,都必须修改 HTTP 标头以添加访问 Yandex Metrica 的权限。
一般地址列表
https://mc.yandex.ru
https://mc.yandex.az
https://mc.yandex.by
https://mc.yandex.co.il
https://mc.yandex.com
https://mc.yandex.com.am
https://mc.yandex.com.ge
https://mc.yandex.com.tr
https://mc.yandex.ee
https://mc.yandex.fr
https://mc.yandex.kg
https://mc.yandex.kz
https://mc.yandex.lt
https://mc.yandex.lv
https://mc.yandex.md
https://mc.yandex.tj
https://mc.yandex.tm
https://mc.yandex.uz
https://mc.webvisor.com
https://mc.webvisor.org
https://yastatic.net
wss://mc.yandex.ru
wss://mc.yandex.az
wss://mc.yandex.by
wss://mc.yandex.co.il
wss://mc.yandex.com
wss://mc.yandex.com.am
wss://mc.yandex.com.ge
wss://mc.yandex.com.tr
wss://mc.yandex.ee
wss://mc.yandex.fr
wss://mc.yandex.kg
wss://mc.yandex.kz
wss://mc.yandex.lt
wss://mc.yandex.lv
wss://mc.yandex.md
wss://mc.yandex.tj
wss://mc.yandex.tm
wss://mc.yandex.uz
wss://mc.webvisor.com
wss://mc.webvisor.org
frame-ancestors 的地址
metrika.yandex.ru
analytics.yandex.by
analytics.yandex.com
analytics.yandex.com.tr
analytics.yandex.kz
analytics.yandex.ru
metr.yandex.by
metr.yandex.com
metr.yandex.com.tr
metr.yandex.kz
metr.yandex.ru
metrica.ya.ru
metrica.yandex
metrica.yandex.by
metrica.yandex.com
metrica.yandex.com.tr
metrica.yandex.kz
metrica.yandex.ru
metrika.ya.ru
metrika.yandex
metrika.yandex.by
metrika.yandex.com
metrika.yandex.com.tr
metrika.yandex.kz
metrika.yandex.uz
将计数器代码插入网站页面的 HTML 代码中
注意
这些示例并未列出 Yandex Metrica 工作所需的所有地址。
如果您使用此方法,Content-Security-Policy 或者 Content-Security-Policy-Report-Only HTTP 标头必须包含以下指令:
-
带 nonce 属性的 script-src。 此属性必须包含具有随机字符(拉丁字母和数字)序列的字符串值。 该值必须在服务器上针对每个请求单独随机生成。
Content-Security-Policy: script-src 'nonce-<character sequence>';网站页面上计数器代码的
script元素中nonce属性必须包含相同的字符序列。... <!-- Yandex Metrica tag --> <script type="text/javascript" nonce="<character sequence>"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a|| []).push(arguments)}; ... -
img-src 用于允许处理
noscript元素内容。Content-Security-Policy: img-src https://mc.yandex.ru; -
connect-src 用于连接到 Yandex Metrica。
Content-Security-Policy: connect-src https://mc.yandex.ru; -
带字符串
blob: https://mc.yandex.ru的 child-src使 Session Replay、click map、link map 和 scroll map 正常工作。Content-Security-Policy: child-src blob: https://mc.yandex.ru; -
带字符串
blob: https://mc.yandex.ru的 frame-src使 Session Replay、click map、link map 和 scroll map 正常工作。Content-Security-Policy: frame-src blob: https://mc.yandex.ru; -
frame-ancestors 使 Session Replay、click maps、link maps 和 scroll maps 正常工作。 使用 frame-ancestors 的地址。
Content-Security-Policy: frame-ancestors: http://metrika.yandex.ru;
使用此方法时的 HTTP 标头示例:
Content-Security-Policy:
...
img-src https://mc.yandex.ru;
script-src https://mc.yandex.ru https://yastatic.net 'nonce-<character sequence>';
connect-src https://mc.yandex.ru;
...
使用外部脚本连接计数器代码
注意
这些示例并未列出 Yandex Metrica 工作所需的所有地址。 请参阅完整列表。
如果您使用此方法,Content-Security-Policy 或者 Content-Security-Policy-Report-Only HTTP 标头可以有一组通用指令,包括从 Yandex Metrica 加载数据的规则:
-
script-src 允许处理脚本。
Content-Security-Policy: script-src https://mc.yandex.ru https://yastatic.net; -
img-src 允许处理
noscript元素内容。Content-Security-Policy: img-src https://mc.yandex.ru; -
connect-src 用于连接到 Yandex Metrica。
Content-Security-Policy: connect-src https://mc.yandex.ru; -
带字符串
blob: https://mc.yandex.ru的 child-src 使 Session Replay、click map、link map 和 scroll map 正常工作。Content-Security-Policy: child-src blob: https://mc.yandex.ru; -
带字符串
blob: https://mc.yandex.ru的 frame-src 使 Session Replay、click map、link map 和 scroll map 正常工作。Content-Security-Policy: frame-src blob: https://mc.yandex.ru;
使用此方法时的 HTTP 标头示例:
Content-Security-Policy:
...
img-src https://mc.yandex.ru;
script-src 'self' https://mc.yandex.ru https://yastatic.net;
connect-src https://mc.yandex.ru;
...
下面的示例在外部 JS 文件中启用 JavaScript 代码。 只有带 src 属性的 script 元素需要添加到网站页面的 HTML 代码中。 该属性必须包含文件的路径(例如,metrika.js)。
<script type="text/javascript" src="/metrika.js"></script>
-
在 Yandex Metrica 界面中,转到 Settings (Tag),然后从字段中复制
script元素的内容。 -
将此代码添加到
metrika.js文件。文件内容示例
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a|| []).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t) [0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym") ym(XXXXXXXX, "init", { id:XXXXXX, clickmap:true, trackLinks:true, accurateTrackBounce:true });其中
XXXXXXXX是 Yandex Metrica 计数器号码。 -
为了让计数器收集禁用 JavaScript 的用户的数据,请将
noscript元素添加到网站页面的 HTML 代码中:<noscript><div><img src="https://mc.yandex.ru/watch/XXXXXX" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
代码片段由两部分组成:script 元素中的 JavaScript 代码以及 noscript 元素中的 HTML 代码。