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 в footerSchema перестала дублироваться на 30+ страницах, Rich Results Test чистый
Self-hosted Inter с size-adjust:107% FallbackCLS 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 клики/мес5297 (+86%)растёт
GSC показы/мес2 8265 359 (+90%)до 595 в день
GSC средняя позиция28.827.316-24
Я.Searchable111 (13.04)155194-201
Я.Excluded56 (13.04)921
CLS0.377-0
LCP mobile~4.5s-2.4s
Lighthouse Performance~60-70-93/100
SEO Health Score6272 (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. По услугам и форматам работы:

Близкое по теме: как я работаю - без воды и 40-страничных КП и предыдущий кейс по клинингу - 3 года 9 месяцев в нише.

Вопрос-ответ

Частые вопросы

Сколько стоит SEO для клининговой компании в СПб с нуля?
В этом кейсе бюджет на платные ссылки и SEO-агентства - ноль. Я веду маркетинг в компании сам как руководитель отдела (РОМ) и сам пишу код, контент, schema, перелинковку. Из инструментов - стандартный набор GSC, Яндекс Вебмастер, Метрика, Wordstat, Screaming Frog (фриланс-лицензия), несколько MCP-серверов. Если сравнивать с агентством: услуга «SEO для услуг от 50 000 ₽/мес» закроет техническую часть, контент и регулярные правки - это рынок СПб 2026.
За какой срок видно первые результаты в Яндексе для нового сайта?
Первые показы и клики начали приходить со 2-3 недели после релиза, но это были околобрендовые запросы. Реальный рост по нишевым ключам пошёл с 5-6 недели - после того, как я закрыл программатик-кластер из 100 страниц районов и метро и волну блога из 21 статьи. К 50 дню: 194 страницы в Searchable, +86% кликов GSC. Это для нового домена без истории и без покупного ссылочного.
Что делать в первую очередь - ссылки или контент?
В моём кейсе - ни то, ни другое. В первую очередь техника: антиспам форм, корректный schema, чистый sitemap, нормальные title и description, CLS в зелёной зоне, AI-краулеры в robots.txt. Без этого ссылки и контент льются в дырявое ведро. Содержательную часть я докручивал параллельно технике, а ссылочное оставил на потом - каталоги по 1 в день и 5 «best of» упоминаний в специализированных рейтингах.
Можно ли так же сделать для другой ниши, не клининг?
Подход - да, цифры - нет. Программатик-шаблон на районы и метро работает в локальных нишах: клининг, ремонт, доставка, дезинфекция, грузоперевозки. Темп блога 2-3 статьи в неделю - универсален. Чек-лист для performance и schema - общий. А вот частотности запросов и плотность конкурентов в выдаче в каждой нише разные, поэтому ключевые точки роста придётся искать по своему семантическому ядру.
Какие инструменты дали больше всего результата?
Яндекс Вебмастер API для переобхода (квота 620 URL/сутки) - вернул 92 страницы из «Excluded» обратно в выдачу. IndexNow - Bing и Яндекс видят новый URL за часы вместо недель. Screaming Frog - нашёл 43 страницы с тонким контентом, я их убрал из sitemap, дописал и вернул. Wordstat API - собрал ядро 861 фраза в 20 кластеров. Lighthouse - гонял до зелёной зоны после каждой пачки правок. Без них пришлось бы работать на ощупь.

Оцените статью

Дальше

← Все записи