С 2017 года в России действуют поправки в Федеральный закон «О персональных данных» (152-ФЗ), которые требуют получать явное согласие пользователя на сбор и обработку его персональной информации. А использование сервисов веб-аналитики, таких как Яндекс.Метрика, подпадает под эти требования, поскольку они собирают IP-адреса, данные о браузере, поведении на сайте — всё это признаётся персональными данными. Кроме того, европейский GDPR (General Data Protection Regulation) и ePrivacy директива также обязывают сайты запрашивать разрешение на установку cookie-файлов.

Что нужно сделать владельцу сайта?

  • Уведомить пользователя о том, какие данные собираются и с какой целью.
  • Запросить согласие до начала обработки (до установки аналитических cookie).
  • Предоставить ссылку на политику конфиденциальности с подробными условиями.
  • Сохранить выбор пользователя, чтобы не показывать предупреждение повторно.

Ниже приведён готовый пример такого решения — cookie-попап с текстом, адаптированным под российские реалии и использование Яндекс.Метрики.

<!-- COOKIE POPUP -->
<style>
    .cookie-popup {
        position: fixed;
        left: 20px;
        right: 20px;
        bottom: 20px;
        z-index: 9999;
        display: none;
    }

    .cookie-popup.-show {
        display: block;
    }

    .cookie-popup__content {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 20px;
        background: #ffffff;
        border-radius: 16px;
        padding: 20px 24px;
        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
        border: 1px solid #e5e5e5;
    }

    .cookie-popup__text {
        font-size: 14px;
        line-height: 1.5;
        color: #222;
    }

    .cookie-popup__text a {
        color: #1f6bd8;
        text-decoration: underline;
    }

    .cookie-popup__btn {
        flex-shrink: 0;
        border: none;
        background: #1f6bd8;
        color: #fff;
        border-radius: 10px;
        padding: 12px 20px;
        font-size: 14px;
        cursor: pointer;
        transition: 0.2s;
    }

    .cookie-popup__btn:hover {
        opacity: 0.9;
    }

    @media (max-width: 768px) {
        .cookie-popup {
            left: 10px;
            right: 10px;
            bottom: 10px;
        }

        .cookie-popup__content {
            flex-direction: column;
            align-items: flex-start;
            padding: 16px;
        }

        .cookie-popup__btn {
            width: 100%;
        }
    }
</style>

<div class="cookie-popup" id="cookiePopup">
    <div class="cookie-popup__content">
        <div class="cookie-popup__text">
            Наш сайт использует файлы cookie для удобства пользованием, таргетирования рекламы и сбора статистики в метрической программе Яндекс.Метрика в соответствии с Политикой конфиденциальности в отношении обработки персональных данных. Продолжая пользоваться сайтом, вы даете согласие на использование файлов cookie и соглашаетесь с Политикой конфиденциальности.
            <a href="/privacy_policy.pdf" target="_blank">Подробнее</a>
        </div>
        <button type="button" class="cookie-popup__btn" id="cookieAccept">
            Принять
        </button>
    </div>
</div>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        var cookiePopup = document.getElementById('cookiePopup');
        var cookieAccept = document.getElementById('cookieAccept');

        if (!cookiePopup || !cookieAccept) return;

        function getCookie(name) {
            var matches = document.cookie.match(new RegExp(
                "(?:^|; )" + name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1') + "=([^;]*)"
            ));
            return matches ? decodeURIComponent(matches[1]) : undefined;
        }

        function setCookie(name, value, days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            document.cookie = name + "=" + encodeURIComponent(value) + "; path=/; expires=" + date.toUTCString();
        }

        if (!getCookie('cookieAccepted')) {
            cookiePopup.classList.add('-show');
        }

        cookieAccept.addEventListener('click', function () {
            setCookie('cookieAccepted', '1', 365);
            cookiePopup.classList.remove('-show');
        });
    });
</script>
<!-- /COOKIE POPUP -->

Иногда данный код не работает (например в joomla). Используйте этот:

<!-- COOKIE POPUP -->
<style>
    .cookie-popup {
        position: fixed;
        left: 20px;
        right: 20px;
        bottom: 20px;
        z-index: 9999;
        display: none;
    }

    .cookie-popup.-show {
        display: block;
    }

    .cookie-popup__content {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 20px;
        background: #ffffff;
        border-radius: 16px;
        padding: 20px 24px;
        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
        border: 1px solid #e5e5e5;
    }

    .cookie-popup__text {
        font-size: 14px;
        line-height: 1.5;
        color: #222;
    }

    .cookie-popup__text a {
        color: #1f6bd8;
        text-decoration: underline;
    }

    .cookie-popup__btn {
        flex-shrink: 0;
        border: none;
        background: #1f6bd8;
        color: #fff;
        border-radius: 10px;
        padding: 12px 20px;
        font-size: 14px;
        cursor: pointer;
        transition: 0.2s;
    }

    .cookie-popup__btn:hover {
        opacity: 0.9;
    }

    @media (max-width: 768px) {
        .cookie-popup {
            left: 10px;
            right: 10px;
            bottom: 10px;
        }

        .cookie-popup__content {
            flex-direction: column;
            align-items: flex-start;
            padding: 16px;
        }

        .cookie-popup__btn {
            width: 100%;
        }
    }
</style>

<div class="cookie-popup" id="cookiePopup">
    <div class="cookie-popup__content">
        <div class="cookie-popup__text">
            Наш сайт использует файлы cookie для удобства пользованием, таргетирования рекламы и сбора статистики в метрической программе Яндекс.Метрика в соответствии с Политикой конфиденциальности в отношении обработки персональных данных. Продолжая пользоваться сайтом, вы даете согласие на использование файлов cookie и соглашаетесь с Политикой конфиденциальности.
            <a href="/polzs.pdf" target="_blank">Подробнее</a>
        </div>
        <button type="button" class="cookie-popup__btn" id="cookieAccept">
            Принять
        </button>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function () {
    var cookiePopup = document.getElementById('cookiePopup');
    var cookieAccept = document.getElementById('cookieAccept');

    if (!cookiePopup || !cookieAccept) return;

    function getCookie(name) {
        var cookies = document.cookie ? document.cookie.split('; ') : [];

        for (var i = 0; i < cookies.length; i++) {
            var parts = cookies[i].split('=');
            var key = parts.shift();
            var value = parts.join('=');

            if (key === name) {
                return decodeURIComponent(value);
            }
        }

        return null;
    }

    function setCookie(name, value, days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        document.cookie = name + "=" + encodeURIComponent(value) + "; path=/; expires=" + date.toUTCString();
    }

    if (!getCookie('cookieAccepted')) {
        cookiePopup.classList.add('-show');
    }

    cookieAccept.addEventListener('click', function () {
        setCookie('cookieAccepted', '1', 365);
        cookiePopup.classList.remove('-show');
    });
});
</script>
<!-- /COOKIE POPUP -->

 

Комментарии