Как работает блокировка рекламы: о разработке фильтров, и чем ей грозит Manifest v3
Работа любого блокировщика построена на использовании разных списков фильтрации или, проще говоря, фильтров. Это в буквальном смысле списки правил, написанные особым синтаксисом.
И если бы нам нужно было описать принцип работы блокировщиков в трёх словах, мы бы сказали "интерпретирование правил фильтрации".
Блокировщики понимают весь этот сложный синтаксис и выполняют действия, которые им предписывают правила в отношении входящего трафика: блокируют те или иные элементы, определённым образом меняют веб-страницы и т.д.
Таких фильтров существует великое множество. Тысячи волонтёров работают над тем, чтобы блокировщики максимально качественно блокировали рекламу и не ломали при этом функционал сайтов.
Вы возможно слышали о предстоящих изменениях в браузере Chrome, также известных как Manifest v3. У нас есть опасения, что эти изменения могут фактически уничтожить экосистему фильтров. На самом деле, эта статья адресована в первую очередь именно разработчикам Google Chrome. Мы верим, что текущие проблемы в реализации появились не из-за их желания навредить экосистеме, а просто от непонимания, как она устроена. Поэтому мы решили, что нам необходимо подробно описать, как сейчас построен процесс, и что не так с Manifest v3.
И, возможно, остальным читателям тоже будет интересно узнать, как это работает.
Как работают блокировщики
Как мы упомянули выше, блокировщики, по сути, интерпретируют различные правила фильтрации. Сначала блокировщик скачивает фильтры: это могут быть любые фильтры, скачанные из разных мест. А дальше блокировщик начнёт сверять контент страниц со всеми имеющимися правилами фильтрации.
Так работает блокировка
Давайте немного углубимся в технические аспекты, наверняка некоторым из вас было бы интересно узнать, как всё работает на более глубоком уровне. Итак, есть несколько видов фильтрации:
Фильтрация на сетевом уровне
Реклама на веб-страницах не появляется волшебным образом из ничего. Её нужно как-то подгрузить с сервера. Для этого браузер должен отправить веб-запрос. Правила фильтрации же сообщают блокировщикам, какие запросы пытаются "вытащить" рекламу, а не полезный контент, и, следовательно, должны быть заблокированы.
"Косметическая" фильтрация
Каждая веб-страница имеет DOM ("document object model" — объектную модель документа), по сути документ HTML, который содержит структуру страницы и все её элементы. Рекламные баннеры на странице также являются элементами и отображаются в DOM. Блокировщики рекламы могут удалять части DOM, а правила фильтрации помогают им понять, какие части являются рекламными и должны быть удалены, а какие трогать не стоит.
Конечно, на самом деле всё гораздо сложнее, но так проще понять общую картину. Если вы хотите узнать больше именно о технической стороне, посмотрите наше руководство по синтаксису правил фильтрации.
Фильтры
Существуют сотни, если не тысячи фильтров: фильтры AdGuard, EasyList и другие. Чтобы они всегда были актуальны и ничего не ломали на сайтах, специалисты и энтузиасты ежедневно трудятся над их обновлениями.
Фильтры не просто блокируют рекламу, и разные люди выбирают разные комбинации фильтров в соответствии со своими предпочтениями. Вот несколько примеров популярных списков фильтрации, которые иллюстрируют, насколько все они могут отличаться:
- EasyList — базовый для многих фильтр, который блокирует исключительно рекламу;
- EasyPrivacy — ещё один популярный фильтр, который блокирует онлайн-трекеры (т.е. системы слежения);
- Fanboy's SocialList — фильтр, который блокирует виджеты и кнопки соцсетей, все эти кнопки "мне нравится", "поделиться" и прочие;
- AdGuard Annoyances — фильтр AdGuard, который блокирует раздражители, например, уведомления о "куках", онлайн-помощники и т.д;
- Мириады региональных фильтров: EasyList Germany, RUAdlist, AdGuard Turkish filter и многие, многие другие.
Если интересно, вот здесь вы можете найти огромную базу списков фильтрации.
И вот мы подошли к первой проблеме: в текущей реализации Google Chrome подразумевает, что будет постоянно включён один-единственный предустановленный фильтр (так называемые "статические" правила). Его можно будет изменить, используя т.н. "динамические" правила, но ограничение на их количество преступно маленькое: всего 5 000. Многие фильтры, приведённые выше, просто не влезают в это ограничение. Что уж говорить о случае, когда вы хотите включить сразу несколько.
Как устроена разработка фильтров
Как мы уже говорили, фильтры должны постоянно обновляться. Для этого есть две основные причины:
- Блокировка новых элементов (рекламы, трекеров и т.д.);
- Исправление того, что сломано (с таким большим количеством правил в какой-то момент что-то обязательно сломается).
Конечно, разработчики фильтров не могут сами следить за миллионами сайтов. Их работа сильно зависит от отклика пользователей. Просто представьте:
- Репозиторий AdGuard Filters сейчас содержит более 40 000 закрытых задач. Каждую неделю появляется около 500 новых задач и примерно столько же выполняется.
- EasyList и их разные региональные подписки получают фидбэк в основном на форуме, где насчитываются десятки тысяч постов.
У многих блокировщиков рекламы есть инструменты, которые помогают пользователям легко сообщать о любых проблемах с фильтрами, с которыми они сталкиваются. Например, пользователи AdGuard имеют доступ к специальному веб-инструменту для отчётов. На основании таких жалоб разработчики корректируют свои списки фильтров. Блокировщики рекламы обновляют фильтры — вжух! — и реклама исчезает.
Фильтры постоянно обновляются
Что приводит нас к следующей проблеме: Динамические правила в Chrome будут отличаться по приоритету от статических, что может вносить путаницу и мешать разработчикам фильтров.
Как люди узнают о новых фильтрах?
Краеугольным камнем блокировки рекламы является возможность добавления пользователями любых фильтров по URL (а не выбирая из заранее предоставленного списка, каким бы большим он ни был). Это очень важный момент для развития экосистемы фильтров по нескольким причинам.
- У пользователей есть возможность попробовать любой новый фильтр;
- Разработчик может напрямую (без посредников) поделиться своим творением.
И снова возвращаемся к той же проблеме: Текущий лимит на количество динамических правил слишком мал для этой цели. Это медленно, но верно приведёт к кризису в сообществе разработки фильтров.
Что нас ждёт в будущем?
Если ничего не предпринять и все запланированные изменения Google Chrome будут претворены в реальность, нас всех ждут крайне неприятные последствия:
- Такими изменениями экосистеме фильтров будет нанесён огромный вред.
- Вместо многообразия фильтров и большого, активного сообщества мы получим буквально несколько разработчиков блокировщиков, которые в меру своих сил поддерживают несколько собственных списков фильтрации.
- Пользователи вместо гибкого подхода с возможностью настроить блокировку под свои предпочтения получат "монолитные" списки которые толком ничем не отличаются друг от друга.
- Сообщество переключится на другие средства для блокировки и будет работать над ними.
Мы в своё время много и жёстко высказывались о блокировке контента в Safari, и заслуженно. Но там хотя бы путём всевозможных "костылей" и прочих хитростей мы смогли сгладить эту ситуацию и прийти к удовлетворительному решению. В случае же с вариантом, предлагаемым Google, мы вообще не видим выхода из ситуации.
Что же делать?
На самом деле, все эти проблемы можно решить, причём не слишком отклоняясь от общего направления, которое Google задал для Chrome. Что для этого требуется по нашему мнению:
- Ввести понятие "списка фильтрации" для статических правил;
- Значительно увеличить лимит на количество динамических правил;
- Разобраться с приоритетами правил (у динамических он должен быть таким же, как у статических).
Честно говоря, нам, как разработчикам, было бы гораздо удобнее работать исключительно с динамическими правилами. Разделение на статические и динамические лишь создаёт проблемы и вносит ненужную путаницу.
Но в то же время, мы готовы к диалогу с разработчиками Google Chrome, чтобы найти компромисс, который удовлетворит всех, и прежде всего — пользователей Chrome.
PS:
Если вы считаете, что быть разработчиком фильтров — это ваше, то мы всегда рады любой помощи! Заглянув на эту страницу, вы узнаете, как можно помочь нам в разработке фильтров AdGuard, и что можно получить взамен за свои усилия