← Проекты для клиентов

МедиаWordPress, Telegram и пять языков · 2026

GoAff

Международное медиа о партнёрском маркетинге: свой рубрикатор, ТОП из Telegram и перевод на пять языков

Большой портал для арбитражников: статьи, новости, блоги, ивенты, вакансии, каталоги партнёрок и сервисов, база контактов и посты из Telegram-каналов. Дизайн был готовый. Вёрстка, тема WordPress, четыре своих плагина, парсер Telegram и машинный перевод сделаны нами по большому ТЗ, где половина пунктов была про SEO.

Роль
Вёрстка, тема, плагины, парсер
Стек
WordPress · PHP 8 · Polylang · Python
Сроки
Июль – октябрь 2026
Сайт
goaff.com
Главная GoAff: материал недели, рекламная полоса и разделы в шапке

ТОП-10 постов из Telegramза неделю · обновлено сегодня

  1. 01Записки тимлидаШаблон зарплаты для байеров: оклад, процент и штраф за слив3,14 %
  2. 02Арбитражные заметкиСвязка недели: нутра на Казахстан через push3,10 %
  3. 03Записки тимлидаКак мы нанимаем байеров без опыта3,09 %
  4. 04Push-лабораторияТри push-сети на одном оффере: цена клика отличается в 2,4 раза2,84 %
  5. 05SEO для гемблингаGoogle перетряхнул выдачу по казино-запросам2,38 %
  6. 06Арбитражные заметкиМини-гайд по прогреву кабинетов1,96 %
  7. 07Крипто-трафикГде сейчас самый дешёвый депозит на Tier-21,91 %
  8. 08Push-лабораторияНочной push дешевле на треть, но апрув ниже1,79 %
  9. 09Нутра-кухняНовые требования к лендингам: что убрать сразу1,71 %
  10. 10SEO для гемблингаДропы с историей: где брать и как проверять1,71 %

Счётчики постов растут ещё неделю после публикации, и порядок в блоке на главной меняется вслед за ними. Каналы и цифры на этой иллюстрации выдуманы.

5
языков: RU, UA, EN, ES, PT в подпапках
9
разделов со своими шаблонами: от статей до базы контактов
21
блок редактора: оглавление, FAQ, таблицы сравнения, галереи
59
XML-карт сайта: по типам материалов и языкам

ТЗ

Что просили и где это в коде

Заказчик пришёл с подробным ТЗ: структура в таблице, макеты в Figma, список SEO-требований к сайту и к админке. Почти всё сделано своим кодом в плагинах, чтобы данные и адреса пережили любой редизайн темы. Готовые плагины взяли там, где они лучше своего велосипеда.

  1. 01

    ЧПУ без дублей: одна основная рубрика задаёт адрес, теги и остальные таксономии только фильтры

    своёМетабокс «Основная рубрика», адрес вида /traffic-sources/tiktok/статья/ и 301 на единственный правильный адрес

  2. 02

    Canonical, разметка пагинации, служебное и фильтрованное не индексируется

    своёNoindex на фильтрах и поиске, canonical фильтрованных списков ведёт на базовый, страницы списков с подписью «страница N»

  3. 03

    Отдельные XML-карты для статей, авторов, рубрик, картинок и каждого языка

    своёRank Math плюс свои провайдеры по языкам: 59 карт, внутри каждой ссылки hreflang

  4. 04

    Schema.org под каждый тип страниц

    своёNewsArticle, BlogPosting, SocialMediaPosting, JobPosting, Event, Product, Organization, VideoObject, хлебные крошки и FAQ из блока

  5. 05

    Hreflang между языковыми версиями, включая x-default

    своёPolylang и своя добавка x-default; в адресе ua, в hreflang правильный uk

  6. 06

    Роли на будущее: автор бренда видит только свои материалы

    своёПлагин ролей с матрицей «раздел × доступ»

  7. 07

    Статусы согласования: заложить, включить потом

    своёСтатус «На утверждении» готов и выключен до востребования

  8. 08

    ТОП-10 постов из Telegram с ранжированием и публикацией на сайте

    своёПарсер на Python и плагин приёма, подборка раз в сутки

  9. 09

    Пять языковых версий в подпапках

    своёPolylang и свой плагин перевода через API

  10. 10

    Редиректы 301, страница 404, автоконвертация в WebP

    готовоеRank Math и WebP Converter for Media, настроены под ТЗ

Главная задача ТЗ

Полсотни постов в сутки, на сайт попадают десять

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

Порог 1000 просмотров, не больше двух мест с канала: как в настройках по умолчанию.

Кандидатов в окне 24–48 ч
24
Ниже порога
2
Упёрлись в лимит канала
3
  1. Записки тимлида · 26 ч назадШаблон зарплаты для байеров: оклад, процент и штраф за слив3,14 %402 пересылок · 12 800 просмотров
  2. Арбитражные заметки · 31 ч назадСвязка недели: нутра на Казахстан через push3,10 %664 пересылок · 21 400 просмотров
  3. Записки тимлида · 29 ч назадКак мы нанимаем байеров без опыта3,09 %281 пересылок · 9 100 просмотров
  4. Записки тимлида · 33 ч назадПочему мы ушли из соло в команду2,97 %226 пересылок · 7 600 просмотров
  5. Записки тимлида · 40 ч назадРазбор слива на 4000 $ за неделю2,86 %183 пересылок · 6 400 просмотров
  6. Push-лаборатория · 27 ч назадТри push-сети на одном оффере: цена клика отличается в 2,4 раза2,84 %278 пересылок · 9 800 просмотров
  7. Записки тимлида · 45 ч назадЧек-лист онбординга нового байера1,67 %55 пересылок · 3 300 просмотров
  8. SEO для гемблинга · 30 ч назадGoogle перетряхнул выдачу по казино-запросам2,38 %361 пересылок · 15 200 просмотров
  9. Арбитражные заметки · 38 ч назадМини-гайд по прогреву кабинетов1,96 %371 пересылок · 18 900 просмотров
  10. Крипто-трафик · 34 ч назадГде сейчас самый дешёвый депозит на Tier-21,91 %141 пересылок · 7 400 просмотров
  11. Push-лаборатория · 42 ч назадНочной push дешевле на треть, но апрув ниже1,79 %77 пересылок · 4 300 просмотров
  12. Нутра-кухня · 28 ч назадНовые требования к лендингам: что убрать сразу1,71 %96 пересылок · 5 600 просмотров
  13. SEO для гемблинга · 36 ч назадДропы с историей: где брать и как проверять1,71 %41 пересылок · 2 400 просмотров
  14. Байер из TikTok · 25 ч назадТри кабинета ушли в бан за сутки: что у них общего1,70 %512 пересылок · 30 100 просмотров
  15. Байер из TikTok · 39 ч назадSpark Ads против обычных креативов: две недели теста1,41 %158 пересылок · 11 200 просмотров
  16. Байер из TikTok · 46 ч назадКреативы, которые прошли модерацию с первого раза1,35 %70 пересылок · 5 200 просмотров
  17. SEO для гемблинга · 44 ч назадЧек-лист перед запуском PBN-сетки1,44 %88 пересылок · 6 100 просмотров
  18. Арбитражные заметки · 47 ч назадЧто лить в декабре: сезонные офферы1,36 %120 пересылок · 8 800 просмотров
  19. Крипто-трафик · 43 ч назадРетаргет в крипте окупается быстрее, чем кажется1,19 %31 пересылок · 2 600 просмотров
  20. Нутра-кухня · 37 ч назадАпрув в нутре: где теряются лиды1,39 %25 пересылок · 1 800 просмотров
  21. Инсайды партнёрок · 32 ч назадДвенадцать вопросов партнёрки на созвоне1,64 %64 пересылок · 3 900 просмотров
  22. Инсайды партнёрок · 41 ч назадКак мы проверяем партнёрку перед подключением1,05 %22 пересылок · 2 100 просмотров
  23. Инсайды партнёрок · 35 ч назадОфферы недели: пять новых гео2,77 %18 пересылок · 650 просмотров
  24. Инсайды партнёрок · 24 ч назадСекретная связка, которую никто не пробовал6,43 %9 пересылок · 140 просмотров
01

Отклик, а не охват

Оценка поста это доля пересылок от просмотров. Пересылка стоит человеку осознанного действия, просмотр не стоит ничего.

02

Порог просмотров

У маленькой дроби маленький знаменатель: пост со ста просмотрами и пятью пересылками обогнал бы хит на тридцать тысяч. Сдвиньте порог на ноль и посмотрите сами.

03

Лимит на канал

На пробном прогоне один плодовитый канал забрал четыре места из десяти. Теперь с канала берётся не больше двух постов.

04

Целое на миллион

WordPress сортирует числовую мету через CAST(meta_value AS SIGNED): 0,0314 превращается в ноль, и блок выстраивается по дате. Поэтому отклик хранится целым числом, долей на миллион.

Каналы, посты и цифры в симуляторе выдуманы. Правила отбора, значения по умолчанию и окно 24–48 часов взяты из кода парсера и плагина.

Путь поста

От канала до главной за пять шагов

Парсер и сайт разделены: сервис ничего не знает про базу WordPress, сайт ничего не знает про Telegram. Между ними узкий REST с одним секретом.

  1. 01Каналы

    Список каналов в админке

    Редакция вставляет ссылки на каналы, хоть списком: дубли отсеются, имя разберётся из ссылки. Канал в работе, пока запись опубликована; черновик значит «пропускаем». Ошибка последнего прохода видна прямо в списке.

    Список каналов Telegram в админке: канал, число постов, время синхронизации, у одного канала текст ошибки
  2. 02Парсер

    Отдельный процесс на Python

    Парсер живёт на сервере рядом с сайтом и запускается раз в час. Читает каналы через аккаунт Telegram или через публичную ленту t.me, склеивает альбомы в один пост, выдерживает паузы, о которых просит Telegram. С сайтом говорит только через REST по токену.

    1. 17 * * * * flock -n data/run.lock .venv/bin/python run.py
    2. источник mtproto, каналов в работе: 7
    3. в окне 24–48 ч: постов 46, прошли порог 1000 просмотров: 31
    4. отобрано 10 постов из 31 кандидатов (не больше 2 с канала)
    5. счётчики обновлены у 12 постов
    6. проход закончен: новых 10, счётчиков 12
  3. 03Приём

    Точка входа и правила подборки

    Токен сравнивается за постоянное время, все маршруты на POST: nginx этого хостинга портит строку запроса. Повторный приход того же сообщения обновляет только счётчики и не трогает текст, который уже поправил модератор.

    Настройки парсера: токен из wp-config, режим «Суточная подборка лучших», правила подборки
  4. 04Модерация

    Посты приходят на модерацию

    Заголовок собирается из первой осмысленной строки поста, дата берётся из канала, обложка из первой картинки. По умолчанию пост ждёт контент-менеджера, но можно публиковать сразу.

    Список постов из Telegram: опубликованные и «На утверждении»
  5. 05Журнал

    ТОП-10 за сутки читается в админке

    Каждый проход оставляет записи: какие посты прошли в подборку и с каким откликом, где Telegram попросил паузу, какой канал закрыт. Клиенту не нужно ходить в логи сервера.

    Журнал парсера: суточная подборка по местам с откликом, пауза Telegram, ошибка канала
Блок «ТОП-8 постов из Telegram» на главной GoAff: за неделю, обновлено сегодня
Итог на живом сайте. Блок берёт лучшие посты за неделю, а если их мало, сам расширяет окно до месяца и дальше и честно пишет период и сколько постов показано: сегодня это «ТОП-8». На испанской и португальской версиях блок скрыт.

Снимки админки сделаны на демо-копии с выдуманными каналами и постами. Строки в терминале взяты из кода парсера, числа в них выдуманы.

Перевод

Одна кнопка, четыре языка

Редактор пишет материал на русском и нажимает «Перевести». Плагин отправляет модели не страницу целиком, а именованные фрагменты: заголовок, адрес, абзацы, пункты списков, SEO-поля, рубрики. Обратно они встают ровно на свои места, а версии сразу связываются в Polylang.

Оригинал · RU

Как лить из TikTok на гемблинг в 2026 году

TikTok остаётся одним из самых дешёвых источников трафика на iGaming, но модерация стала жёстче.

  • прогрев кабинета 5–7 дней
  • белый креатив на первом запуске
  • отдельный платёжный профиль на каждый кабинет

Фрагменты, которые уходят модели

  • titleзаголовок
  • slugадрес
  • excerptанонс
  • h:0абзац
  • h:1подзаголовок
  • h:2абзац
  • h:3пункт
  • h:4пункт
  • h:5пункт
  • h:6подзаголовок
  • h:7абзац
  • t:sourceTikTok
  • t:verticaliGaming

UAготово

Як лити з TikTok на гемблінг у 2026 році

TikTok залишається одним із найдешевших джерел трафіку на iGaming, але модерація стала жорсткішою.

  • прогрів кабінету 5–7 днів
  • білий креатив на першому запуску
  • окремий платіжний профіль на кожен кабінет

/ua/traffic-sources/tiktok/yak-lyty-z-tiktok-na-gembling/

ENготово

How to Run TikTok Traffic to Gambling in 2026

TikTok is still one of the cheapest traffic sources for iGaming, but moderation has become stricter.

  • a 5–7 day account warm-up
  • a white creative on the first launch
  • a separate payment profile for every account

/en/traffic-sources/tiktok/tiktok-traffic-gambling-2026/

ESготово

Cómo llevar tráfico de TikTok a gambling en 2026

TikTok sigue siendo una de las fuentes de tráfico más baratas para iGaming, pero la moderación se ha vuelto más estricta.

  • calentar la cuenta durante 5–7 días
  • un creativo white en el primer lanzamiento
  • un perfil de pago distinto para cada cuenta

/es/traffic-sources/tiktok/trafico-tiktok-gambling-2026/

PTготово

Como levar tráfego do TikTok para gambling em 2026

O TikTok continua sendo uma das fontes de tráfego mais baratas para iGaming, mas a moderação ficou mais rígida.

  • aquecimento da conta por 5–7 dias
  • um criativo white no primeiro lançamento
  • um perfil de pagamento separado para cada conta

/pt/traffic-sources/tiktok/trafego-tiktok-gambling-2026/

Переведено 11 из 13 фрагментов: TikTok и iGaming переводить не нужно. Проверка по базе: непереведённого не осталось.

Панель «Перевод» в редакторе: UA готово, English в работе, кнопка «Перевожу…»
Идёт перевод
Карточки результата: переведено 11 из 13 фрагментов, проверка по базе, модель и стоимость
Готово
Боковая панель статьи: «Основная рубрика (задаёт адрес)» с текущим адресом и языки Polylang
Рубрика и адрес
  • Теги сверяются.У каждого фрагмента сравнивается набор структурных тегов до и после, сломанный ответ уходит на повтор.
  • Проверка по базе.После записи плагин перечитывает сохранённое и доводит фрагменты, оставшиеся на исходном языке. Бренды и цифры не трогает.
  • Адрес латиницей.Из заголовка модель делает короткий slug на 3–7 слов, рубрики получают переводы и связываются в Polylang.
  • Расход на виду.Токены и стоимость считаются по тарифу из настроек, последние двадцать переводов видны в админке.
  • Под хостинг.Перевод идёт порциями по 15 секунд, ответ модели ждём не дольше 40: иначе nginx оборвёт запрос.
  • Модель любая.OpenAI или совместимый провайдер, глоссарий и свои правила в настройках, прокси с запасным прямым каналом.

Тексты переводов выше написаны для этой страницы. Снимки сделаны на демо-копии: плагин прошёл весь свой путь, а вместо модели отвечал локальный стенд.

Адреса и SEO

Одна рубрика задаёт адрес, остальное фильтры

Пример прямо из ТЗ: статья «Как лить из TikTok на гемблинг» лежит в источниках трафика, но находится и по вертикали iGaming. Адрес у неё один, на каждом из пяти языков. Выберите основную рубрику и язык.

Основная рубрика
Язык

goaff.com/traffic-sources/tiktok/kak-lit-iz-tiktok-na-gembling/

/niche/igaming/kak-lit-iz-tiktok-na-gembling/301адрес через вторую рубрику уводит на основной

  • ruhttps://goaff.com/traffic-sources/tiktok/kak-lit-iz-tiktok-na-gembling/
  • ukhttps://goaff.com/ua/traffic-sources/tiktok/yak-lyty-z-tiktok-na-gembling/
  • enhttps://goaff.com/en/traffic-sources/tiktok/tiktok-traffic-gambling-2026/
  • eshttps://goaff.com/es/traffic-sources/tiktok/trafico-tiktok-gambling-2026/
  • pthttps://goaff.com/pt/traffic-sources/tiktok/trafego-tiktok-gambling-2026/
  • x-defaulthttps://goaff.com/traffic-sources/tiktok/kak-lit-iz-tiktok-na-gembling/
Экран «SEO разделов и фильтров»: адрес страницы, title и description, фильтр по языкам
Мета для страниц, у которых нет своей записи: разделы, фильтры, корни рубрик. Строки можно вставить прямо из таблицы, а сохранение защищено от затирания чужой правки и умеет откатиться.
  • Фильтры статическими адресами.Комбинации вертикали и формата живут на чистых адресах, старые ссылки с параметрами ведут туда же через 301, а сами фильтры закрыты от индекса.
  • Карты по языкам.Rank Math бесплатный и не умеет карты по языкам Polylang, поэтому его провайдеры унаследованы: 59 карт, 1527 адресов на 14 октября.
  • Разметка только видимого.У каждого типа свой Schema-тип: вакансия, ивент, пост соцсети, продукт. Размечено только то, что видит читатель.
  • Ссылки наружу.Внешним ссылкам в статьях автоматически ставятся nofollow и noopener, рекламным rel="sponsored".

Роли редакции

Автор бренда видит только своё

В ТЗ роли просили «на будущее», для блогов брендов, и советовали PublishPress. Мы сделали свой небольшой плагин: у каждого раздела три понятных уровня доступа вместо сетки из десятков прав WordPress, а права пересобираются из этой таблицы, так что лишнего выдать нельзя.

Матрица ролей: раздел, доступ «Все материалы» или «Только свои», «Может публиковать», «Может удалять»
«Только свои» значит, что человек не увидит в списке чужие материалы и не сможет их открыть. Медиатеку тоже можно ограничить своими файлами.
Админка глазами автора бренда: в меню только блоги, медиафайлы и профиль, в списке «Мои (2)»
Так видит админку автор бренда: меню из трёх пунктов и только свои записи. Статус «На утверждении» уже есть и выключен: по ТЗ на старте он не нужен.

Реклама

Баннеры без программиста

Медиа живёт рекламой, поэтому на сайте десять рекламных мест. В каждое можно поставить до четырёх баннеров, исключения для разделов и отдельных статей. Правило простое: настройка материала сильнее раздела, раздел сильнее места.

Ротация работает и за кешем страниц: какой из баннеров показать, выбирает скрипт в браузере. Показ засчитывается, когда баннер действительно попал на экран.

Рекламные места: шапка, главная, листинги, статья, до четырёх баннеров в месте
Встроенная инструкция «Реклама на сайте»: одиннадцать разделов и кнопка «Скачать одним файлом»
Инструкция для редакции живёт прямо в админке, со схемами мест и снимками экранов, и скачивается одним файлом.

Вёрстка и тема

Макет из Figma, разметка до класса

Сначала свёрстали статику по макету на Gulp и BEM, потом превратили её в тему WordPress. Редактор собирает страницы из 21 своего блока: у каждого схематичное превью в редакторе, а поля открываются сами, как только блок выбран.

Статья GoAff: блок «Содержание» с пронумерованными пунктами и сайдбар с вакансиями и новостями
Оглавление собирается из подзаголовков H2 само, и якоря в тексте всегда совпадают с пунктами. FAQ-блок добавляет на страницу разметку вопросов и ответов.
Главная GoAff на телефоне: материал недели
Блок ТОП из Telegram на телефоне
Статья GoAff на телефоне

Что я вынес из проекта

  1. Данные живут в плагине, а не в теме.Типы материалов, адреса и SEO не зависят от вёрстки, поэтому редизайн не сломает ни одной ссылки.
  2. Отбор важнее сбора.Взять все посты легко, полезно взять десять лучших: отклик, порог и лимит на канал сделали подборку честной.
  3. Машинному переводу нужен контроль.Именованные фрагменты, сверка тегов и проверка по базе превращают ответ модели в аккуратную страницу.
Следующий проектГК «Саламандра»

Давайте знакомиться

Хорошие проекты
начинаются
с разговора.

Нужен технический партнёр, помощь команде или решение для рабочего процесса? Расскажите, что хотите изменить — обсудим, чем я могу помочь.

@work_ilyaЛично мне в Telegram
Илья Болясов
Илья БолясовРазработчик. Технический партнёр.