Трекер исходящих ссылок

Мастер создаст домен (если его ещё нет), маршрут с точным совпадением пути
и редирект на URL из выбранного query-параметра.
Пример: go.example.com/url?to=https://another.com перенаправит на https://another.com.

Скрипт для оборачивания ссылок на сайте можно подключить двумя способами:
сохранить файл у себя и подключить через `script src`, либо включить генерацию —
мастер опубликует скрипт на том же домене, где работает редирект, и вы подключите его оттуда.

Что сделает мастер

  • Добавит домен
  • Добавит путь (роут) с точным совпадением
  • Добавит редирект на значение параметра
  • Опционально опубликует JS-сниппет по выбранному пути

Как подключить скрипт

Вариант 1: сохраните файл скрипта у себя и подключите через `script src`.
Вариант 2: включите генерацию в форме — мастер опубликует файл на том же домене, где редирект, и вы подключите его оттуда (пример тега ниже). Разместите тег в head страницы с defer или в конце body.

В примере тега замените домен и путь к скрипту на свои из настройки.

Пример тега
<script src="https://www.example.com/js/link_tracker.js" defer></script>

Содержимое файла скрипта

Вариант 1: скопируйте файл, разместите у себя и укажите его в `script src`.
Вариант 2: включите генерацию — мастер отдаст такой же скрипт (уже с вашими значениями) по пути на домене трекера.

Если хостите сами, измените две строки с пометкой CHANGE ME: base (URL трекера = https:// + домен + путь) и param (имя query-параметра).

Пример скрипта
(() => {
  // CHANGE ME: your tracker base URL (https:// + domain + path from setup)
  const base = "https://www.example.com/url";
  // CHANGE ME: your query parameter name from setup
  const param = "to";

  const wrap = (href) => {
    try {
      const u = new URL(href, location.href);
      if (u.origin === location.origin) return href;
      if (u.href.startsWith(base + "?")) return href;
      return base + "?" + param + "=" + encodeURIComponent(u.href);
    } catch (e) {
      return href;
    }
  };

  const onInteract = (e) => {
    const a = e.target.closest && e.target.closest("a[href]");
    if (!a || a.dataset.tracked === "true") return;
    const next = wrap(a.getAttribute("href"));
    if (next === a.getAttribute("href")) return;
    a.dataset.tracked = "true";
    a.href = next;
  };

  ["click", "auxclick", "contextmenu"].forEach((t) =>
    document.addEventListener(t, onInteract, true)
  );
})();

Войдите, чтобы запустить настройку