лонгрид · ретроспектива

allcars.cy: первые 8 недель

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

0
рост органики (9 → 179 кликов/нед)
0
живых юзеров
0
PR смержено
0
событий пользователей

Если нет времени читать

Что понял по дороге: строить и тащить трафик я научился с космической скоростью, а вот замечать что построенное молча сдохло - пока нет (три тихих отказа за 8 недель). Дальше фокус один: доводить до конца, а не только строить.

00 — вводка

8 недель, если коротко

01 — органика

SEO: кривая прёт вверх

Клики из органики по неделям

9 → 179 за 8 недель (Н7 неполная, 5 дней).

Средняя позиция (ниже = лучше)

44 → 12. Лучшие дни уже на 1й странице.

за 28 дней против прошлого отчёта

Клики 231 → 580 (+151%) · показы 10 955 → 21 179 (+93%) · CTR 2,11% → 2,74% · позиция 19,7 → 14,1. Кипр = 82% кликов. Мобайл конвертит в 3,4 раза лучше десктопа.

Боль: национальные ВЧ-запросы просели

ЗапросБылоСейчас
cars for sale nicosia30,616,0 ↑
used cars cyprus41,144,8 ↓
second hand cars cyprus36,840,1 ↓

На каких запросах я реально стою (и какой по ним спрос)

Раз уж я выше хвастаюсь первой страницей - вот конкретика, кто на ней. Две оговорки чтоб читать правильно. "Показы" это мой прокси спроса: сколько раз гугл вообще меня показал за 28 дней (не путать с полным объёмом рынка). "Оценка рынка" - месячный объём по Кипру из глубокого ресёрча (это НЕ точный Keyword Planner: порядок величины, средняя уверенность; точные цифры подтяну когда будет экспорт из KP). И вот что вылезает: на первой странице я по куче конкретики, но это в основном узкие запросы с маленьким объёмом. А по жирным - глубоко. Ровно та самая недостроенная дверь.

Где я на первой странице (топ-10)

ЗапросПозицияПоказы 28дОценка рынка, /мес
μεταχειρισμένα αυτοκίνητα (б/у авто, греч.)10,233~8 000
φθηνά αυτοκίνητα μεταχ. κύπρος3,47~900
kia sportage for sale cyprus4,39~1 200
mitsubishi l200 cyprus price7,726~700
peugeot 208 cyprus8,114~500
toyota highlander cyprus8,08~250
used electric cars cyprus5,814~120
honda vezel 20279,131нишевый
allcars (бренд)6,114растёт

Плюс десятки запросов ультра-длинного хвоста (конкретная модель+год+цена: "jeep renegade 2019 price used", "mazda demio 2013 price", "kia stonic price") стоят на позициях 1-5, но с 1-4 показами каждый. По ним я в топе, просто спрос крошечный. Главный инсайт таблицы: самый жирный мой запрос - греческое "μεταχειρισμένα αυτοκίνητα" (~8 000/мес!) - висит на позиции 10,2, ровно на пороге первой страницы. Это буквально единственный высокообъёмный запрос где я почти дотянулся. Один толчок в топ-5 и это совсем другой трафик.

Высокий спрос - а я на 3-5 странице

ЗапросПозицияПоказы 28дОценка рынка, /мес
cars for sale cyprus (крупнейший англ.)глубоко~5 000
used cars cyprus4581~4 000
toyota cyprus → /cars/toyota22,0686~3 000
bmw cyprusнет в топе~2 500
cars for sale nicosia15,743~2 000
second hand cars cyprus40,128~1 500
used cars limassol29,862~1 200
cars for sale larnaca16,240~900
volkswagen used cars26,751~350

Смотрите верх таблицы: два самых жирных запроса - cars for sale cyprus (~5 000/мес, крупнейший английский) и bmw cyprus (~2 500/мес) - и по обоим меня в выдаче нет. Особенно болит BMW: на самом сайте это запрос №1 (1292 поиска на чистых данных), а в гугле по "bmw cyprus" меня не видно вообще. То есть снаружи я невидим ровно там где спроса больше всего. Вот это и есть та самая дыра в верхнем самом ценном слое, и под неё нужен хаб (см. план в конце).

02 — инженерка

Что я строил по неделям

PR смержено по неделям

~494+ за 8 недель. Н2 и Н5 - пики; Н3 - сознательная пауза.

Запуск6-11 мая
сайт allcars.cy, 3 языка EN/EL/RU, безопасность (CSP/HSTS, токены), дедуп дублей фото, блог
26PR · v1.13.1-7

Кратко: публичный запуск allcars.cy - выкатили сам сайт, трёхъязычность, безопасность и всю SEO/картиночную обвязку разом.

Выкатили
  • Публичный сайт + инлайн-модалка объявления в TMA (#830/#832)
  • i18n EN/EL/RU с автоопределением языка (#849/#855/#887)
  • Безопасность: enforce origin API, CSP/HSTS preload (#823/#824); короткоживущие подписанные токены + HMAC/nonce (#825/#826)
  • Блог, гайд по скорингу, страница релизов (#839/#840)
  • Свои картинки объявлений локально + дедуп дублей фото (#888/#889)
  • Донат-страница (крипто-QR + донаты) (#877/#864)
Починили / перф
  • Спрятали объявления без фото со всех поверхностей (#820/#822/#885)
  • PageSpeed лендинга: preconnect, HLS-видео-герой, автоплей (#892/#893/#879)
  • Ингест: x1000 для нереально низкого пробега (опечатки) (#829/#831)
  • Пайплайн оповещений: алерт-менеджер + метрики-sidecar, Copy-phone CTA (#899)
Деплои: v1.13.1 - v1.13.7 · 26 PR смержено
Н112-18 мая
программное SEO (make+model+city), /el/ /ru/ категории, GA4 SSR, таксономия трим-бейджей · P0: пайплайн данных был мёртв 8 дней
19PR · v1.13.7-31

Кратко: разворот программного SEO (длинный хвост make+model+city), локализованные категории и GA4; плюс чистка таксономии и оживление мёртвого пайплайна данных.

Выкатили
  • Программные страницы длинного хвоста make+model+city (#941/#939)
  • Локализованные /el/cars и /ru/cars категории (#938/#937)
  • Глубина категорий: интро, FAQPage JSON-LD, 410-Gone, browse-чипы, /sitemap-categories.xml (#930/#923)
  • GA4 на SSR-страницах + key-events (#936/#934)
  • Объявления из бота в Picks + оценка для безценника (#911/#912)
Починили / перф
  • Таксономия тримов: M-Sport / S-Line / ST-Line / AMG-Line (#935/#922/#924-927)
  • P0: пропал build-лейбл - ингест данных встал на 8 дней (#906)
  • tma ModuleNotFoundError + OperationalError 1020 (#905)
  • Пикапы: коммерческая ставка дорожного налога CY (#902)
  • SEO-слаг: убрать .html, дедуп года (#903)
Деплои: v1.13.7 - v1.13.31 · 19 PR (эра per-commit bump)
Н219-25 мая
TCO-калькулятор + PDF, EV-гранты, хаб /electric-cars-cyprus, /methodology, амортизация v0, GEO/llms.txt · ужали БД 23ГБ→6.6ГБ
96PR · пик

Кратко: самая жирная неделя по throughput - комбайн TCO/EV-гранты + EV-хаб, фундамент амортизации, GEO/LLM-цитирование, и рискованное сжатие самой большой таблицы данных.

Выкатили
  • TCO-калькулятор: математика, ICE-vs-EV, 9 колонок (#1064/#1113), EV picker (#1072/#1111), PDF A4 (#1068/#1117), confidence/sensitivity/break-even (#1066/#1116)
  • Движок EV-грантов + 5-шаговое дерево + PDF (#1070/#1071)
  • Хаб /electric-cars-cyprus (#1013/#1049); /methodology (#1069)
  • Амортизация v0: схема + fit-job → кривые амортизации (#1099/#1062); ML-фичи + training-набор (#1136/#1156)
  • GEO/LLM: /llms.txt, схема, гайд; цитируемый Dataset JSON-LD на /report (#1036/#1048)
  • SEO боковая перелинковка категорий (#954)
Починили / перф
  • Сжали самую большую таблицу данных 23ГБ→6.6ГБ + дроп дубль-индексов (#961/#970)
  • Reshape миграции под perf-gate (correlated-UPDATE → GROUP BY) (#992/#993)
  • HEAD-метод на всех SSR-роутах - разблок Googlebot (#1107); 404 на ?fuel= (#1084)
  • P0: мониторинг диска не видел диск с данными - тихий 5-дневный простой (#952)
Деплои: v1.13.34 - v1.13.43 · 96 PR (пик недели, лимит выборки - это минимум)
Н326 мая-1 июн
тихая неделя, ~0 коммитов. сознательная пауза после пика
~1PR

Кратко: сознательная пауза после 96-PR пика - дать рискам осесть, не ловить баги на ровном месте. Подтверждённый ноль коммитов (проверено по author и committer датам).

  • TMA год-фильтр: до 2000, ввод значений, пропавшие поколения Jeep (#1161/#1160)
  • Подготовка под blueprint/силуэты и паритет пагинации sitemap (#1186)
Деплои: без релиза
Н42-8 июня
2 микросервиса: specs-svc (характеристики) + silhouette-svc (силуэты), массовый бэкфилл, фиксы картинок объявлений
100+PR

Кратко: неделя микросервисов - подняли specs-svc и silhouette-svc, прогнали массовый бэкфилл характеристик, разгребли качество картинок объявлений.

Выкатили
  • specs-svc микросервис: /v1 lookup/blueprint/browse, Redis DB-2 кэш (#1309/#1320/#1296)
  • Фундамент vehicle-specs Phases A-C (#1265/#1296)
  • Бэкфилл размеров поколений пачками (#1268, #1280-#1339)
  • silhouette-svc: SVG-каркасы машин, генеративная ИИ-модель, front+side, body-aware (#1167/#1173/#1198/#1211)
  • Точность plate-blueprint (#1308/#1314/#1253)
Починили / перф
  • Гейт картинок: переупорядочить фото, выкинуть витрины на ингесте (#1239/#1254)
  • Никогда не пустая картинка (#1220/#1222); HD-архив картинок (#1202/#1205)
  • Пакетный расчёт цен ограничен scoreable-набором - стоп deploy-блок-скана (#1263/#1264)
  • Инкрементальный refresh состояния каталога (#1238/#1262); таблица миграций (#1035/#1190)
Деплои: bump-at-merge (релиз накопился в Unreleased) · 100+ PR (лимит - минимум)
Н59-15 июня
2 флагмана: Car-Data API (api.allcars.cy) + новый PWA Signal Dark (17 экранов), Deal Radar, web-push бэкенд, ops-console, второй источник данных
100+PR · 170 коммитов

Кратко: два флагмана в одну неделю - Car-Data /v1 API и полный рерайт PWA Signal Dark; плюс Deal Radar, бэкенд алертов/web-push, ops-console и второй источник данных для каталога. Самая загруженная неделя за всё время.

Выкатили
  • PWA Signal Dark: 17 экранов, флип /tma, Latest Deals (#1626/#1631); Deal Radar backend P1 (#1527)
  • Движок алертов + бэкенд Web Push P2 (#1539/#1553/#1552)
  • Calc: depreciation + value-estimate P3a (#1562); track-my-value + ежемесячная переоценка → value_change алерты P3b (#1565)
  • Car-Data API: api.allcars.cy + лендинг/доки, /v1/deal /v1/depreciation /v1/value /v1/plate, playground живого скорера, SVG-виджеты (#1478/#1483/#1514/#1522)
  • ops-console: админ-PWA владельца на ops.allcars.cy (#1466/#1476)
  • Второй источник данных + ингест/энрич (#1596/#1605)
  • SEO: /cars/all индекс (#1409), /cars/browse A-Z (#1378), обогащённый /cars/ хаб + AggregateOffer (#1622)
Починили / перф
  • Редизайн выбора компов в движке цен (#1559)
  • Пин fastapi<0.137 - иначе 500 на всех роутах панели (#1617)
Деплои: v1.13.44 - v1.13.47 · 100+ PR · 170 коммитов
Н616-22 июня
ops-hub (синк/очередь деплоев/сообщения/mailbox) + свой CI/CD, auth на /api/*, Deal Radar v2, история листинга · всплеск юзеров 486 WAU
80PR

Кратко: инфра-неделя - ops-hub и свой CI/CD без юзер-фич, auth на /api/*, Deal Radar v2, кросс-платформенная история. Совпала с пиком 486 WAU (максимум за всё время).

Выкатили
  • ops-hub: синк контекста + ядро (#1819/#1828), сериализованная очередь деплоев (#1824/#1832), двусторонний реле в мессенджер + mailbox агентов (#1823/#1825)
  • Self-hosted CI/CD runner phase 1 + автоматизация доски на ci-bot (#1782/#1792); verify.sh гейт (#1789)
  • Deal Radar v2: композитный мульти-осевой скоринг (#1652/#1680)
  • Кросс-платформенная история листинга + панель "Listed on" в SD (#1753/#1762); мультиселект источников (#1716/#1726)
  • Локальный CV-выбор фото-героя, компьютерное зрение (#1739/#1717); панель ops-health (#1771/#1772)
Починили / перф
  • Гибридный auth на /api/* (allowlist) + shadow-режим телеметрии (#1810/#1802)
  • Redis-rate-limiter для TMA + /plate (#1804/#1806)
  • Стоп холодного расчёта radar/pricing 30-60с для нескорящихся листингов (#1774/#1778)
Деплои: v1.13.48 - v1.13.49 · 80 PR
Н723-28 июня
VIN через внешний провайдер (идентификация end-to-end), Web Push клиент, /v1 контракт, ops-hub на прод, сегментация цен · починили алерты сохранёнок
72PR · 77 тикетов

Кратко: неделя идентичности и финиша - plate→VIN через внешний провайдер end-to-end, клиент Web Push, финал контракта /v1, переезд ops-hub на прод, и наконец починка давно молча сломанных алертов сохранёнок.

Выкатили
  • Полный спек-лист по номеру: привод/коробка/шасси (#1914) + проекция specs-svc
  • Внешний провайдер plate→VIN в идентичность (#1924/#1925); VIN на blueprint + SD detail (#1939/#1941); stage-2 VIN→specs + read-back (#1926)
  • VIN hard-veto both-known-different + ретро-перепроверка в дедупе (#1927/#1931); провайдер скрыт от юзеров (#1945)
  • Клиент Web Push: SW push-handler + UI подписки (#1962/#1965)
  • Car-Data API: закрытая таксономия кодов ошибок /v1 + X-Request-Id (#1544/#1915)
  • ops: апрувы деплоя в боте владельца + инлайн-кнопки (#1889/#1893); переезд хаба на прод
Починили / перф
  • Цены: уточнили сегментацию компов (#1599/#1744)
  • Восстановили загрузку картинок объявлений: 3ч cron + фрешнес-алерт (#1964)
  • Алерты сохранёнок: "новый матч" наконец срабатывает - убрали мёртвый image-gate (#1961)
  • Гейт fallback-сканов T7/T8/T9 - фикс холодной /api/radar (#1854/#1857)
Деплои: v1.13.50 - v1.13.57 · 72 PR · 77 тикетов закрыто (макс за период)
03 — решения

Какие решения и почему

Запуск

Прятать объявления без фото + сразу 3 языка

Почему: объява без фото = мусор, роняет доверие к выдаче. 3 языка - Кипр трёхъязычный, и в GSC сразу полезли греческие запросы. Данные подтвердили ставку.

Н1

Валить в программное SEO make+model+city

Почему: ранний GSC показал - по узким длиннохвостым запросам я уже в топ-8, а по жирным на 4-5 странице. Строю то что уже ранжируется. Данные сами показали куда копать.

Н2

Вложиться в TCO + EV, ужать БД

Почему: TCO-калькулятор держал людей ~29 минут на странице - безумный dwell time. Раз залипают, даём больше инструментов. БД ужали не от хорошей жизни - диск забивался.

Н3

Ничего не делать (это тоже решение)

Почему: после 96 PR гнать дальше = ловить баги на ровном месте. Сознательно притормозили.

Н4

Выносить specs/silhouette в микросервисы

Почему: у silhouette генерация картинок со своим бюджетом (ИИ-генерация стоит денег), изолировать с budget-gate безопаснее. Характеристики нужны обеим площадкам - логично в общий сервис.

Н5

Флипнуть /tma на PWA + выкатить API разом

Почему: PWA - главная мобильная поверхность удержания (юзеры мобильные, по данным), API - дистрибуция на будущее. Рискнули двумя большими вещами в одну неделю.

Н6

Потратить целую неделю на инфру, без фич

Почему: деплой стал бутылочным горлышком, а потом и облачный CI-деплой отвалился (~20 июня). Вложились - и ровно тогда словили пик 486 WAU. Скорость выкатки = фича.

Н7

VIN через внешний провайдер + срочно чинить алерты

Почему: VIN - золотой ключ идентификации, внешний провайдер единственный легальный канал. И разбирая данные нашёл: движок алертов сохранёнок НИ РАЗУ не слал "новый матч". Решение моментальное - чинить, это прямая дыра в удержании.

04 — эксперимент

Индексация под AI: что, как и зачем

результат эксперимента · канал AI Assistant (GA4)
0 → 145

сессий из AI-ассистентов (новый класс источников), вовлечённость 62%, с нуля и без вложений. Пока 3-й по величине канал и растёт сам.

05 — продукт и люди

Кто нами пользуется

«люди реально одержимы бэхой - это не шутка, это буквально спрос с экрана»

Топ марок в поиске

BMW доминирует - ~2x больше #2 (на чистых данных, без dev-тестов).

Глубина вовлечения (событий на юзера)

медиана в полосе 6-20; ~15% - пауэр-юзеры (20+).

Юзеры по неделям (WAU)

пик Н6 (485) - всплеск 18 июня (~6x), осел за 2 дня. MAU растёт: апр 218 -> май 479 -> июнь 789.

Ключевые действия (всего за период)

поиск - ядро продукта (67% юзеров искали).

4 когорты пользователей

покупатели (охотники + criteria) = 41% базы; продавцы/own-car - будущая платная аудитория.

06 — больная тема

Удержание: честно

дошли до реального объявления
5,5%

из 947 искавших. Всего 54 человека за всё время кликнули к продавцу. Вот это главный затык воронки, а не недельный возврат.

движок алертов сохранёнок
0

уведомлений «новый матч» за всё время (только delisted). Фича-призрак, молчала месяцами. Чинили в Н7 - надо проверить что реально шлёт.

«люди глубоко смотрят - и почти никто не доходит до продавца. дыра не в возврате, а в хэндоффе»
07 — уроки

Чему я научился

смержено != задеплоено != работает

Алерты выглядели готовыми, PR влит, всё зелёное - а уведомления молча не слались неделями. Проверять что фича РЕАЛЬНО стреляет на проде.

тихие отказы повсюду

Пайплайн данных лежал 8 дней, мониторинг диска проспал 5 дней, алерты не слались. Нужны пороги качества и фрешнес-алерты, а не «вроде работает».

SEO на старте - это индексация

Упёрлись не в позиции, а в индексацию. Пока гугл не проиндексировал инвентарь - потолок показов. Поехала индексация - всё разлочилось.

юзеры одержимы BMW

1292 поиска (на чистых данных), ~2x больше #2. Спрос буквально с экрана - надо валить контент под бэху и топ-модели.

инфра-вложения окупаются

Неделя на ops-hub/CI выглядела «без фич», но разогнала выкатку - и тогда же пик юзеров. Скорость - это фича.

жирные недели обоюдоострые

Н2 и Н5 (96-100+ PR) - круто по throughput, но ровно тогда копятся риски (рискованная миграция, fastapi-пин). Гнать - удваивая осторожность.

08 — что дальше

План, по приоритету