Clean Tracked Links: кнопка «На оригинал» вместо трекинговой ссылки в WordPress

8 сентября 2026 на GitHub выложен WordPress-плагин Clean Tracked Links 1.1.1. Задача узкая: в редакторе нажать по ссылке и подставить исходный URL вместо трекинговой или редиректной обёртки. Текст анкора не трогается. На сайте у посетителей ссылки сами не переписываются.

Типичный вход, ради которого плагин и собирался: klerk.ru/go/ext/?to=https%3A%2F%2Fwww.vedomosti.ru%2F…. После кнопки «На оригинал» в ссылке остаётся прямой адрес статьи на Ведомостях. Параметр entityId и прочая обёртка уходят.

Зачем это в редакторе, а не на фронте

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

В Gutenberg это четвёртая кнопка в уже существующей панельке ссылки, рядом с карандашом, «открыть» и копированием. Иконка: две горизонтальные стрелки. Это не системная кнопка ядра WordPress, плагин сам встраивает её в popover.

Где появляется кнопка

  • Gutenberg: панель ссылки и запасная кнопка в тулбаре формата, когда курсор стоит на ссылке.
  • Классический редактор TinyMCE: рядом со стандартной «ссылкой», во всплывающей панели и в окне «Вставить/редактировать ссылку».
  • Встроенный WYSIWYG на произвольных полях: ACF и другие вызовы wp_editor(), в том числе teeny.

Сборки и npm нет. После установки из ZIP плагин должен работать сразу. Нужны WordPress 6.4+ и PHP 8.1+.

Как поставить

Релизный код в репозитории A-Krivoshen/clean-tracked-links. Для установки достаточно Code → Download ZIP, не путать с исходником без структуры плагина: в wp-content/plugins/clean-tracked-links/ должен лежать файл clean-tracked-links.php.

wp plugin activate clean-tracked-links
wp plugin get clean-tracked-links --field=version

Ожидаемый ответ: 1.1.1. Дальше открыть запись, кликнуть по ссылке, нажать «На оригинал».

Что делает разворот

Сложную логику плагин не тащит в браузер. JS быстро достаёт параметры to, url и target, если это уже готовый http(s). Иначе уходит на REST: POST /wp-json/clean-tracked-links/v1/unwrap, право edit_posts или edit_pages.

  1. Параметры цели по очереди: to, url, target, u, dest, destination, redirect, redirect_url, link. Значение декодируется, вложенные обёртки до трёх раз.
  2. Если целевого параметра нет, но URL похож на промежуточный редирект (путь вроде /go/, /out/ или короткий хост вроде bit.ly), плагин делает HEAD, при необходимости ограниченный GET, без тела страницы, и берёт Location. Максимум три редиректа, таймаут 5 секунд.
  3. У почти чистого адреса срезаются только служебные метки: utm_*, yclid, ysclid, gclid, fbclid, _openstat, from, eref, ref, ref_src. Параметры вроде id, article, slug, page не трогаются.

Повторный клик по уже обычной ссылке её не портит: редактор видит короткое «Уже обычная ссылка». Если исходный адрес найти нельзя, href остаётся как был.

Что сознательно не принимается

Только http и https. javascript:, data:, file: и адреса с логином в URL отбрасываются. Localhost, частные и link-local адреса, IPv4-mapped loopback вроде ::ffff:127.0.0.1, decimal-обходы 2130706433 и хосты metadata не резолвятся. Результат проходит через wp_http_validate_url и esc_url_raw.

Это не «антивирус для всех ссылок сайта». Это кнопка в редакторе, которая не должна стать прокси в локальную сеть.

Как проверить

  • Обёртка klerk с параметром to становится прямой ссылкой на целевой материал.
  • https://example.com/news/hello без изменений.
  • ?utm_source=tg&yclid=123 срезается, путь статьи остаётся.
  • Кнопка в Gutenberg не размножается при повторном открытии той же ссылки.
  • Если Gutenberg нет: классический редактор и поле ACF с визуальным редактором.

Лицензия MIT. Код, тесты и README: github.com/A-Krivoshen/clean-tracked-links. Задачи по WordPress и сопровождению сайтов на wordpress.krivoshein.site.

Источники и ссылки


Комментарии загружаются…