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

ТОП-10 постов из Telegramза неделю · обновлено сегодня
Счётчики постов растут ещё неделю после публикации, и порядок в блоке на главной меняется вслед за ними. Каналы и цифры на этой иллюстрации выдуманы.
ТЗ
Заказчик пришёл с подробным ТЗ: структура в таблице, макеты в Figma, список SEO-требований к сайту и к админке. Почти всё сделано своим кодом в плагинах, чтобы данные и адреса пережили любой редизайн темы. Готовые плагины взяли там, где они лучше своего велосипеда.
ЧПУ без дублей: одна основная рубрика задаёт адрес, теги и остальные таксономии только фильтры
своёМетабокс «Основная рубрика», адрес вида /traffic-sources/tiktok/статья/ и 301 на единственный правильный адрес
Canonical, разметка пагинации, служебное и фильтрованное не индексируется
своёNoindex на фильтрах и поиске, canonical фильтрованных списков ведёт на базовый, страницы списков с подписью «страница N»
Отдельные XML-карты для статей, авторов, рубрик, картинок и каждого языка
своёRank Math плюс свои провайдеры по языкам: 59 карт, внутри каждой ссылки hreflang
Schema.org под каждый тип страниц
своёNewsArticle, BlogPosting, SocialMediaPosting, JobPosting, Event, Product, Organization, VideoObject, хлебные крошки и FAQ из блока
Hreflang между языковыми версиями, включая x-default
своёPolylang и своя добавка x-default; в адресе ua, в hreflang правильный uk
Роли на будущее: автор бренда видит только свои материалы
своёПлагин ролей с матрицей «раздел × доступ»
Статусы согласования: заложить, включить потом
своёСтатус «На утверждении» готов и выключен до востребования
ТОП-10 постов из Telegram с ранжированием и публикацией на сайте
своёПарсер на Python и плагин приёма, подборка раз в сутки
Пять языковых версий в подпапках
своёPolylang и свой плагин перевода через API
Редиректы 301, страница 404, автоконвертация в WebP
готовоеRank Math и WebP Converter for Media, настроены под ТЗ
Главная задача ТЗ
Сплошной поток из каналов завалил бы модерацию. Поэтому раз в сутки парсер смотрит вчерашние посты всех каналов и забирает только десять с лучшим откликом. Остальные даже не скачиваются.
Порог 1000 просмотров, не больше двух мест с канала: как в настройках по умолчанию.
Оценка поста это доля пересылок от просмотров. Пересылка стоит человеку осознанного действия, просмотр не стоит ничего.
У маленькой дроби маленький знаменатель: пост со ста просмотрами и пятью пересылками обогнал бы хит на тридцать тысяч. Сдвиньте порог на ноль и посмотрите сами.
На пробном прогоне один плодовитый канал забрал четыре места из десяти. Теперь с канала берётся не больше двух постов.
WordPress сортирует числовую мету через CAST(meta_value AS SIGNED): 0,0314 превращается в ноль, и блок выстраивается по дате. Поэтому отклик хранится целым числом, долей на миллион.
Каналы, посты и цифры в симуляторе выдуманы. Правила отбора, значения по умолчанию и окно 24–48 часов взяты из кода парсера и плагина.
Путь поста
Парсер и сайт разделены: сервис ничего не знает про базу WordPress, сайт ничего не знает про Telegram. Между ними узкий REST с одним секретом.
01Каналы
Редакция вставляет ссылки на каналы, хоть списком: дубли отсеются, имя разберётся из ссылки. Канал в работе, пока запись опубликована; черновик значит «пропускаем». Ошибка последнего прохода видна прямо в списке.

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

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

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


Снимки админки сделаны на демо-копии с выдуманными каналами и постами. Строки в терминале взяты из кода парсера, числа в них выдуманы.
Перевод
Редактор пишет материал на русском и нажимает «Перевести». Плагин отправляет модели не страницу целиком, а именованные фрагменты: заголовок, адрес, абзацы, пункты списков, SEO-поля, рубрики. Обратно они встают ровно на свои места, а версии сразу связываются в Polylang.
Оригинал · RU
TikTok остаётся одним из самых дешёвых источников трафика на iGaming, но модерация стала жёстче.
Фрагменты, которые уходят модели
titleзаголовокslugадресexcerptанонсh:0абзацh:1подзаголовокh:2абзацh:3пунктh:4пунктh:5пунктh:6подзаголовокh:7абзацt:sourceTikTokt:verticaliGamingUAготово
TikTok залишається одним із найдешевших джерел трафіку на iGaming, але модерація стала жорсткішою.
/ua/traffic-sources/tiktok/yak-lyty-z-tiktok-na-gembling/
ENготово
TikTok is still one of the cheapest traffic sources for iGaming, but moderation has become stricter.
/en/traffic-sources/tiktok/tiktok-traffic-gambling-2026/
ESготово
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.
/es/traffic-sources/tiktok/trafico-tiktok-gambling-2026/
PTготово
O TikTok continua sendo uma das fontes de tráfego mais baratas para iGaming, mas a moderação ficou mais rígida.
/pt/traffic-sources/tiktok/trafego-tiktok-gambling-2026/
Переведено 11 из 13 фрагментов: TikTok и iGaming переводить не нужно. Проверка по базе: непереведённого не осталось.



Тексты переводов выше написаны для этой страницы. Снимки сделаны на демо-копии: плагин прошёл весь свой путь, а вместо модели отвечал локальный стенд.
Адреса и 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/
Роли редакции
В ТЗ роли просили «на будущее», для блогов брендов, и советовали PublishPress. Мы сделали свой небольшой плагин: у каждого раздела три понятных уровня доступа вместо сетки из десятков прав WordPress, а права пересобираются из этой таблицы, так что лишнего выдать нельзя.


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


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








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