Сайт «Школы траблшутеров» ускорился вдвое: медиана ответа упала с 0,5 до 0,23 секунды, страницы полегчали на 86%, ошибок загрузки – ноль на 280 проверенных адресах. Помогло не новое железо, а дисциплина: шаблоны, разметка, кэш, регулярные обходы. Основатель «Школы траблшутеров» Олег Брагинский с Александром Яценко, коллегой по «Бюро Брагинского», разбирают ход работ от копии до кэша и семь сквозных уроков, применимых и к любому сайту.

Рис. 1. Три приёма за три месяца дают удвоение скорости без нового железа
braginskyoleg.com – сайт «Школы траблшутеров» на Django 4.2 со штатным кэшем Redis за nginx. Сервер собирает страницы и отдаёт готовый HTML весом 7–9 КБ, но лёгкий фундамент не отменял бед: тяжёлые стили, дыры в разметке, медленные новости. Наведение порядка потребовало 50 дней лета 2026 года.
Работали в три приёма: гигиена кода на локальной копии, затем разметка живого сайта, следом регулярные ревизии с замерами. Каждую правку оформляли пошаговой инструкцией – к финалу набралось 37. Черновики готовил ИИ-ассистент (Claude), мы же внедряли и принимали решения.
Начинайте на копии, а не в бою
Первый заход провели на статичной копии: эксперименты на localhost ничем не грозят посетителям, а удачные решения переезжают на боевой сервер пакетом. Полигон позволил резать смело: набор иконок Font Awesome похудел с 30,7 до 3,9 КБ – остались 20 реально используемых значков.
Разносили правку и проверку по разным дням: глаз, который внедрял, видит задуманное, а не получившееся.
Инлайн-стили ушли следом: 337 повторяющихся заменили шестью утилитарными классами, 51 пустой атрибут style удалили, 167 уникальных оставили сознательно – выгода возни не окупала. Чем меньше мусора в коде, тем дешевле любое будущее изменение.
Чистый исходник стареет медленнее нарядного фасада
Серверное сжатие обосновывали замерами по месту: gzip уменьшает site.min.css с 41,3 до 9,0 КБ, а все страницы разом – с 1'463 до 208 КБ, минус 86%. Абстрактное «включите сжатие» повисает в воздухе – семикратная разница на родных файлах превращает совет в решение.
Быстрый сайт – вежливость, которую посетитель чувствует

Рис. 2. Восемь замеров до и после показывают цену дисциплины в цифрах
Шаблон вместо страницы
Живой сайт проверяли обходами: меню плюс два уровня вложенности, около 200 адресов, замечания сводили в общий документ. Массовые дефекты пугали лишь в отчёте: ломаная иерархия заголовков встречалась на сотне страниц, а жила в одном подключаемом партиале.
Правка одного include выправила иерархию по всему сайту: заголовок h2 карточки события стал h4 на всех событиях разом. Так родился главный урок серии: массовый дефект возникает в шаблоне, лечить нужно источник, а не отдельные страницы поштучно.
Завели журнал замечаний с первого обхода: колонки «найдено» и «закрыто» с датами превращают спор о качестве сайта в спокойное чтение таблицы.
Микроразметка JSON-LD – машиночитаемое описание содержимого для поисковиков – на главной пустовала. После правки перечень ItemList наполнился двенадцатью событиями с ценами и часовым поясом +03:00, карточки событий получили осмысленные title и Event-разметку.
Микроданные разошлись по типам содержимого: NewsArticle на новостях, Organization с ContactPoint на контактах, ItemList на команде и тренингах. Меню обзавелось атрибутами доступности ARIA – невидимую глазу разметку лечили тем же путём, через общие шаблоны.
Регрессия – жанр, а не случайность
Собственные правки дважды ломали готовое. Сначала обнулился счётчик numberOfItems, затем блок Person вышел с одинарными кавычками: в шаблон попал словарь Python вместо вызова json.dumps – и поисковики перестали понимать разметку.
Регламент пополнили железным пунктом: Rich Results Test – проверка разметки от Google – обязателен после каждого изменения микроданных. Регрессии не признак небрежности, а свойство живого кода: страхует не аккуратность, а обязательный контрольный прогон.
Ревизия по расписанию находит забытое
Финальные недели превратили обходы в систему: меню плюс три уровня вложенности, 220–280 страниц, двенадцать сводных редакций. Каждая ревизия шла по трём осям – скорость, поисковая видимость, единообразие – и заканчивалась инструкцией разработчику.
Смотрели сайт из чужой сети и с чужого устройства: домашний кэш и быстрый канал прячут половину бед посетителя.

Рис. 3. Конвейер из пяти шагов ловит регрессию за одну-две ревизии
Третий уровень вложенности окупился мгновенно: нашли забытые разделы. Старый лендинг грузил одиннадцать блокирующих скриптов – переехал на общий шаблон с единственным отложенным. Сорок служебных страниц заказов жили без title и запрета индексации – получили noindex и canonical.
Ссылку canonical сделали абсолютной по всему сайту, страницам занятий дали дату в title. Новый формат заголовка тут же породил баг с лишней запятой – находку добили за две ревизии: любое улучшение умеет ломать соседнее.
Длину title выровняли по нормам выдачи: Google обрезает после 50–60 знаков, Bing показывает 65–70, Яндекс терпит 70–80. Из шестнадцати страниц с перебором осталось две – остальные ужали без потери смысла.
Мелочи складывались в заметные величины: карточка расписания похудела со 116 внутренних ссылок до 61, дубли с параметром vetka закрыл Clean-param, три перехода перестали ходить через лишний 301, пустой ItemList на внешних тренингах спрятали за условие {% if events %}.
Формы сдались последними: шести шаблонам добавили подписи label, заказ упростили с десяти полей до семи – пункт кочевал по сводкам месяц. Шестнадцатая ревизия впервые записала «меню полностью чисто», а максимум ответа сжался до 1,9 с.
Кэшируйте самый массовый тип страниц
Новости шли вдвое медленнее остального сайта десять ревизий подряд: медиана держалась выше секунды, вечерние всплески холодного рендера достигали 7,5 с. Самый массовый раздел дольше всех ждал кэша – и дороже всех обходился.
Серверный кэш стартовал с трети сайта: 77 адресов получили max-age=900 – копия живёт четверть часа. Начали с рубрик, где содержимое меняется редко; новости, державшие медиану, подтянулись следом.
Группами ключей Redis управляли без библиотеки django-redis: штатные scan_iter и unlink чистят адресно, приём «поколение» со сменой номера версии обесценивает связку разом, а FLUSHDB под запретом – команда стирает базу целиком, вместе с чужими данными.
Не копили замечания до большого релиза: десяток мелких правок в неделю обгоняет квартальный аврал и не ломает сайт разом.

Рис. 4. Семь уроков серии окупаются на любом живом сайте
Августовская ревизия зафиксировала результат: медиана ответа 0,23 с против 0,5 в июле, новости – 0,79 с, всплески укоротились до 1,4–1,9 с. Железо не меняли, код правили точечно – удвоение скорости дали кэш и вычищенные шаблоны.
Долг растёт из редактора
Картинки в статьях чистили трижды: долг падал с 83 до 25 и до нуля – и возвращался с каждой свежей публикацией. Авторы вставляли изображения без размеров и подписи alt, потому что редактор не возражал.
Чинить надо не страницы, а место, где они рождаются: пока правило width, height и alt не зашили в редактор, каждая статья приносит новый долг. Ручной труд борется с симптомом – настройка инструмента устраняет причину.
Поисковая гигиена равна видимости в ИИ
Видимость в ИИ-ассистентах не потребовала отдельной магии: сервер-рендеринг, полный JSON-LD и быстрые ответы нужны и поисковикам, и ChatGPT с Perplexity. Языковые модели получают готовый текст, а не пустой каркас скриптов, – преимущество, заложенное архитектурой.
Точечные добавки заняли вечер: файл llms.txt – краткая карта разделов для нейросетей – лёг в корень, ИИ-краулеров оставили без блокировок, ключевым страницам дали самодостаточный первый абзац, отвечающий на вопрос без соседей.
Попутный аудит закрыл дыру: открытая схема OpenAPI календарного сервиса раскрывала поля заказов и логику автоматических цен, а список событий расходился с витриной – десять против восьми. Схему спрятали, входу прописали лимит попыток, открытым точкам – кэш.
Открытым остался короткий хвост: вернуть браузерный кэш публичным разделам, дать новостям ETag и last_modified, зашить правило картинок в редактор, провесить версии на статику. Список не пугает: тот же процесс обходов закроет и его.
Главный итог не секунды, а конвейер: обход, сводка замечаний, инструкция с точным местом правки, внедрение, контрольный замер. Сайт, который осматривают по расписанию, не успевает копить ни долгов, ни лишних миллисекунд – порядок дешевле аврала.