
PetZone — платформа допомоги тваринам · 2025
Платформа усиновлення тварин, яку нарешті може читати пошук
Повностекова платформа усиновлення: бекенд на .NET із clean architecture, React SPA шістьма мовами та prerender-pipeline, щоб single-page app ранжувався у Google.
SPA, яку нарешті можуть сканувати пошуковики — сторінки тварин читаються сервером шістьма мовами
Проблема
PetZone допомагає тваринам знайти дім — але усиновлення відбувається тільки тоді, коли люди можуть знайти оголошення. Додаток був зроблений як client-rendered React SPA: чудово для UX і жахливо для SEO — пошуковики отримували порожню HTML-оболонку, тому сторінки тварин майже не ранжувалися. До того ж аудиторія мультимовна (платформа на 6 мовах), що множить SEO-площу і шанс помилитися.
Як я підійшов
Розділив на дві окремі задачі — надійний бекенд і пошукова видимість поверх SPA — і поставляв шарами:
- Бекенд .NET у clean architecture — шари Domain, Use Cases, Infrastructure, Contracts і API, окремий нотифікаційний мікросервіс. Доменні та інтеграційні тести — поведінка зафіксована, а не «маємо надію».
- SEO-лендинги — сторінки за видами (собаки, коти…) та збагачені DTO тварин (назва виду/породи), щоб у кожному оголошенні був реальний індексований контент, а не лише ID.
- Prerender-pipeline — крок збірки, що рендерить ключові маршрути в статичний HTML і генерує sitemap, щоб краулери отримували повноцінні сторінки, а користувачі — швидкий SPA.
Стек і чому
- Clean architecture у .NET — у домені (тварини, оголошення, волонтери) є реальні правила; ізоляція від інфраструктури тримала їх тестованими, а API — тонким.
- React + Vite SPA з i18next — швидкий app-like UX на 6 локалях без важкого фреймворку.
- Prerender + sitemap замість повного SSR-переписування — отримав SEO-вигоду без викидання робочого SPA і подвоєння складності хостингу. Прагматичне рішення перемогло «правильне».
- In-memory кеш замість Redis — прибрав цілу частину інфраструктури, коли профайл показав, що зовнішній кеш на цьому масштабі не окупає себе.
Результат
- Сторінки тварин і видів тепер читаються сервером усіма підтримуваними мовами — краулери бачать контент, а не порожню оболонку.
- Бекенд покритий тестами на доменному й інтеграційному рівнях — зміни доїжджають у прод упевнено.
- Інфраструктура з часом спростилася (прибрали Redis), а не ускладнилася.
Що було складно
SEO на client-rendered SPA — класична пастка: «правильна» відповідь — повне переписування на SSR, що тут означало б місяці й ризикованіший деплой. Складне було в тому, щоб не піддатися спокусі та натомість зробити prerender-крок, що дає краулерам статичний HTML для кожного маршруту кожною мовою, без розгалуження кодової бази на «SSR-режим» і «SPA-режим». Правильно зробити мультимовні sitemap і canonical URL було копіткою частиною — зробиш не так, і Google бачить шість копій однієї сторінки.
Інші проєкти

Сайт-портфоліо, що приводить клієнтів колористу
2026Zvezdochka — студія фарбування волосся, Одеса
Образ-важкий мультимовний сайт-портфоліо і запис для професійного колориста — швидкі галереї з об'єктного сховища, відгуки, курси та прямі канали запису.
Власний мультимовний дім, що перетворює Instagram-трафік на записи

Каталог продуктів, що перетворює відвідувачів на запити прайсу
2026SunCold — постачальник контейнерів і сонячного обладнання
Мультимовний B2B-каталог і lead-gen сайт для постачальника контейнерів і сонячного обладнання — швидкі сторінки продуктів, форма запиту прайсу, SEO-контент (блог/FAQ), щоб приводити покупців.
Self-serve каталог і воронка запитів прайсу, які самі заробляють пошуковий трафік
Потрібне щось подібне?
Беру невелику кількість проєктів одночасно. Якщо це схоже на вашу задачу — напишіть.