GOD CRM Russia: post #186 — TG.ME

━━ День разработки 263 · 18 августа 2026 ━━

📦 Сделал

SEO-настройки на уровне Спейса. Раньше мета-теги публичных страниц жили в одном месте на весь инстанс. Теперь у каждого Спейса свой блок: title, description, OG-картинка, канонический origin. Форма собрана на общих контролах, всё уходит одним PATCH на публичный SEO-эндпоинт — не пять отдельных запросов на пять полей, а один частичный апдейт: что не тронул, то и не пришло на бэк.

Канонический origin вынес в настройку. У маркетинговых страниц и у блога разные домены-источники, и раньше canonical склеивался из того, на чём тебя открыли. Теперь это явное поле — поисковик получает один адрес, а не два варианта одной страницы.

SSR-lite для документов. Публичные доки отдаются с мета-тегами, вшитыми в HTML до того, как поднимется React. Полноценный SSR ради превьюшек в мессенджере — дорого; тут достаточно отрисовать <head> на сервере и отдать остальное клиенту как обычно.

Хук блога развели с общим. Блог и публичные страницы жили на одной логике меты и мешали друг другу — теперь у блога свой путь.

— Вся секция сразу на двух языках: ~50 ключей в i18n, без хардкода строк.

🔍 Что нашли

Дубликаты canonical. Наивно — считать это багом шаблона и искать в коде, где второй раз печатается тег. Оказалось, тег печатался один раз: два <link rel=canonical> в ответе появлялись потому, что заголовки добавлялись на двух слоях сразу — на фронте и в конфиге прокси, каждый «на всякий случай». Поисковик видит два канонических адреса и молча выбирает сам — страница может уехать не на тот URL, и в логах приложения этого не видно вообще.

Лечится не хитростью, а границей: мета за приложением, прокси не трогает <head>. Проверять при этом надо не код, а живой ответ — обойти весь sitemap и посчитать теги в сыром HTML. Тридцать секунд curl'а против часа чтения шаблонов.

Спасибо что читаете. До завтра.

━━ Конец дня 263 ━━
August 18, 2026 5