«Сторонние куки больше не нужны», — заявили разработчики Chrome и в январе 2024 года начали отключать их у каждого сотого пользователя браузера. Однако уже в июле последовало осторожное: «Ну, с другой стороны...» — и отмена кук была отменена.

Многие даже не заметили, что произошло. Но на самом деле речь шла о том, как должен работать интернет в целом: отказ затронул бы почти каждый сайт из тех, что ты посещаешь,%USERNAME%.

На связи Артём из команды Яндекс Браузера. В этой статье расскажу о том, как технологии, изначально созданные для упрощения жизни, со временем стали инструментом манипуляций, и о контрасте разных подходов к борьбе с этим. Поговорим о масштабных системных решениях и простых прикладных методах, сравним их эффективность, сложности внедрения и неожиданные подводные камни. И заодно разберёмся, почему проблема трекинга — это не только про сторонние куки.


Что такое сторонние куки и что с ними не так

Когда пользователь заходит на сайт, часть ресурсов — картинки, скрипты, видео, рекламные баннеры — часто подгружается с других доменов. Ответ от этих сторонних серверов может содержать не только нужные данные, но и куки — строку, которую браузер будет автоматически отправлять при последующих обращениях к тому же домену.

Если куки установлены основным сайтом, это first‑party cookies. Если сторонним ресурсом — third‑party cookies.

На практике сторонние куки — это удобно. Например, вы заходите в блог, а там встроен виджет комментариев от соцсети, в которой вы уже авторизованы. Соцсеть узнаёт вас по сохранённым куки — и вы можете сразу писать комментарии без регистрации и СМС. Или если на сайте встроено видео с внешнего хостинга, то по куки показываются персональные кнопки, вроде «Смотреть позже».

Но у этой удобной схемы есть теневая сторона. Если сторонний сервер получает куки с нескольких сайтов, он может отслеживать вашу активность: какие страницы вы открываете, какие темы интересуют, и всё это без вашего ведома.

Жалобы на такое поведение регулярно поступают: пользователи недоумевают, как их действия отслеживают с такой точностью. Бывает, что человек просто открыл сайт — без логина, без ввода данных, — а потом получает звонок: «Вам что‑то не понравилось при визите?» Посещение отследили, каким‑то образом сопоставили телефон — с этим точно надо что‑то делать.

Почему не так просто отказаться от сторонних куки

Все third‑party cookies взять и отменить — крайне амбициозное решение. Однако ящик Пандоры, который открывает это решение, полон нетривиальных вопросов и архитектурных компромиссов.

Допустим, сторонние куки запрещены. Но что делать, если куки технически сторонние — домен‑то другой, но фактически принадлежит той же организации. Например, github.com и githubassets.com. Или, скажем, yandex.ru и yandex.by. Просто заблокировать?

Google Chrome предлагает создать глобальный список родственных доменов. Его хостят на GitHub, а браузеры получают и используют. Теоретически это позволяет решать такие кейсы, но на практике масштабирование этого подхода вызывает вопросы. Сейчас в списке около тысячи записей, и он пока не разросся до неуправляемых размеров, но насколько он устойчив при широком применении — большой вопрос.

Другой пример: сайт A загружает сторонний ресурс B, который, в свою очередь, включает на своей странице обратно A. Выглядит как рекурсия, но с точки зрения правил блокировки возникает вопрос: теперь даже на сайте A куки для него самого запрещать? Подобные взаимозависимости учтены, куки в таких случаях разрешаются.

А что делать с «сайтами в сайтах»? Комментарии, видео, платёжные системы — все эти iframe‑виджеты жили за счёт сторонних кук. На этот случай существует явная модель разрешений: при взаимодействии пользователь даёт согласие, и только тогда iframe получает доступ к куки. Встраивайте специальное API, спрашивайте разрешение и получайте доступ — всё прозрачно.

И, конечно, главный вопрос — реклама. Интернет построен на рекламных деньгах, а без отслеживания рекламные системы теряют релевантность. Нерелевантная реклама не нужна ни пользователю, ни бизнесу. Решение Google Chrome — брать интересы пользователя прямо из браузера, не раскрывая, какие сайты он посещал. Это реализовано через Topics API: пользователь получает рекламные интересы на основе посещённых доменов, но они подаются с примесью случайного шума, и разные сайты могут видеть разные «топ-5» интересов — приватность прежде всего.

Дополняет эту модель Protected Audience API. Сайты могут добавлять пользователя в группы интересов при посещении, чтобы потом, при показе рекламы, браузер знал, что, скажем, реклама спорттоваров всё ещё релевантна. И всё это без раскрытия конкретных переходов и истории.

Неужели и конверсию можно посмотреть без отслеживания? Да! Больше API богу API: Attribution Reporting и Private Aggregation дают агрегированные данные, чтобы маркетологи могли считать эффективность, не получая идентифи��ирующую информацию.

Да, многое при этом всё равно ломается. Потому в особо распространённых случаях браузер старается предугадывать, где без куки совсем нельзя, и делает исключения. А для более специфичных просто заводится белый список сайтов, которым можно.

Всё вышеперечисленное — лишь вершина айсберга. Переделка всей архитектуры интернета — колоссальная задача, и в этот раз она не взлетела. Что стало решающим — техническая трудоёмкость, падение точности таргетинга, неподготовленность рекламной индустрии или что‑то ещё, — остаётся загадкой. В итоге принудительное отключение сторонних кук было отложено, а новые API приватности остались опциональными, по выбору пользователя.

Как со сторонними куки работают в Яндекс Браузере

В Яндекс Браузере проблему сторонних куки начали решать ещё в 2021 году, но с компромисса. Вместо того чтобы одномоментно отменить всё и всем, команда искала золотую середину: починить побольше, сломать поменьше и обойтись без кардинальной перестройки всей веб‑архитектуры. Нашлось простое и действенное решение: блокировать сторонние куки только для тех ресурсов, на которые пользователь не заходил, и не блокировать, если заходил. Это значит, что виджеты авторизации, встроенные видео и прочие полезные встраиваемые вещи продолжают работать, а вот откровенно трекинговые скрипты чаще всего остаются без доступа к куки. Но, как водится, дьявол кроется в деталях.

Если сайт сломается, в интерфейсе появится раздел, где можно посмотреть, кто заблокирован, и настроить исключения вручную — например, разрешить все сторонние куки на конкретном сайте или разблокировать определённый ресурс везде.

Механизм доработали и на случай, если на сайт вы заходили давным‑давно в далёкой галактике: автоматическая разблокировка действует 45 дней, затем ресурс снова попадает под блокировку. При этом пользовательские настройки остаются бессрочными. Звучит просто, но на практике пришлось аккуратно переработать внутреннюю логику, добавить хранение даты посещения, предусмотреть миграцию данных при обновлении, и, конечно, всё это отразить в интерфейсе понятно и прозрачно.

Для формально разных, но фактически связанных доменов вроде github.com и githubassets.com изначально мы изобретали свой вариант списка наборов доменов, которые браузер будет считать связанными и разблокирует одновременно. Добавляли в него записи вручную, опираясь на жалобы пользователей по сломанным сайтам, и тоже переживали, не потребуется ли как‑то автоматизировать или масштабировать этот процесс. Неожиданно оказалось, что 640 КБ пяти пар доменов хватит всем. В итоге список оказался небольшим, но эффективным — массовой автоматизации не потребовалось.

Кстати, первым проблемным сайтом тогда оказался сам google.com (и связанный с ним googleusercontent.com): пользователи не могли скачивать файлы с Google Диска из‑за того, что браузер блокировал куки как сторонние.

Позже, когда Google Chrome добавил свою реализацию связанных доменов, пришлось объединить подходы — подружить форматы хранения, учесть оба источника информации и пересобрать логику принятия решения о разблокировке. Это звучит проще, чем оказалось на практике.

Но на этом всё не закончилось. Если мы уже умеем тонко настраивать поведение блокировщика, почему бы не дать такую возможность и пользователям, которые включают режим полной блокировки сторонних кук? Теперь можно заблокировать всё и разрешить только нужное вручную — удобно и гибко.

Притом никто не любит медленные браузеры. У нас за скоростью его старта чутко следит отдельный набор тестов. И эти тесты недвусмысленно указывают, что блокировать запуск чтением файлов с информацией про разрешённые сторонние домены — не лучшее решение. Но и идти в сеть, не зная, кому можно, — тоже плохой вариант. Компромисс: первый запрос всегда идёт к основному ресурсу и не требует ожидания, а все последующие дожидаются загрузки базы — к тому моменту она уже доступна.

Были и баги: нельзя просто так взять и сделать фичу без состояния гонки при редиректах, ошибки идентификации сторонности запросов, интерфейсных огрехов (например, протекающий в UI Punycode), ложных жалоб на «сломанный» сайт, который не имеет отношения к блокировкам, и прочих радостей жизни разработчика.

Особенно весело стало, когда Google Chrome начал штурм отмены сторонних кук: перетряхнулся весь код, связанный с куки, и фичу пришлось не только адаптировать, но и держать в актуальном состоянии по ходу стремительных изменений.

Но, несмотря ни на что, подход остался прежним. Фича заматерела, обзавелась именем (YTP, или Your Tracker Protection), символикой, очаровательным командным маскотом и прочно закрепилась в арсенале Браузера.

Маскот YPT
Маскот YPT

Итоги: решит ли отмена куки проблему цифрового трекинга пользователей

Увы, нет. Даже если отменить сторонние куки, трекинг пользователей не прекращается — например, сразу начинается рост отслеживания через first‑party cookies.

Теперь часто используется приём с промежуточными сайтами — bounce tracking. Пользователь кликает по ссылке, попадает сначала на «прослойку» — промежуточный домен, который вполне легально ставит свои куки, ведь пользователь действительно его посетил. А затем уже происходит перенаправление на финальный сайт. В результате такой прослойке известен и отправитель, и получатель трафика. А если таких ссылок достаточно, получается довольно полная картина интересов пользователя.

Методов борьбы с таким трекингом несколько. Разные браузеры используют разные комбинации:

  • Фильтрация по чёрным спискам (в духе uBlock Origin): можно предупреждать пользователя ещё до перехода.

  • Извлечение финального URL из ссылки на трекер — и редирект мимо прослойки.

  • Удаление лишних параметров в ссылках, если они выглядят как идентификаторы.

  • Автоматическое определение трекеров и удаление оставленных ими куки.

Google Chrome, например, двигается в сторону автоматического анализа: если переход был мгновенным, пользователь не взаимодействовал с сайтом, а куки всё же сохранились — браузер делает вывод, что это трекер, и со временем удаляет эти данные.

Такие подходы подтягиваются и в Яндекс Браузер. И тут начинаются внутренние архитектурные конфликты:

  • Работа с куками при определении трекера часто требует данных YTP, а они живут в сетевом процессе (там, где работают с запросами).

  • Но логика bounce‑трекеров в Google Chrome реализована в браузерном процессе (поближе к UI).

  • В итоге вместо простого вызова IsCookieAllowed() приходится делать асинхронный межпроцессный запрос, ждать ответ и только потом продолжать выполнение — с передачей функций, колбэков и прочего.

Такая схема значительно усложняет код и делает его хрупким — особенно на фоне постоянных изменений в Chromium. В какой‑то момент мы решили не страдать зря и сделали кеш YTP‑данных в браузерном процессе, который обновляется из сетевого. Это значительно упростило жизнь.

С другой стороны, распознавание bounce‑трекеров позволяет дополнить механизм работы YTP. По изначальной логике фичи, если пользователь зашёл на bounce‑сайт, он считается надёжным и разрешённым. Но если он же распознан как трекер, браузер может отменить его автоматическую разблокировку, несмотря на посещение. Такие интеграции требуют тонкой настройки, но позволяют обоим методам защиты эффективно взаимодействовать друг с другом.

Некоторые трекеры уходят глубже и не используют куки вообще, а вместо этого собирают отпечатки устройств, опираясь на крошечные детали вроде размера окна, системных шрифтов, порядка загруженных плагинов и других HTTP‑заголовков.

Получается почти уникальный браузерный отпечаток, по которому тоже можно отслеживать пользователя. Такому способу очень непросто проти��остоять, и основной обсуждаемый сейчас концепт — это «бюджет приватности»:

  • измерение объёма идентифицирующей информации, уходящей с каждым запросом;

  • при приближении к порогу, за которым «уровень анонимности» (k‑anonymity и differential privacy) слишком низок, вместо реальных данных отсылка случайных, либо заглушки, не несущей смысловой нагрузки, либо даже запрет запросов, которые могут привести к определению пользователя;

  • уменьшение «пассивного» отпечатка — информации, отправляемой безусловно без явного запроса со стороны сервера;

  • интерфейс для одобрения пользователем сайтов‑исключений, которые в силу своей специфики не смогут работать в рамках обычного бюджета приватности.

Противостояние меча и щита в мире трекинга ещё очень далеко от завершения, и каждый следующий виток бросает новые непростые вызовы. Но это будет уже совсем другая история.

Комментарии (29)


  1. Isiirk
    03.09.2025 07:13

    Яндекс, вы конечно много делаете хорошего, но можно вот такое хоть не делать, а то уже подкидывает


    1. HardWrMan
      03.09.2025 07:13

      Причём иногда прямо в самом Я.Б такое я видел.


    1. BloodyEagle
      03.09.2025 07:13

      я заблочил эту штуку - реально уже достала.


      1. HardWrMan
        03.09.2025 07:13

        Поделитесь методом надёжной блокировки.


        1. Isiirk
          03.09.2025 07:13

          Сменить поисковик, что я и сделал )


          1. HardWrMan
            03.09.2025 07:13

            На что? По моему наблюдению, рунете Я ищет сильно лучше гуголя (что логично). В остальных сегментах, конечно, гуголь, предлогающий хромого.


            1. nin-jin
              03.09.2025 07:13

              Меня в какой-то момент достала реклама и я запилил свой: search.hd4.ru

              Находит, конечно, не всё, но тут спасает быстрый переход на другие поисповики в нижнем баре.


    1. Javian
      03.09.2025 07:13

      когда-то так лез из каждой щели Яндекс Бар.


      1. HardWrMan
        03.09.2025 07:13

        А до него - Amigo!


        1. ganzmavag
          03.09.2025 07:13

          А до него Chrome


    1. Alonerover
      03.09.2025 07:13

      "Хорошего"? Они избрали вирусную технологию распространения своего браузера. Каждый инсталлятор как бомба, в котором ожидаешь этот вирус. Понятно, что владельцы Яда тянутся к пользовательским данным, но так топорно это делать зачем?


  1. almirus
    03.09.2025 07:13

    Отключил first‑party cookies везде где только смог, да были проблемы у самого Google, но потом они это починили. Также пользуюсь uBlock и dns adguard - мне ваша реклама не нужна.

    ЗЫ яндекс не был бы яндекс, если рекламу не стал бы подсовывать как новые письма, куда я частенько кликаю.

    Скрытый текст


    1. Burtanshy
      03.09.2025 07:13

      есть же mail.yandex.ru/lite/


      1. almirus
        03.09.2025 07:13

        Теперь оттуда перенаправляет на основное приложение.


      1. 2medic
        03.09.2025 07:13

        Есть же thunderbird. Собираю почту со всех ящиков и никакой рекламы.


    1. Varowlord4
      03.09.2025 07:13

      Уважаю такой подход, но не ломается ли при этом половина сайтов? У меня лично нет ни времени ни желания каждый раз отлаживать, почему не работает авторизация через гугл или не подгружается виджет с картой..


      1. almirus
        03.09.2025 07:13

        Ранее сам гугл и ломался, временно выключал настройку блокировки. Теперь это они починили. Если где то в другом месте ломается, я не замечаю, значит оно мне не сильно и нужно.


      1. 2medic
        03.09.2025 07:13

        Ломается, и большой вопрос, что будет с легаси-сайтами, которые вроде как и нужны аудитории, но постоянно тратить время на адаптацию его к изменениям ни у кого нет ни желания ни ресурсов.


    1. ganzmavag
      03.09.2025 07:13

      Вообще с этим подсовыванием рекламы какая-то совсем махинация, если вспомнить, что они оплату берут за клик. То есть кто-то еще и заплатит Яндексу за случайный переход пользователя.


  1. llava
    03.09.2025 07:13

    Зато сам Яндекс трекать нигде не стесняется Localhost-атака.


    1. ki11j0y
      03.09.2025 07:13

      В своём глазу и бревна не видят...


    1. 2medic
      03.09.2025 07:13

      Более того, он ещё и шантажирует, требуя отключить блокировщики

      Скрытый текст


  1. nin-jin
    03.09.2025 07:13

    Почему бы не сделать так: кука не передаётся если при комбинации "реферер+ориджин", пользователь с сайтом не взаимодействовал?

    • Скрытый переход/запрос с А на В всегда идёт без кук.

    • Если после перехода с А на В пользователь авторизовался, то дальнейшие переходы/запросы с А на В идут с куками.

    Впрочем, от фингерпринтинга даже полный запрет кук не спасёт. Как вы с этим боретесь?


    1. Varowlord4
      03.09.2025 07:13

      А чем это принципиально отличается от подхода описанного в статье? Там по сути то же самое: не был на сайте - куки блокируются. Ваше предложение это просто другой критерий посещения?


      1. nin-jin
        03.09.2025 07:13

        В вашем вопросе есть 100% ответа.


    1. nnovichOK Автор
      03.09.2025 07:13

      Предложение вполне разумное, у такого варианта есть и плюсы и минусы. С одной стороны, блокировать будет больше и лучше, с другой появляется много вопросов:

      • хранить в памяти и грузить на старте тогда нужно пары, а их количество растет квадратично, надо аккуратно проверять влияние и на прожорливость, и на замедление старта

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

      • блокировка до перехода требует лишний клик и лишний переход для разблокировки, и это добавляет неудобств, сейчас и так на некоторых сайтах пока согласишься с first-party куками, откажешься оставлять email, закроешь всплывающего ассистента и очередной попап, накликаешься вдоволь, усугублять совершенно не хочется

      • в целом чем больше "двигающихся частей" в механизме, тем больше нюансов, краевых случаев, поломок и сложнее поддержка кода

      Насчет фингерпринтинга, это следующий челлендж, сейчас есть набор базовых купирующих мер типа уменьшения количества информации в user-agent, но полноценное решение проблемы еще предстоит найти.


  1. Varowlord4
    03.09.2025 07:13

    Вся эта борьба с куками напоминает попытку лечить симптомы, а не болезнь. Болезнь это сама бизнес модель, построенная на тотальной слежке. Пока она выгодна, будут появляться всё новые и новые способы трекинга


  1. qw1
    03.09.2025 07:13

    Моё решение - удалять все куки при закрытии браузера (кроме явных исключений, типа Хабра). И - пусть ставят, всё равно дальше чем на 1-2 дня отследить не получится.


  1. feld1meow
    03.09.2025 07:13

    Даже если отменить сторонние куки, трекинг пользователей не прекращается

    Самое забавное - наблюдать, как "Корпорация зла" отслеживает действия пользователей для персонализации контента и рекламы, на чём, разумеется, зарабатывает огромные деньги, продавая информацию рекламодателям, и одновременно борется с отслеживанием, внедряя в Google Chrome новые функции приватности.