Legal Entity Marks releases
WordPress-плагин для СМИ: маркировка иноагентов/экстремистских/террористических/нежелательных организаций на лету + реестр запрещённых доменов и сканер ссылок
by Алексей Шляпужников · github.com/chekazoid/legal-entity-marks · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/chekazoid/legal-entity-marks/releases/download/v1.14.2/legal-entity-marks-1.14.2.zipReadme
=== Legal Entity Marks === Contributors: chekazoid Author: Алексей Шляпужников Author URI: https://shliapuzhnikov.com Plugin URI: https://github.com/chekazoid/legal-entity-marks Tags: legal, media, foreign agents, extremism, compliance, russia, smi, inoagent Requires at least: 6.1 Tested up to: 7.0 Requires PHP: 7.4 Stable tag: 1.14.2 License: GPL-2.0+ License URI: https://www.gnu.org/licenses/gpl-2.0.html
Маркировка и отслеживание упоминаний иноагентов, экстремистских, террористических и нежелательных организаций. Отчёт по упоминаниям и ссылкам.
== Описание ==
Legal Entity Marks - плагин для сайтов, которые упоминают организации и лиц из реестров Минюста, ФСБ и НАК.
СМИ он проставляет обязательную маркировку: сноски в тексте и блок дисклеймеров. Остальным сайтам, которым маркировка не требуется, помогает видеть, где упомянуты такие организации и куда стоят ссылки на их ресурсы: ссылку на нежелательную организацию могут истолковать как участие в её деятельности. Что маркировать, а что просто отслеживать, настраивается по каждому реестру отдельно.
Плагин работает с четырьмя реестрами:
- Иностранные агенты (реестр Минюста, ФЗ-255)
- Экстремистские организации (перечень Минюста)
- Террористические организации (перечень ФСБ/НАК)
- Нежелательные организации (перечень Минюста)
= Маркировка упоминаний =
Плагин находит упоминания лиц и организаций в тексте статей и добавляет сноску к первому упоминанию, а в конце статьи блок юридических дисклеймеров.
Оригинальный текст в базе данных не изменяется: маркировка происходит на лету через фильтр the_content. Отключите плагин, и статьи вернутся к исходному виду.
= Как ищутся имена =
Фамилии и имена склоняются по правилам русского языка, поэтому находятся «по словам Иванова», «письмо Иванову», «интервью с Ивановым». Работают оба порядка слов: и «Иванов Иван» из реестра, и «Иван Иванов» из текста статьи.
Род определяется по отчеству, а если его нет, по окончанию фамилии. Женские фамилии на согласную не склоняются, поэтому «Апахончич» остаётся неизменной во всех падежах. Несклоняемые типы (-ко, -ых, -их, -аго, на гласную) берутся как есть.
Отдельная фамилия без имени засчитывается, только если полное имя встречается в той же статье. В прессе так и пишут: первое упоминание полное, дальше по фамилии. Это отсекает однофамильцев, которых в реестрах немало.
= Что маркировать, а что нет =
Маркировка и отслеживание разделены. У каждого реестра две независимые галочки:
- Маркировать - сноска в тексте и строка в блоке дисклеймеров.
- Отслеживать - меток на сайте нет, но упоминания и ссылки видны в разделе «Упоминания».
Это нужно, когда сайт не СМИ: маркировать нежелательные организации не требуется, а вот знать, что на них есть ссылка, важно - её могут истолковать как участие в деятельности.
Есть три готовых профиля:
- СМИ - маркируются все четыре реестра.
- Не СМИ - маркируются экстремистские и террористические, нежелательные только отслеживаются, иноагенты не затрагиваются.
- Вручную - галочки расставляет администратор.
Для иноагентов есть отдельный режим «только в цитатах и ссылках»: обычное упоминание фамилии не маркируется, а маркировка ставится там, где человека цитируют или дают ссылку на его материал. Условия настраиваются: блок цитаты, абзац с гиперссылкой, прямая речь в кавычках, встроенный пост из соцсети.
В редакторе статьи есть блок «Маркировка». Пользователь с ролью «Редактор» или выше видит, что нашёл сканер, и на каждое упоминание выбирает одно из трёх: «Автоматически» (по общим правилам плагина, с подписью, помечается оно сейчас или нет), «Всегда помечать» или «Не помечать». Два последних действуют только для этой статьи.
По умолчанию плагин помечает только действующих. Отдельной опцией можно включить маркировку тех, кого уже исключили из реестра, тогда для них выводится формулировка в прошедшем времени с датой исключения.
= Упоминания и отчёт =
Раздел Маркировка → Упоминания показывает все находки по записям и страницам: какой материал, кто упомянут, в какой форме найден, маркируется ли, какие в нём есть запрещённые ссылки. Есть фильтры по реестру и выгрузка в CSV.
Материал, где организация по имени не названа, но стоит ссылка на её сайт или аккаунт, тоже попадает в отчёт - со словами «только ссылка» в графе «Найдено как». Для тех, кто не маркирует, это и есть главное: ссылка на ресурс нежелательной организации может быть истолкована как участие в её деятельности.
В списке записей (Записи → Все записи) появляется фильтр «Маркировка» и колонка со счётчиками: сколько меток, сколько упоминаний без меток, сколько запрещённых ссылок.
= Организация сразу в нескольких реестрах =
Одна и та же организация может числиться в двух реестрах: например, DOXA это и иностранный агент (как новостной портал), и нежелательная организация (как чешское юрлицо Mnenie media z.s.). Плагин хранит обе записи и под одним упоминанием показывает все статусы: до трёх строк, дальше счётчик. В блок дисклеймеров попадают только те статусы, реестры которых маркируются, полная картина видна в отчёте.
= Подзаголовки и другие поля =
Темы часто выводят подзаголовок или лид отдельным блоком, мимо основного текста записи - такие упоминания сканер не видит. В настройках есть раздел «Дополнительные поля»: плагин показывает произвольные поля этого сайта, в которых лежит текст, с примером содержимого. Отметьте нужные, доступ к серверу не требуется.
Если текст собирается темой на лету и в базе его нет, тема может отдать его фильтром lem_scan_extra_text.
= Брендовые названия СМИ =
В реестре Минюста организации записаны официальными юридическими названиями («Интернет-издание "Вёрстка Медиа"»), а в статьях их называют брендом («Вёрстки»). Соответствие задаётся на странице Маркировка → Бренды СМИ. Список предзаполнен очевидными случаями, редакция дополняет и правит его под себя.
У каждого правила три поля:
- Искать в названии - кусок официального названия из реестра, по которому находится запись. Если правило ничего не находит, плагин показывает это прямо в таблице и предупреждает при сохранении.
- Обычные алиасы - ловятся с кавычками и без. Для различимых имён: DOXA, Медуза, Радио Свобода.
- Только в кавычках - для брендов-обычных слов: издание «Холод» пометится, «на улице холод» нет. Падежи внутри кавычек подхватываются автоматически («Вёрстки», «Вёрстке»).
Правила хранятся в базе и переживают обновление плагина; новые комплектные правила при обновлении добавляются, не затирая ваши правки.
= Ручные звёздочки редактора =
Если в статье редакция уже поставила *, ** или *** сразу после имени или названия (традиционная пометка иноагента), плагин считает это подтверждением: такое упоминание помечается всегда, даже там, где обычные правила его пропустили бы (одинокая фамилия без полного имени в статье, бренд-слово без кавычек). При выводе плагин заменяет ручные звёздочки своей сноской, чтобы не было задвоения.
= Реестр запрещённых сайтов и сканер ссылок =
Плагин ведёт реестр доменов экстремистских, террористических и нежелательных организаций и позволяет:
- Сканировать все публикации на наличие ссылок на запрещённые домены
- Просматривать результаты: какие статьи содержат ссылки, куда и с каким текстом
- Удалять запрещённые ссылки поштучно или массово (тег
<a>заменяется текстом ссылки)
В комплект включён начальный реестр из 82 доменов (Meta/Facebook/Instagram, Свидетели Иеговы, NED, Bellingcat, Медуза, ФБК и др.). Реестр пополняется вручную через админку, CLI или импорт из файлов (TXT, CSV, JSON).
Не все найденные ссылки подлежат удалению. Ссылка на ресурс нежелательной организации может толковаться как участие в её деятельности, такие ссылки убирают из текста. Ссылка на сайт иноагента ничем не запрещена, ей достаточно маркировки, и чистка её не трогает. Какие реестры считать подлежащими удалению, задаётся в настройках; по умолчанию это экстремистские, террористические и нежелательные. Домены, добавленные вручную, удаляются всегда: их внесли осознанно.
Сверх этого домены приезжают из самого реестра Минюста: у записей об иноагентах есть поле со ссылками на ресурсы организации, и при обновлении плагин забирает оттуда и собственные сайты, и аккаунты на чужих площадках.
Аккаунт хранится вместе с площадкой (t.me/doxajournal, youtube.com/@channel) и срабатывает только на него: ссылка на другой телеграм-канал или на посторонний ролик остаётся нетронутой. Так же можно добавить аккаунт вручную, просто вписав ссылку целиком в поле «Домен или аккаунт».
Каждый такой ресурс связан с записью реестра, поэтому в отчёте рядом со ссылкой видно, чей это ресурс и в каком он реестре.
= Основные возможности =
- Склонение фамилий и имён, оба порядка слов, учёт рода
- Брендовые алиасы СМИ: издания находятся по бренду, а не только по юрлицу
- Поддержка алиасов: «Meta Platforms» = Facebook = Instagram = Фейсбук
- Профили сайта, раздельные маркировка и отслеживание, отчёт «Упоминания»
- Фильтр и колонка со счётчиками в списке записей
- Ручное управление маркировкой в редакторе статьи
- Опциональная маркировка исключённых из реестра, с формулировкой «ранее»
- AJAX-сканеры с прогресс-баром в админке (маркировка и ссылки)
- WP-CLI команды для всех операций
- Автоматическое обновление реестров по расписанию (WP-Cron)
- Проверка всего архива после каждого обновления реестров, с отчётом о новичках
- Автоматическое сканирование при публикации поста
- Настраиваемые цвета блока дисклеймеров
- Совместимость с популярными кеш-плагинами
- Начальные данные: 2300+ сущностей и 82 запрещённых домена (реестры обновлены в июле 2026)
= Что происходит после обновления реестров =
Организация, о которой вчера можно было писать свободно, сегодня может оказаться в реестре. Публикация пятилетней давности со ссылкой на её сайт при этом никуда не делась, и риск возникает задним числом.
Поэтому каждое обновление реестров тянет за собой проход по всему архиву: и по тексту, и по ссылкам. Работа идёт частями в фоне, большой сайт за один запрос не обойти. Ход виден на странице «Обзор», её можно закрыть.
Когда проход закончен, на «Обзоре» появляется итог: сколько записей пополнило реестры, сколько из них встречается на сайте и в скольких материалах, сколько нашлось запрещённых ссылок. Отдельное уведомление показывается на всех страницах админки, пока его не закроют.
Найти сами материалы можно в разделе «Упоминания» отбором «Новое с последнего обновления реестров». Новым считается и то, что организацию внесли в реестр после прошлой проверки, и то, что упоминание впервые нашлось в тексте (материал могли отредактировать). Столбец «В реестре с» показывает дату включения.
Отдельный флажок «только со ссылками» оставляет в отчёте материалы, где есть ссылка на ресурс организации. Тем, кто не маркирует, а вычищает, удобно начинать с него.
= Канал реестров: запасной источник =
Официальные реестры отвечают не всегда. Сайт Минюста бывает недоступен, хостинг может резать исходящие соединения, адрес сервера могут заблокировать после массовых выгрузок. Раньше в таких случаях плагин откатывался на снимок из своей поставки, а он стареет с каждым днём.
Между ними встал канал реестров - сторонняя служба, которая ведёт свои срезы тех же реестров. Порядок такой: сначала официальный источник, затем канал, и только потом встроенный перечень. На «Обзоре» видно, откуда пришли данные в этот раз.
Канал ведёт три реестра из четырёх: иноагенты, нежелательные и террористические. Экстремистских там нет, для них остаётся встроенный перечень.
Подключение: в настройках включить «Использовать канал реестров» и нажать «Проверить канал». Токен для этих трёх реестров не нужен, выгрузки открыты.
Поле токена в настройках оставлено на будущее: он понадобится только для перечня Росфинмониторинга (30 775 записей, из них 29 541 физлицо), который для расстановки сносок избыточен и плагином не берётся. Пустое поле означает «работать без токена», а не «канал выключен». Токен на страницу не выводится и в клиентский код не попадает; его можно держать вне базы данных, добавив в wp-config.php строку define('LEM_CHANNEL_TOKEN', '...');
= Актуальность реестров =
Встроенные JSON-файлы это стартовый снимок и офлайн-фолбэк, а не постоянный источник. Сразу после установки, а также после каждого обновления плагина ставится задача подтянуть реестры из источников; дальше они обновляются по расписанию (по умолчанию раз в неделю). Если WP-Cron не работает и реестры давно не обновлялись, плагин предупредит об этом в админке.
= Требования =
- WordPress 6.1+
- PHP 7.4+ (рекомендуется 8.0+)
- Расширение mbstring для PHP
== Установка ==
- Загрузите папку
legal-entity-marksв/wp-content/plugins/ - Активируйте плагин через меню «Плагины»
- При активации автоматически создаются таблицы и импортируются начальные данные
- Перейдите в Маркировка → Сканер и запустите полное сканирование
- Перейдите в Маркировка → Ссылки для проверки ссылок на запрещённые сайты
Или через WP-CLI:
wp plugin activate legal-entity-marks
wp lem scan --all --batch=500
wp lem banned-links-scan --batch=500
== Помочь развитию плагина ==
Плагин раздаётся бесплатно, и понять, сколько людей им пользуется, можно только с помощью самих пользователей. Обе возможности ниже необязательны: без них плагин работает точно так же.
= Анонимный счётчик =
Раз в неделю, вместе с обновлением реестров, плагин проверяет доступность канала. Это нужно и само по себе: о запасном источнике лучше знать заранее, а не в тот момент, когда официальный реестр уже упал. Состояние канала видно на «Обзоре».
С этим запросом уходят две вещи: случайный идентификатор установки и версия плагина. Ни домена, ни адреса, ни чего-либо о содержимом сайта. Идентификатор к сайту не привязан и меняется при переустановке. Со снятой галочкой проверка канала остаётся, но уходит без этих заголовков, и посчитать установку по ней нельзя.
Выключается галочкой в настройках, раздел «Помочь развитию плагина».
= Регистрация сайта =
Это уже не анонимно, и делается только по нажатию
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.14.2 | Aug 19, 2026 | legal-entity-marks-1.14.2.zip | 0 |
| v1.14.1 | Aug 19, 2026 | legal-entity-marks-1.14.1.zip | 0 |
| v1.14.0 | Aug 4, 2026 | legal-entity-marks-1.14.0.zip | 1 |
| v1.13.0 | Jul 29, 2026 | legal-entity-marks-1.13.0.zip | 1 |
| v1.12.0 | Jul 29, 2026 | legal-entity-marks-1.12.0.zip | 1 |
| v1.11.0 | Jul 28, 2026 | legal-entity-marks-1.11.0.zip | 0 |
| v1.10.0 | Jul 28, 2026 | legal-entity-marks-1.10.0.zip | 2 |
| v1.9.0 | Jul 27, 2026 | legal-entity-marks-1.9.0.zip | 2 |
| v1.8.2 | Jul 25, 2026 | legal-entity-marks-1.8.2.zip | 3 |
| v1.8.1 | Jul 25, 2026 | legal-entity-marks-1.8.1.zip | 1 |
| v1.8.0 | Jul 24, 2026 | legal-entity-marks-1.8.0.zip | 3 |
| v1.7.1 | Jul 24, 2026 | legal-entity-marks-1.7.1.zip | 0 |
| v1.7.0 | Jul 23, 2026 | legal-entity-marks-1.7.0.zip | 3 |
| v1.6.5 | Jul 23, 2026 | legal-entity-marks-1.6.5.zip | 2 |
| v1.6.4 | Jul 23, 2026 | legal-entity-marks-1.6.4.zip | 2 |
| v1.6.3 | Jul 23, 2026 | legal-entity-marks-1.6.3.zip | 2 |
| v1.6.2 | Jul 21, 2026 | legal-entity-marks-1.6.2.zip | 2 |
| v1.6.1 | Jul 21, 2026 | legal-entity-marks-1.6.1.zip | 1 |
| v1.6.0 | Jul 21, 2026 | legal-entity-marks-1.6.0.zip | 2 |
| v1.5.1 | Jul 21, 2026 | legal-entity-marks-1.5.1.zip | 2 |
| v1.5.0 | Jul 20, 2026 | legal-entity-marks-1.5.0.zip | 2 |
| v1.4.0 | Jul 16, 2026 | legal-entity-marks-1.4.0.zip | 1 |