Правило вида ||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 делает блокирующее правило «непробиваемым» для обычных исключений.
Косметические правила: 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-селектор элемента. После этого составьте правило максимально узким — с привязкой к домену.
☑️ Проверка нового правила перед сохранением
После добавления правила в раздел Пользовательские правила обновите страницу с очисткой кэша браузера — иначе старые элементы могут остаться в кэше, и вы решите, что правило не работает. Если сетевое правило не срабатывает, проверьте в журнале фильтрации, доходит ли запрос до 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 есть встроенный помощник выбора элементов — он генерирует селектор автоматически при клике на блок.