Sayacın CSP içeren siteye kurulumu

Yandex.Metrica'nın oluşturduğu sayaç kodu inline türünde olup sayfaların HTML koduna eklenir. Content Security Policy teknolojisini kullanan sitelerde bu kod sadece şu özel eylemlerle çalışır: HTTP başlığında tarayıcıya nonce özelliğine sahip src-script direktifini (script öğesinin imzalanmasını gerektirir) ve noscript öğesinin içeriğini işlemesi için img-src direktifini işleme izni verilmeli.

Yandex.Metrica'da sayaç kodu alımı için başka bir yöntem de kullanılabilir: Sayfaların HTML koduna sadece noscript öğesinin içeriğini ekleyip script öğesinin içeriğini dış komut dizisine (örneğin, bir JS dosyasına) yükleyebilirsiniz.

Kullanacağınız yöntemi seçerken HTTP başlığına Yandex.Metrica'ya https://mc.yandex.ru adresi (sayacın çalışabilmesi için) ve https://yastatic.net adresi (Oturum Kaydı'nın çalışabilmesi için) üzerinden başvurma izni eklemeniz gerekir.

Sayacın site sayfalarının HTML kodunda yerleştirilmesi

Bu yöntemi kullandığınızda Content-Security-Policy veya Content-Security-Policy-Report-Only şeklinde olan HTML başlığı aşağıdaki direktifleri içermelidir:

  • nonce özelliğine sahip script-src direktifi. Özellik, Latin harflerinden ve rakamlardan oluşan rastgele karakter dizisi şeklinde bir satır değeri içermelidir. Bu değer rastgele ve her bir isteğe özel olarak sunucuda oluşturulmalıdır.

    Content-Security-Policy: script-src 'nonce-<karakter dizisi>';

    Site sayfalarındaki sayaç kodunun script öğesindeki nonce özelliği de aynı karakter dizisini içermelidir.

    ...
    <!-- Yandex.Metrika counter -->
    <script type="text/javascript" nonce="<karakter dizisi>">
        (function (d, w, c) {
            (w[c] = w[c] || []).push(function() {
    ...
  • mc.yandex.ru adresinin belirtilmiş olduğu img-src direktifi (noscript öğesi içeriğinin işlenebilmesi için).

    Content-Security-Policy: img-src https://mc.yandex.ru;
  • connect-src direktifi (Yandex.Metrica'ya bağlanılabilmesi için).

    Content-Security-Policy: connect-src https://mc.yandex.ru;

Bu yönteme göre oluşturulan HTML başlığının örneği:

Content-Security-Policy:
 ...
 img-src https://mc.yandex.ru;
 script-src https://mc.yandex.ru https://yastatic.net 'nonce-<karakter dizisi>';
 connect-src https://mc.yandex.ru;
 ...

Sayacın dış komut dizisiyle bağlanması

Bu yöntemi kullandığınızda, Content-Security-Policy veya Content-Security-Policy-Report-Only şeklindeki HTTP başlığı, Yandex.Metrica veri yükleme kurallarını kapsayan ortak bir direktif seti içerebilir:

  • https://mc.yandex.ru ve https://yastatic.net adreslerinin belirtilmiş olduğu script-src direktifi (komut dizilerinin işlenebilmesi için).

    Content-Security-Policy: script-src https://mc.yandex.ru https://yastatic.net;
  • mc.yandex.ru şeklindeki Yandex.Metrica adresinin belirtilmiş olduğu img-src direktifi (noscript öğesi içeriğinin işlenebilmesi için).

    Content-Security-Policy: img-src https://mc.yandex.ru;
  • connect-src direktifi (Yandex.Metrica'ya bağlanılabilmesi için).

    Content-Security-Policy: connect-src https://mc.yandex.ru;

Bu yönteme göre oluşturulan HTML başlığının örneği:

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;
 ...

JavaScript kodunun JS türü bir dış dosyada bağlanmış olduğu bir örnek şu şekildedir: Bu durumda site sayfalarının HTML kodlarına sadece src özelliğine sahip script öğesinin eklenmesi gerekir. Bu özellik, metrika.js gibi bir dosya yolu içermelidir.

<script type="text/javascript" src="/metrika.js"></script>
  1. Yandex.Metrica arayüzünde Ayarlar bölümündeki Sayaç kodu sekmesine geçip ilgili alandan script öğesinin içeriğini kopyalayın.
  2. Elde ettiğiniz kodu metrika.js dosyasının içine ekleyin.

    Dosya içeriğinin bir örneği:
    (function (d, w, c) {
        (w[c] = w[c] || []).push(function() {
            try {
                w.yaCounterXXXXXX = new Ya.Metrika({id:XXXXXX,
                        clickmap:true,
                        trackLinks:true,
                        accurateTrackBounce:true});
            } catch(e) { }
        });
    
        var n = d.getElementsByTagName("script")[0],
            s = d.createElement("script"),
            f = function () { n.parentNode.insertBefore(s, n); };
        s.type = "text/javascript";
        s.async = true;
        s.src = "https://mc.yandex.ru/metrika/watch.js";
    
        if (w.opera == "[object Opera]") {
            d.addEventListener("DOMContentLoaded", f, false);
        } else { f(); }
    })(document, window, "yandex_metrika_callbacks");

    Bu; XXXXXX Yandex.Metrica sayaç numarasıdır.

  3. Sayacın, JavaScript'i devre dışı olan ziyaretçiler hakkında bilgi toplayabilmesi için site sayfalarının HTML koduna noscript öğesinin içeriğini ekleyin:

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

Bu durumda, sitede sayaç kodu doğrulaması çalışmaz. Sayaçların listesinin bulunduğu sayfada sayacın durumu şöyle görünür: “Ana sayfaya yüklenmedi, ancak veri alınıyor”.