在使用 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.ruchild-src使 Session Replay、click map、link map 和 scroll map 正常工作。

    Content-Security-Policy: child-src blob: https://mc.yandex.ru;
    
  • 带字符串 blob: https://mc.yandex.ruframe-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.ruchild-src 使 Session Replay、click map、link map 和 scroll map 正常工作。

    Content-Security-Policy: child-src blob: https://mc.yandex.ru;
    
  • 带字符串 blob: https://mc.yandex.ruframe-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>
  1. 在 Yandex Metrica 界面中,转到 Settings (Tag),然后从字段中复制 script 元素的内容。

  2. 将此代码添加到 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 计数器号码。

  3. 为了让计数器收集禁用 JavaScript 的用户的数据,请将 noscript 元素添加到网站页面的 HTML 代码中:

    <noscript><div><img src="https://mc.yandex.ru/watch/XXXXXX" style="position:absolute; left:-9999px;" alt="" /></div></noscript> 
    

与我们聊天

发送电子邮件

如果您无法独立检查计数器,请遵循以下建议。

发生这种情况的原因可能如下:

  • 计数器安装不正确。 例如 CMS 修改了计数器代码。 重新安装计数器或联系您的 CMS 的支持服务。
  • 损坏的脚本导致 Yandex Metrica 计数器无法在网站上运行。 您可以在浏览器控制台中检查这一点。
这些建议没有帮助

这意味着信息正在传输到 Yandex Metrica。 但是,由于以下任一原因,数据可能不会显示在报表中:

  • 数据被发送到具有不同编号的计数器。
  • 计数器设置中的 Filters 选项卡指定了过于严格的筛选条件。 删除不需要的筛选条件。
  • 计数器设置中的 Filters 选项卡已启用 Don't count my sessions 筛选条件。 这意味着计数器不会统计您自己的会话。 尝试使用您的浏览器在“隐身”模式下访问该网站。
这些建议没有帮助

代码片段由两部分组成:script 元素中的 JavaScript 代码以及 noscript 元素中的 HTML 代码。