50 дней SEO в B2B-клининге: 194 страницы в Яндексе и +86% кликов GSC
За 50 дней с релиза сайта: 194 страницы в индексе Яндекса, +86% кликов GSC, Lighthouse 93/100. Без покупных ссылок и агентства. Что делал по неделям.
22 марта 2026 я выкатил новый сайт клиниговой компании, в которой работаю руководителем отдела маркетинга. Через 50 рабочих дней - 194 страницы в индексе Яндекса, в Google Search Console +86% кликов и +90% показов за месяц, Lighthouse Performance 93/100 на мобильных, CLS 0.002. Без единой покупной ссылки, без агентства, без подрядчиков. Сайт самописный на PHP 8.4, 245 URL в карте.
Если коротко
- 245 URL за 50 дней: 51 услуга, 18 районов СПб, 70 метро, 12 городов Ленобласти, 50+ блог-статей.
- 194 страницы в Searchable Яндекса. На старте 13 апреля было 111, к 5 мая - 194-201 (колеблется).
- 92 страницы вернул из «Excluded by noindex» Яндекса в индекс через переобход API + IndexNow + lastmod.
- +86% кликов GSC и +90% показов за месяц (52 → 97 кликов, 2826 → 5359 показов).
- Lighthouse mobile: Performance 93, SEO 100, CLS 0, LCP 2.4s, TBT 60ms.
- SEO Health Score 62 → 84 за 18 дней (по внутренним аудитам).
В статье - что я делал по неделям, какие правки реально двинули метрики, и где наступал на грабли.
С чего начал - стартовая точка 22 марта
22 марта - initial commit пустого сайта на самописном PHP. Без CMS, без сборщика, без node_modules. Шесть системных страниц (главная, прайс, о компании, контакты, лицензии, политика) и 18 страниц услуг. Всё остальное - впереди.
Стек я выбрал намеренно простой:
- PHP 8.4 на shared-хостинге, без CMS
.htaccessкак роутер, паттерн/uborka-metro-{slug}/→uborka-metro-{slug}.php- MySQL для блога, заявок и динамического AggregateRating
- CSS прямо в репо, JS на чистом - без сборки, без транспилятора
- Self-hosted Inter (woff2), без Google Fonts
Почему так. Сайт у компании уже был - старый и тяжёлый. Я не мог себе позволить полугодовую миграцию на «модный» стек. Нужен был быстрый старт, контроль над каждым байтом разметки и возможность точечно править schema без боя с плагинами CMS. Самописный PHP закрывает все три задачи и отдаёт HTML за миллисекунды.
Что делал каждую неделю
Неделя 1-2: техника и формы
Первое, что закрыл - антиспам форм. Шесть фильтров без капчи: honeypot <input name="website" style="display:none">, regex на URL в комментарии, лимит длины телефона ≥10 ≤11 цифр, регресс на нелатиницу в комментариях >5 символов, rate-limit 5 запросов в час на IP, лог в защищённый spam_log.txt. Капча даёт +5 к боли пользователя, эти фильтры - 99% спама без капчи.
Дальше CSP с whitelist для GA4, Яндекс Метрики, Roistat, AmoCRM, Beget CDN. HSTS preload, Referrer-Policy, X-Frame-Options. CSRF-токены на всех POST.
Всю аналитику завернул в requestIdleCallback(fn, {timeout: 3000}) - GA4, Метрика и Roistat не блокируют рендер. На preconnect для аналитики не пошёл - соединение истекало до использования, тратили ресурсы впустую. Хватило dns-prefetch.
К концу второй недели self-hosted Inter с @font-face size-adjust: 107%; ascent-override: 90% на базе Arial - устранил FOUT-сдвиг, который уезжал в CLS.
Неделя 3: первый аудит и сборка карты
5 апреля - первый полный SEO-аудит силами 7 параллельных субагентов: контент / E-E-A-T, технический SEO, On-Page, Schema, Core Web Vitals, AI Search Readiness, изображения. Веса: 23/22/20/10/10/10/5%. Score 62/100. Главные дыры: Schema (LocalBusiness дублировался на 30+ страницах), CLS 0.377, инлайн-XSS в js/main.js, MD5 пароля админа.
К 8 апреля закрыл всё: один блок LocalBusiness multi-type с @id в footer, ссылки @id со страниц вместо повторов; CLS 0.377 → 0.002 за день; XSS поправил через createElement + textContent; пароль админа на SHA-256 + salt. К 10 апреля Score 72.
Параллельно прогнал сайт через Screaming Frog, нашёл 474 URL: 245 нужных, остальное - устаревшие версии и шаблонные заглушки. 43 страницы метро с тонким контентом ~230 слов убрал из sitemap.
Неделя 4: Programmatic SEO - 100 страниц
С 16 апреля день программатика: 39 метро + 18 районов + 12 городов Ленобласти заполнил уникальным контентом. Шаблон один, контент уникальный - $district_content, $metro_content, $city_content подставляются в общий metro-template.php, district-template.php, lo-template.php. Порог уникальности страницы - больше 45%, проверял через Screaming Frog «Near Duplicates».
Чтобы не получить doorway-риск, на каждой странице:
- Уникальный H1 и H2 (без шаблонных «Уборка в районе X»)
- Раздел «Особенности района» - 200-300 слов про конкретный район или метро
- 3-5 FAQ под локацию
- Цены, время выезда бригады, адрес ближайшего объекта компании
Programmatic SEO Score по моей внутренней методике вышел 95/100. Это про шаблон, а не про факт ранжирования - проверять буду по показам в GSC через 3-4 месяца.
Неделя 5: блог-волна
9 апреля - волна блога, 21 статья за день. 17 апреля - вторая волна, 10 статей. К концу апреля в блоге 50+ статей по 1500-4000 слов, у каждой:
- BlogPosting + FAQPage + QAPage schema
- 4-5 вопросов FAQ - реальные запросы из Wordstat и People Also Ask
- 3+ внутренних ссылок: 1 на услугу, 1 на другую статью, 1 на /price/ или контакты
- Author Person с
rel="author"на dimaserbun.ru - Pexels-баннер (свободная лицензия), для Дзена отдельная JPEG-версия
Темп после двух волн - 2-3 статьи в неделю. Не публиковать больше 5 за день и не бэкдейтить 50 в один месяц - это сжигает шаблоны фильтров поисковиков. 6 мая распределил 11 готовых постов по диапазону 20-30 апреля, чтобы плотность публикаций выглядела ровно.
Неделя 6: AI-цитируемость и возврат из excluded
С 24 по 26 апреля три направления параллельно.
Возврат из «Excluded by noindex». 13 апреля у меня в Яндексе было 56 страниц в Excluded, 22 апреля - уже 92. Это половина сайта. Через Yandex Webmaster API → /recrawl/queue отправил 37 блог-статей на переобход (квота 620 URL/сутки) + IndexNow ping для 70 метро-URL. К 5 мая в Excluded осталась 1 страница из 93. Большинство вернулось в Searchable, теперь 194-201.
GEO-аудит и AI Overviews. Score по платформам: Google AIO 58, ChatGPT web search 48, Perplexity 62, Bing Copilot 64. Итого 61/100. Главные правки: пассажи 134-167 слов под H2 на 5 ключевых страницах с прямым ответом в первых 40-50 словах + класс .answer-block для speakable; H2 в форму вопроса («Какая уборка подходит для вашего типа квартиры?» вместо «Уборка по типу квартиры»); AI-краулеры в robots.txt - GPTBot, OAI-SearchBot, ClaudeBot, anthropic-ai, Google-Extended, PerplexityBot, CCBot, YouBot, cohere-ai, Bytespider, meta-externalagent. И llms.txt в корне сайта по формату llmstxt.org - H1, blockquote-описание, разделы H2 со списками, ИНН/ИСО/рейтингами.
Глоссарий. 26 апреля - /glossary/ на 45 терминов клининга + DefinedTermSet schema. Перелинковка 188 ссылок на /glossary/#anchor из текстов сайта - это даёт структурный сигнал «у сайта есть собственный словарь терминов» и открывает дорожку для AI-цитирований.
Неделя 7: уровень А и Б, расширение шаблонов
5 мая - пакет правок на доверие и YMYL.
Уровень А (доверие): preconnect к домену CDN, mobile preload hero-картинки, динамический AggregateRating из MySQL в schema, AreaServed массив из 31 City (18 районов СПб + 12 ЛО + СПб). Бренды из тела страниц убрал - Karcher, Koch Chemie и другие - оставил только в местах, где они правда нужны как факт.
Уровень Б (YMYL): на страницах про уборку после смерти и после пожара - ссылки на лицензию Роспотребнадзора, СанПиН 3.3686-21, 1.2.3685-21, 2.1.3684-21 с гиперссылками на consultant.ru. Для YMYL-ниш это критично: Google и Яндекс жёстко режут страницы без авторитетного подтверждения.
6 мая - расширение шаблонов uborka-N-komnatnoj через SERP-анализ конкурентов: 1500 → 1700-1900 слов, FAQ 5 → 10. Расширение шаблона метро: FAQ 3 → 5, секция «Подготовка», SEO-text. Переобход 70 URL через IndexNow.
7 мая - сводная проверка GSC + Яндекс Вебмастер. 39 URL отправил в recrawl, поправил RSS-фид Дзена (убрал дубль h1, конвертация table в списки).
Главные правки, которые двинули метрики
Если выбирать пять решений с самым большим вкладом - вот они.
| Решение | Что дало |
|---|---|
Один блок LocalBusiness с @id в footer | Schema перестала дублироваться на 30+ страницах, Rich Results Test чистый |
| Self-hosted Inter с size-adjust:107% Fallback | CLS 0.377 → 0.002 за день |
| Programmatic 100 страниц районов и метро при 45%+ уникальности | +44 страницы в индекс Яндекса за 11 дней (111 → 155) |
| Yandex Webmaster API recrawl + IndexNow + lastmod | Возврат 92 из 93 страниц из Excluded |
| Пассажи 134-167 слов с прямым ответом в первых 40-50 | Рост позиции по кластеру «уборка квартир спб»: средняя 28.8 → 16-24 |
Цифры - что вышло
| Метрика | Старт (март) | 24 апреля | 5 мая |
|---|---|---|---|
| GSC клики/мес | 52 | 97 (+86%) | растёт |
| GSC показы/мес | 2 826 | 5 359 (+90%) | до 595 в день |
| GSC средняя позиция | 28.8 | 27.3 | 16-24 |
| Я.Searchable | 111 (13.04) | 155 | 194-201 |
| Я.Excluded | 56 (13.04) | 92 | 1 |
| CLS | 0.377 | - | 0 |
| LCP mobile | ~4.5s | - | 2.4s |
| Lighthouse Performance | ~60-70 | - | 93/100 |
| SEO Health Score | 62 | 72 (10.04) | 84 (23.04) |
Топ-запросы Яндекса по показам на 7 мая: «услуги клининга в СПб цены» - 103 показа, «уборка производственных помещений цена за 1 м²» - 79, «клининг стоимость» - 77, «клининг СПб» - 72. По кликам: брендовые в топ-3, плюс «уборка промышленных предприятий», «уборка подземных паркингов» (27 показов на позиции 6 - после правки H2 и FAQ).
Что следующее
Из открытых задач на конец 50-дневки:
- YouTube канал + 5 видео - корреляция с AI-цитированием 0.737, самый сильный сигнал
- Wikidata-запись для компании
- Reddit - 10-15 экспертных ответов в месяц
- LinkedIn Company Page
- 6 каталогов первой волны: Cleannow, Orgpage, Cataloxy, Rosfirm, Spr, Profi.ru
- 1-2 публикации в деловых изданиях СПб → потом Wikipedia ru
- llms-en.txt - английская версия для глобальных AI
Главный вывод. Новый сайт за 50 дней без бюджета на ссылки можно довести до состояния, когда Яндекс держит 200 страниц в выдаче, а GSC показывает рост в 2 раза. Условия: всё руками, никакой готовой темы CMS под нишу, прямой контроль над schema и performance, дисциплина в темпе блога, переобход через API.
Если у вас B2B-сайт в локальной нише и нужно структурно разогнать SEO - пишите в Telegram @dimik90. По услугам и форматам работы:
- Удалённый РОМ - внешний руководитель отдела маркетинга от 70 000 ₽/мес
- Независимый аудит подрядчика - проверка работы текущего SEO-агентства от 30 000 ₽
- SEO для услуг - полный цикл: техника, schema, контент, программатик, AI-сигналы
- Маркетинг для клининга - главная ниша, конкретика по бюджетам и каналам
Близкое по теме: как я работаю - без воды и 40-страничных КП и предыдущий кейс по клинингу - 3 года 9 месяцев в нише.
Вопрос-ответ