Начните с принимающей стороны. Плейбук по защите веб-форм, опубликованный 13 августа 2026, описывает, что его автор увидел, разбирая партии заявок с контакт-форм:
somewhere between a fifth and two-fifths of submissions were junk — random-string bot fills, link-building outreach, and budget-inflation pitches.
Аутрич ради ссылок стоит в этом списке между заполнением случайными строками и предложениями раздуть бюджет. В эту категорию ваше сообщение попадает раньше, чем кто-то его прочитает. Защита, которую тот же плейбук советует, по порядку: поле-honeypot, ограничение частоты и CAPTCHA последней, потому что:
CAPTCHA sits last in the order for a UX reason — it is the only layer that taxes every legitimate visitor.
Akismet, фильтр за заметной долей контакт-форм в вебе, сообщает, что удалил больше 500 миллиардов единиц спама с точностью 99.99% на более чем 100 миллионах сайтов. Это цифры самого вендора. Описывают они фильтр, который уже видел ваше сообщение, если оно похоже хоть на что-то, что он видел раньше.
Значит, человек, который пишет через контакт-формы, ради гостевого поста, партнёрства, размещения в каталоге, отклика на вакансию, проигрывает одним из двух способов.
Два способа проиграть
Выглядеть как бот. Автоматизированный край рынка рекламирует ровно то, под что построена защита: вставьте несколько сотен доменов, дайте модели сопоставить поля, решите CAPTCHA, отправьте, платите за успех. Каждый из этих шагов — сигнал, который honeypot, ограничение частоты или проверка и должны ловить, и каждый из них — шаг, на котором сообщение уходит без человека, прочитавшего страницу, куда оно уходит.
Выглядеть как копия. У ручного края свой провал. Вставьте одно сообщение в 200 форм, и 200 сайтов получат один и тот же текст. Фильтр, который учится на том, что видел на разных сайтах, встречает ваш абзац 199 раз до того, как приземлится последний, а владельцу сайта, который уже видел его в блоге коллеги, фильтр не нужен.
Инструменты для ручного аутрича сошлись для этого на одном действии: кнопка копирует отрендеренное сообщение и открывает контакт-форму, после чего человек нажимает Send и отмечает строку сделанной. Форма правильная. Человеку она оставляет две вещи из тех, что выше: написать 200 сообщений, которые не одно сообщение, и вставить каждое в нужные поля без ошибок.
Один шаблон, список и человек на Send
Ровно под этот зазор написан Spintax Manual Outreach Helper, и его выход — повод для этой статьи. Это наше расширение, бесплатное, под GPL, и с 28 августа 2026 версия 0.2.1 живёт в Chrome Web Store, Edge Add-ons и Firefox Add-ons.
Порядок работы тот же, что у ручных инструментов, с закрытыми двумя зазорами:
- Импортируйте список. CSV, XLSX или вставка из таблицы. Колонки становятся переменными
(
%name%,%site%,%topic%), роли определяются по значениям, дубли схлопываются по ключу цели: домен для URL, адрес для почты, хэндл для профиля. - Напишите один шаблон на spintax или дайте встроенному промпту набросать его в вашем чате. Расширение ничего никакой модели не отправляет: оно открывает промпт во вкладке или копирует его.
- Экран проверки до первого сообщения: переменные подсвечены, предупреждения о пустой переменной, утёкшей скобке, поле длиннее, чем позволяет форма.
- Откройте боковую панель на целевой странице. Помощник узнаёт контакт-форму, заполняет поля, которые понимает, из этой строки, сообщает, что куда попало и чего не нашёл, и ждёт. Вы читаете сообщение, сами нажимаете Send на странице, отмечаете строку. Следующая уже на месте.
- Фоллоу-апы — это шаги. Строка возвращается в ту же очередь в свой срок с шаблоном второго шага. Исходы, отправлено, отложено, нет формы, капча, ответили, отказали, живут в локальном журнале, который можно экспортировать.
Граница вписана в конструкцию, а не в настройки. Из README:
It never submits a form, never solves a captcha, never scrapes a page, never adds “human-like” delays. That boundary is a design rule, not a setting.
Манифест этой фразе соответствует: ни host permissions, ни content scripts при установке. Заполнение формы запрашивает один этот origin, по кнопке Fill, в момент нажатия, а у внедряемого скрипта нет пути кода, который вызывает submit. Ни сервера, ни аккаунта, ни аналитики и ни одного сетевого запроса, пока вы сами не включите единственную необязательную ленту новостей.
Измерено на собственном шаблоне
Расширение везёт с собой демо-кампанию, гостевые посты в пять блогов, с шаблоном примерно на 45 слов и четырьмя демо-страницами, так что весь путь можно пройти, не трогая настоящий сайт. В шаблоне 14 мест по два варианта, 16 384 формулировки на бумаге. Проверять стоит правило рендера, потому что именно оно отличает очередь из 200 сообщений от одного сообщения, вставленного 200 раз: seed каждой строки — это её ключ и номер шага, поэтому один и тот же сайт всегда получает одну и ту же формулировку, а фоллоу-ап — другую.
Двести синтетических строк через движок, который расширение несёт в себе, @spintax/core:
| Вопрос | Измерено |
|---|---|
| Различных формулировок на 200 строк, значения строки заменены | 197 из 200 против 199, предсказанных birthday-арифметикой |
| Та же строка отрендерена дважды | одинаково, все 200 |
| Шаг два на той же строке отличается от шага один | 199 из 200 |
| Строки, импортированные с пустой темой | 25 из 25 отрендерены с видимой дырой, и это то, что подсвечивает экран проверки |
| Доля сообщения, одинаковая в 95% строк | 7.1%: строка отправителя и просьба |
Первая строка — весь аргумент в одном числе. Шаблон примерно на 45 слов, написанный один раз, даёт 200 блогам 197 разных сообщений, а блог номер 140 получает одно и то же каждый раз, когда вы открываете его строку. Последняя строка — честное дополнение, и это та же находка, что в замере холодных писем: неизменным остаётся то, кто пишет и чего хочет, а это как раз та часть, которую читатель должен узнать.
Файл — measure.mjs; ему нужен Node и движок из npm:
npm install @spintax/core@0.6.1
node measure.mjs
Где расширение останавливается
Оно узнаёт поля по атрибутам autocomplete, типам полей и подписям на семи языках и запоминает сопоставление для каждого сайта как рецепт. На поле, которое оно не смогло определить, вы один раз указываете сами; rich-редактор, Gmail или LinkedIn, получает текст через буфер обмена. CAPTCHA — это исход в журнале, а не задача, которую оно решает. Оно не читает за вас целевую страницу, не ищет страницу контактов и не говорит, стоит ли на этот сайт вообще писать.
Магазинная сторона заслуживает абзаца, потому что тема статьи случилась с её героем. 26 августа 2026 Chrome Web Store снял листинг: описание перечисляло конструкторы форм, которые помощник узнаёт, а магазин прочитал список как набивку ключевыми словами. Исправленный текст в тот же день отклонили автоматически; апелляцию удовлетворили 27 августа с тем же пакетом. Помощник, построенный, чтобы держать аутрич вне папки спама, провёл в ней день.
При чём тут spintax
Ничему в описанном пути не нужен хитрый синтаксис шаблонов. Демо-шаблон использует самую простую конструкцию из существующих, два варианта в фигурных скобках, четырнадцать раз, и на 200 строк этого хватает. Синтаксис покупает то, что сообщение вообще может быть шаблоном: переменные из строки, фоллоу-ап как второй шаг, а не вторая кампания, и формулировка, воспроизводимая по ключу строки, когда кто-то спросит, что вы отправили.
Ремесло, какие варианты разветвлять, а какие оставить в покое, живёт на spintax.net: страница про холодные письма о том, куда ставить вариативность, и гайды по авторству о том, как это писать. Расширение — рука в конце этого конвейера, та, что оставляет человека на Send.