Синтаксис правил AdGuard: полное руководство по созданию фильтров

Правило вида ||ads.example.com^ блокирует запросы к рекламному домену, а example.com##.banner скрывает элемент на странице — и если перепутать эти два типа синтаксиса, фильтр AdGuard просто не сработает без какого-либо сообщения об ошибке. Проверить, к какому типу относится ваше правило, — первое действие при отладке пользовательского фильтра: сетевые правила начинаются с маски URL, косметические содержат разделитель ## или #@#.

В этой статье разберём синтаксис правил AdGuard системно: от базовых масок и разделителей до модификаторов и правил-исключений. Материал подходит для тех, кто пишет собственные правила в разделе Пользовательские правила или создаёт полноценный фильтр для блокировки рекламы, трекеров и раздражающих элементов.

Два основных типа правил: сетевые и косметические

Весь синтаксис AdGuard делится на две большие группы. Сетевые правила работают на уровне запросов: они блокируют загрузку ресурса (скрипта, баннера, счётчика) ещё до того, как браузер его получит. Косметические правила не блокируют ничего — они скрывают или изменяют элементы уже загруженной страницы с помощью CSS.

Разница принципиальна. Сетевое правило экономит трафик и ускоряет загрузку, но не может убрать пустое место от заблокированного баннера. Косметическое правило убирает визуальный элемент, но сам ресурс при этом мог быть загружен. На практике оба типа комбинируются: сначала режется запрос, затем скрываются остатки.

  • 🌐 Сетевые: ||tracker.example.com^ — блокирует все запросы к домену.
  • 🎨 Косметические: example.com##div.ad-banner — скрывает элемент по CSS-селектору.
  • 🔓 Исключения: правила с @@ или #@# отменяют действие блокирующих правил.

Синтаксис сетевых правил и маски

Сетевые правила строятся из маски URL и специальных символов. Символ || означает начало доменного имени (включая поддомены), ^ — разделитель (любой символ, кроме букв, цифр и ._-), а * — произвольная последовательность символов. Одиночный символ | привязывает правило к началу или концу адреса.

||ads.example.com^

|https://example.com/banner/*

banner

Первое правило заблокирует домен ads.example.com целиком вместе с поддоменами. Второе сработает только при точном совпадении начала адреса. Третье — самое широкое и потенциально опасное: оно заблокирует любой URL, содержащий слово «banner», включая полезные ресурсы.

⚠️ Внимание: широкие маски вроде ad почти гарантированно ломают сайты — под блокировку попадают, например, ссылки со словом «add» или «load». Всегда сужайте маску до домена или конкретного пути.

Модификаторы сетевых правил

После маски через символ $ указываются модификаторы, уточняющие поведение правила. Они отделяются друг от друга запятой. Это самый мощный инструмент тонкой настройки: с его помощью правило ограничивается типом контента, конкретным доменом или направлением запроса.

МодификаторНазначениеПример
domainОграничивает правило указанными доменами||ads.com^$domain=example.org
third-partyСрабатывает только на сторонние запросы||tracker.com^$third-party
scriptТолько скрипты||example.com^$script
imageТолько изображения||cdn.example.com^$image
importantПриоритет над правилами-исключениями||ads.com^$important

Модификатор domain принимает несколько значений через вертикальную черту: $domain=site1.com|site2.com. Знак ~ перед доменом инвертирует условие — правило будет работать везде, кроме указанного сайта. Аналогично ~third-party означает «только запросы в пределах того же домена».

Правила-исключения

Иногда фильтр блокирует нужное, и тогда вам нужно исключение. Префикс @@ в начале сетевого правила превращает его в разблокирующее: @@||example.com/banner.js отменит блокировку этого адреса, даже если общий фильтр его режет. Исключения поддерживают те же модификаторы, что и блокирующие правила.

Для косметических правил исключение задаётся разделителем #@# вместо ##. Строка example.com#@#.banner вернёт отображение элемента, скрытого другим фильтром. Учтите: исключения действуют только на правила с меньшим приоритетом, а модификатор $important делает блокирующее правило «непробиваемым» для обычных исключений.

📊 Как вы чаще всего используете пользовательские правила AdGuard?
Блокирую рекламные домены вручную
Скрываю раздражающие элементы на сайтах
Создаю исключения для сломанных сайтов
Пишу собственный полноценный фильтр

Косметические правила: CSS и расширенные селекторы

Базовый формат косметического правила: домен##CSS-селектор. Домен можно опустить (##.ad — сработает на всех сайтах) или перечислить несколько через запятую. Селектор пишется по стандартным правилам CSS: классы через точку, идентификаторы через #, вложенность через пробел.

example.com##.sidebar-ad

example.com,example.org##div[id^="banner"]

AdGuard поддерживает и расширенные CSS-селекторы, которых нет в стандартном CSS. Например, псевдокласс :has() позволяет выбрать родительский элемент по наличию внутри него дочернего, а :contains() — по текстовому содержимому. Это удобно, когда у рекламного блока нет уникального класса, но есть характерная подпись вроде «Реклама».

⚠️ Внимание: правила с расширенными селекторами обрабатываются движком AdGuard, а не браузером, и потребляют больше ресурсов. Не злоупотребляйте :contains() на страницах с большим объёмом текста.
Что такое правила с javascript и scriptlet

Помимо CSS, AdGuard поддерживает правила вида example.com#%#//scriptlet("название", "аргумент") — они внедряют на страницу готовые скриптлеты для обхода антиадблок-механизмов. Это продвинутая тема: неправильный скриптлет может нарушить работу сайта. Используйте только проверенные скриптлеты из документации AdGuard.

Порядок создания собственного правила

Чтобы написать рабочее правило, действуйте последовательно. Сначала определите, что именно мешает: загружаемый ресурс или элемент на странице. Затем откройте журнал фильтрации AdGuard или инспектор браузера и найдите URL запроса либо CSS-селектор элемента. После этого составьте правило максимально узким — с привязкой к домену.

☑️ Проверка нового правила перед сохранением

Выполнено: 0 / 5

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

Типичные ошибки при написании правил

Самая частая ошибка — смешение типов синтаксиса. Правило ||example.com##.ad недопустимо: маска URL и CSS-селектор не могут существовать в одной строке. Вторая распространённая проблема — забытый символ ^ в конце доменной маски, из-за чего ||example.com блокирует и example.com.evil-site.net… или наоборот, не блокирует нужные поддомены из-за неверной привязки.

Ещё одна ловушка — правила без указания домена применяются ко всем сайтам сразу, и одно неудачное ##.content способно скрыть основной контент на половине интернета. Всегда указывайте домен перед разделителем ##, если только вы не пишете глобальный фильтр осознанно. Наконец, помните о регистре и кодировке: правила чувствительны к точному написанию селекторов.

  • ❌ Смешение сетевой маски и CSS-селектора в одной строке.
  • 🌍 Глобальные косметические правила без привязки к домену.
  • 🔗 Пропущенный разделитель ^ в конце доменной маски.
  • 🧪 Отсутствие тестирования — правило добавлено, но не проверено на сайте.

Часто задаваемые вопросы

Чем AdGuard-синтаксис отличается от синтаксиса Adblock Plus?

Базовая часть (маски, ||, ^, ##, модификаторы) совместима, поскольку AdGuard поддерживает формат фильтров Adblock Plus. Отличия — в расширениях: у AdGuard есть собственные модификаторы, скриптлеты и расширенные CSS-селекторы, которых нет в классическом ABP-синтаксисе.

Как заблокировать рекламу только на одном сайте?

Используйте модификатор domain в сетевом правиле: ||ads.example.com^$domain=target-site.com. Для косметических правил достаточно указать домен перед разделителем: target-site.com##.ad-block.

Почему моё правило не работает?

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

Можно ли отключить все правила для одного сайта?

Да. Проще всего добавить сайт в белый список через интерфейс AdGuard. Через синтаксис это делается правилом-исключением с модификатором document: @@||example.com^$document — оно отключает блокировку сетевых запросов на страницах этого домена.

Где узнать точный CSS-селектор элемента?

Откройте инструменты разработчика в браузере, выделите элемент на странице и посмотрите его классы и идентификаторы. Также в AdGuard есть встроенный помощник выбора элементов — он генерирует селектор автоматически при клике на блок.